飛凌imx6q uboot新增I2C讀寫外設

2021-09-08 20:24:33 字數 1623 閱讀 1462

有時候需要在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 這裡舉個例子 然後這個關鍵了,因為我就是在這個地方卡住了。編譯一直不通過而且報錯報了乙個很奇怪的錯誤,找不到錯誤在 一...