全部博文(105)
分类: 嵌入式
2015-07-01 11:23:41
在uoobt 中需要用到i2c 去与CPLD 进行通信。试过程中,由于CPLD那边的程序还是刚写,就想用I2C 命令去配合初步调试,等通过命令能读取到SLAVE地址,再在uboot中程序操作与CPLD进行功能通信。
平台:imx6dl
Uboot:2009.8
在uboot 的命令行下,i2c dev 0后显示的是
I2C sub-system
speed [speed] - show or set I2C bus speed
i2c bus [muxtype:muxaddr:muxchannel] - add a new
bus reached over muxes
i2c dev [dev] - show or set current
I2C bus
i2c md chip address[.0, .1, .2] [# of objects] -
read from I2C device
i2c mm chip address[.0, .1, .2] -
write to I2C device (auto-incrementing)
i2c mw chip address[.0, .1, .2] value [count] - write to I2C device
(fill)
i2c nm chip address[.0, .1, .2] - write to I2C
device (constant address)
i2c crc32 chip address[.0, .1, .2] count -
compute CRC32 checksum
i2c probe - show devices on the I2C bus
i2c reset - re-init the I2C Controller
i2c loop chip address[.0, .1, .2] [# of objects] - looping read of device
i2c sdram chip - print SDRAM
configuration information
这就是告诉你,你所输入的命令不支持。尼玛,freescale 就喜欢干这种事,做到一半,剩下的不管。你还不能说他没做,因为他确实做了,只是没有做好而已。接着又试了一下 i2c probe 发现能找到 i2c
channel 2 的芯片地址。这个时候我就顺便把所有的I2C命令在这上面都试了一下。好在其他要用到的命令是支持的。
问题来了,这个i2c dev 没有办法去切换通道,还是没有办法与CPLD通信。跟了一下代码,发现了是没实现
点击(此处)折叠或打开
看起来很牛逼的样子。U_BOOT_CMD应该是一个宏。Include/command.h中找到了其定义
点击(此处)折叠或打开
以上面的I2C为例
i2c, 6, 1, do_i2c,"I2C sub-system",
name : i2c //命令名字
maxargs: 6 //最大参数
repeatable: 1 // 自动重复执行
cmd : do_i2c // 要实现的函数
usage: I2C sub-system
help: 帮助信息
但这个宏是在什么时候调用的呢?其实应该说这个结构体。
参考链接:
存在一个_u_boot_cmd 段里面,然后find_cmd可以遍历到,且最终调用。
了解这个后,在uboot中添加一个新的命令,就显得格外简单。例如添加一个新的命令,来记录自己的板号,公司等信息。
Cmd_test.c 这个文件就是一个添加新命令的例子。