在做i2c调试时,发现每次系统重启时,应用程序未运行之前,i2c芯片总是高4位输出高电平,低4位输出低电平。这样导致系统启动时,i2c控制的8路DO有4路输出高电平,对于自控系统来说,是很大的错误。
解决办法:
1.查看内核i2c驱动发现驱动代码没有问题。
2.系统启动时,进入u-boot,发现问题依然存在,觉得应该是u-boot对i2c的初始化有问题。
3.查找u-boot初始化i2c代码,在board\davinci\da8xxevm\da850evm.c中的rmii_hw_init()函数中:
.........
buf[0] = 0xf0;
ret = i2c_write(CONFIG_SYS_I2C_EXPANDER_ADDR, 6, 1, buf, 1);
if (ret) {
printf("\nExpander @ 0x%02x write FAILED!!!\n",CONFIG_SYS_I2C_EXPANDER_ADDR);
........
这里写入0xf0,就会导致i2c高4位输出高电平。所以将buf[0] = 0x00;写入就不会出现问题了。问题解决。
如果想系统重启时不影响DO输出,这里就不要对I2c进行写操作。
阅读(2374) | 评论(2) | 转发(0) |