有時候需要在uboot啟動或配置i2c外設,例如led控制晶元等。
imx6q uboot中初始化**位置在uboot-imx/board/freescale/mx6q_sabresd/mx6q_sabresd.c檔案中
imx6q uboot中使用的i2c方法在/uboot-imx/drivers/i2c/mxc_i2c.c檔案中,剛開啟檔案,滿眼都是i2c_base這個巨集,定義為:
#define i2c_base config_sys_i2c_port
繼續跟蹤config_sys_i2c_port這個巨集,這是定義在include/cinfigs/mx6dl_sabresd.**件中,定義為:
#define config_sys_i2c_port i2c2_base_addr
i2c2_base_addr定義在include/asm-arm/arch-mx6/mx6.**件中,可以看出,uboot目前只使用了i2c2,我需要使用i2c3,所以我在mxc_i2c.c檔案中增加了乙個設定i2c的方法:
int set_i2c_bus(int _bus_num)
}
uboot中i2c讀寫方法:
inti2c_read(uchar chip, uint addr,
intalen, uchar *buffer,
intlen);
inti2c_write(uchar chip, uint addr,
intalen, uchar *buffer,
intlen);
/** read/write inte***ce:
* chip: i2c chip address, range 0..127,不帶讀寫位
* addr: memory (register) address within the chip
* alen: number of bytes to use for addr (typically 1, 2 for larger
* memories, 0 for register type devices with only one
* register)
* 其中alen 為1,說明chip是8bit的, 為2則是 16bit的。
* buffer: where to read/write the data
* len: how many bytes to read/write
** returns: 0 on success, not 0 on failure*/
注意:
1、剛開始讀寫時,形參buffer是位址,我直接寫了值,坑了我一把;
2、飛凌imx6q uboot中mx6q_sabresd.c檔案下board_late_init方法中呼叫setup_pmic_voltages()方法,該方法內有操作i2c的例項,可做參考;
imx6q u boot函式執行流程分析
bsp l 4.1.5 1.2.0 ga 關於u boot 2015.04 的函式執行流程分析 在make defconfig時會指定u boot相關的配置檔案,配置檔案的指定流程是通過makefile實現的,就不具體分析了。下面分析u boot的函式呼叫流程 首先會執行 arch arm cpu ...
基於IMX6UL新增 HDMI
基於imx6ul 新增hdmi 1 實現hw6ul lite 開發板上的擴充套件 hdmi 介面功能及 bsp 2 能夠將 freescale yoctolinux 的gui 通過hdmi 介面顯示輸出 準備工作 1 vpn 連線2 ubuntu14.04 作業系統 其它 linux 發行版也可以 ...
imx6 新增自己的board檔案
imx6自身有幾個board檔案,但有些時候想做乙個屬於自己的board檔案也是可以的。首先你要把你自己的board.c和board.h檔案新增到arch arm math mx6 這裡舉個例子 然後這個關鍵了,因為我就是在這個地方卡住了。編譯一直不通過而且報錯報了乙個很奇怪的錯誤,找不到錯誤在 一...