最近要用到EEPROM, I2C通信,找过一些帖子,但讲解的都比较片面,Engineers 能给点帮助么。
最近要用到i2c的地方,比较多。 能给个在非协议栈下的这几个函数么
i2c_write()
i2c_start()
i2c_stop()
i2c_init()
我总觉得自己改的有些问题。
花一个下午,研究研究I2C协议
就能写出来代码了
网络上有一些相关的讲解 http://ziye334.lofter.com/post/2435a3_2a2e1b4 您可以先参考下
另外协议栈安装目录下的BLE-CC254x-1.3.2\Components\hal\target\CC2541ST目录下可以找到hal_i2c.c、hal_i2c.h文件
谢谢你的回复,然后其实 协议栈里的I2C.c 文件我研究过了,但是有些地方看的不是很明白。 有用协议栈里的i2c 写的一些具体与设备通信的例子吗。
其实我感觉没什么问题了,关键是我用i2c和设备通信不成功,不知道问题出在哪,所以想先从i2c这里仔细的查找问题。
万分感谢你的回复!
比如说在给slave写的函数,分为command和data2个函数,
void Write_Command(uint8 Data)
{
I2C_Start();
I2C_write(0x00);
I2C_write(Data);
I2C_Stop();
}
void Write_Data(uint8 Data)
{
I2C_Start();
I2C_write(0x40);
I2C_write(Data);
I2C_Stop();
}
但是,协议栈的这个写,我怎么表示成上面2个不同的函数呢,直接在参数里写 0x40(data指令)abcdrfg(要发送的数据), 就是说把0x40和要发送的数据连在一起一起发送到slave,这样行吗?
uint8 HalI2CWrite(uint8 len, uint8 *pBuf)
{
if (i2cMstStrt(0) != mstAddrAckW)
{
len = 0;
}
for (uint8 cnt = 0; cnt < len; cnt++)
{
I2C_WRITE(*pBuf++);
if (I2CSTAT != mstDataAckW)
{
if (I2CSTAT == mstDataNackW)
{
len = cnt + 1;
}
else
{
len = cnt;
}
break;
}
}
I2C_STOP();
return len;
}