cc2541 sensor 时序 i2c

2019-07-25 13:51发布




/**************************************************************************************************
* @fn          HalSensorReadReg
*
* @brief       This function implements the I2C protocol to read from a sensor. The sensor must
*              be selected before this routine is called.
*
* @param       addr - which register to read
* @param       pBuf - pointer to buffer to place data
* @param       nBytes - numbver of bytes to read
*
* @return      TRUE if the required number of bytes are reveived
**************************************************************************************************/
bool HalSensorReadReg(uint8 addr, uint8 *pBuf, uint8 nBytes)
{
  uint8 i = 0;

  /* Send address we're reading from */
  if (HalI2CWrite(1,&addr) == 1)
  {
    /* Now read data */
    i = HalI2CRead(nBytes,pBuf);
  }

  return i == nBytes;
}


第一张图是eeprom的读操作,然后上面的代码是TI 协议栈里的sensor的.  然后我看了下代码,里面的i2c时序和eeprom里datesheet的时序不一样。

TI显示的i2c时序是:
   START -> device_write->write_byte_address->STOP    START  -> device_read ->data_out -> NACK -> STOPeeprom 的datesheet显示的i2c时序是:   START -> device_write->write_byte_address->write_byte_address->    START  -> device_read ->data_out -> NACK -> STOP2者的区别就是在read操作时,先要写一个byte地址(从哪开始读),TI是写完byte地址后STOP然后重新START而eeprom  datesheet里显示的是写完byte地址后,没有STOP,直接重新START.

so i think it should be START  ....  START ..... STOPbut it's                START........STOP.......START.......STOP.所以希望有能人异士给我解答下,应该如果下手。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
azq13158
1楼-- · 2019-07-25 14:59
自己先顶个,静候佳音!
dirtwillfly
2楼-- · 2019-07-25 19:36
 精彩回答 2  元偷偷看……
azq13158
3楼-- · 2019-07-25 22:37
dirtwillfly 发表于 2015-10-13 08:16
HalSensorReadReg用于256K以下的EErom完全没有问题的,超过256K的会有麻烦

我的是512K bit (62 Kbytes)
azq13158
4楼-- · 2019-07-25 23:10
dirtwillfly 发表于 2015-10-13 08:16
HalSensorReadReg用于256K以下的EErom完全没有问题的,超过256K的会有麻烦

当然了,我知道例子给的byte address是8bit的,而我的是需要16bit的,这好解决关键是,TI和eeprom datesheet 俩者描述的时序不一样
dirtwillfly
5楼-- · 2019-07-26 04:25
azq13158 发表于 2015-10-13 13:27
我的是512K bit (62 Kbytes)

修改HalSensorReadReg函数吧,或者自己重新写一个iic的函数。
也可以不用这些函数,直接操作寄存器来操作
xyz549040622
6楼-- · 2019-07-26 05:52
我的认识是应该两种都可以的。你可以实际试试,如果前者可以的话,直接移植前者的。TI是写完byte地址后STOP然后重新START,我认为这个STOP是无关紧要的。不过最好还是实际试试。

一周热门 更多>