这几天在研究一个项目的I2C通讯,一开始无论怎么搞都读不了IC的ID或者写不进数据,搞的十分的焦灼,幸好最后还算是捣弄出来的了,然后趁着项目不是很紧,赶紧把这几天对I2C的研究心得记录一下,免得自己又忘记了。
在开始调试软件前,先要确认IC的供电,使能脚,复位脚等正确供电,先检查硬件!先检查硬件!先检查硬件!
1.我使用的ADK版本是4.3,和以前的ADK版本是一样的,I2C的接口没有修改,只是4.3多了一个I2C reset的函数可以用。
然后我们来讲解一下I2C给出的接口I2cTransfer()这个函数怎么用,当然大家可以自己看说明,CSR是有写的。
该函数uint16 I2cTransfer(uint16 address, const uint8 *tx, uint16 tx_len, uint8 *rx, uint16 rx_len);
uint16:返回的是和从机(csr867x只能做主机)通讯得到得ACK(确认回答)的次数;
address:该参数是从机的器件地址,一般器件规格书上会给出,但是这里有大坑,待会再细说;
tx:要发送的数据地址开头,一般载体是数组,所以这里一般填数组名字;
tx_len:要发送数据的总长度,一般直接拿数组的长度即可;
rx:要接收(读取)的数据载体,用来保存在从机寄存器里读取的数据;
rx_len:要读取数据的长度,一般看规格书上,需要读取多少个寄存器来定义;
2.函数的参数清楚了之后就直接用吧,我们以AW9523B这个LED IC来举例子:
该IC的规格书上有给出,地址如图: