微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 最近要用到EEPROM, I2C通信,找过一些帖子,但讲解的都比较片面,Engineers 能给点帮助么。

最近要用到EEPROM, I2C通信,找过一些帖子,但讲解的都比较片面,Engineers 能给点帮助么。

时间:10-02 整理:3721RD 点击:

最近要用到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;
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top