TI中文支持网
TI专业的中文技术问题搜集分享网站

dm8168 iic 问题

hi all:

     我现在在调试dm8168的uboot,尝试在uboot中添加,iic从设备初始化的代码。在调试中发现这样的现象。

     在我上电后,uboot中调用i2c_read函数读取iic从器件的内容时,会报“I2C read: I/O error”的错误,使用示波器在抓取iic引脚的波形发现没有数据输出。

     但是在uboot中输入boot启动内核,在linux启动完成后,在linux中输入reboot,重启设备。

     重启到uboot输入回车中止启动,这时执行同样的iic操作,全部是好用的,读写的数据全部正确。

     现在uboot中iic的接口函数,是调用omap24xx_i2c.c中的函数,在uboot启动中已经调用iic_init函数。

     开始怀疑io复用的问题,但是iic0,1的引脚都没有复用。

     所以这个问题现在比较迷惑,iic初始化时出了对iic寄存器的初始化还要依赖于其他单元吗?内核中应当是做了一些初始化,使iic工作了,而uboot中没有做。

Chris Meng:

你好,

请问在uboot下测试的是I2C0还是I2C1?应该是I2C0在uboot下是可以正常访问的。I2C1无论是在uboot/kernel下默认代码都是没有配置的。

如果是I2C0,你可以看看相关时钟是否有使能。

下面的信息可以在http://processors.wiki.ti.com/index.php/TI81XX_PSP_04.04.00.02_Feature_Performance_Guide找到。

Module/Subsystem Usage Info

Module/Subsystem

Enabled on Reset?

Enabled in UBoot?

Enabled in Linux?

Remarks

I2C0

NO

YES

CONFIG

I2C1

NO

NO

NO

I2C2

NO

YES

CONFIG

NA – TI816X

I2C3

NO

NO

NO

NA- TI816X

gaoz henzhong:

回复 Chris Meng:

使用的是iic0,我确定下时钟源的问题。

uboot中默认iic操作的接口是操作的iic0,因为从代码上看寄存器的赋值是iic0的寄存器,其中包括三个函数,初始化化,write,read。

用的是read调用

gaoz henzhong:

回复 gaoz henzhong:

从uboot代码上看使能了iic0的clk:

s_init–>prcm_init–>peripheral_enable()

peripheral_enable中有下边的代码

/* I2C0 */ __raw_writel(0x2, CM_ALWON_I2C_0_CLKCTRL); while(__raw_readl(CM_ALWON_I2C_0_CLKCTRL) != 0x2); /* I2C1 */ __raw_writel(0x2, CM_ALWON_I2C_1_CLKCTRL); while(__raw_readl(CM_ALWON_I2C_1_CLKCTRL) != 0x2);

从注释来看应当是使能了iic的时钟

kooking:

可以把u-boot和kernel初始化I2C后相关的寄存器打印出来,比较一下有差异的寄存器

gaoz henzhong:

回复 kooking:

对比打印iic寄存器的值,好用和不好用时,没有发现不一样的地方。

下边是iic寄存器的值

48028000 = [9]48028004 = [5040]48028008 = [0]4802800c = [0]48028010 = [1]48028014 = [0]48028018 = [0]4802801c = [0]48028020 = [0]48028024 = [0]48028028 = [0]4802802c = [1f]48028030 = [1f]48028034 = [0]48028038 = [0]4802803c = [0]48028040 = [0]48028044 = [0]48028048 = [0]4802804c = [0]48028050 = [0]48028054 = [0]48028058 = [0]4802805c = [0]48028060 = [0]48028064 = [0]48028068 = [0]4802806c = [0]48028070 = [0]48028074 = [0]48028078 = [0]4802807c = [0]48028080 = [0]48028084 = [0]48028088 = [0]4802808c = [0]48028090 = [1]48028094 = [0]48028098 = [0]4802809c = [fd]480280a0 = [0]480280a4 = [8000]480280a8 = [1]480280ac = [3ff]480280b0 = [1]480280b4 = [5a]480280b8 = [5a]480280bc = [e0]480280c0 = [8000]480280c4 = [0]480280c8 = [0]480280cc = [0]480280d0 = [0]好和不好没有区别。48181564 = [2] CM_ALWON_I2C_0_CLKCTRL clk使能,iic0使能48181428 = [102] CM_ALWON_SYSCLK6_CLKCTRL 上一级时钟使能48140400 = [380188] MAINPLL_CTRL 工作48140404 = [0] MAINPLL_PWD 供电单元使能没有问题

在测试时发现,有时第一次上电也好用,有时不好用。还是怀疑那个寄存器可能没有初始化。不过我能想到的就是,时钟控制,电源控制,和iic模块本身寄存器,是否还有其他寄存器会影响iic的工作

赞(0)
未经允许不得转载:TI中文支持网 » dm8168 iic 问题
分享到: 更多 (0)