cc2541 硬件i2c 读AT24CM01

在使用cc2541进行硬件I2C与AT24CM01通信时遇到问题,花费大量时间排查。关键在于写操作后需等待一段时间再进行读操作,以免数据未写入完成导致读取失败。同时,写函数要处理跨页问题,而读函数则直接读取。确保在写入新页时添加适当延时,确保上一页写入完成。
摘要由CSDN通过智能技术生成

之前一直读不出数据,设备地址对了,宏定义添加了,但就是读不出数据,调试这个花了我一天半的时间!不能忍:检查自己确实没有错误后,唯一一个需要注意的地方就是,写函数后不能立即调用读函数,因为在写需要一定时间,如果还没写完就去读那就会读取失败。

写函数需要注意跨页问题,读函数则不用,直接读就好。

关于跨页,不同芯片对应不同页数和一页的字节数,在传进来的地址需要判断是否已经另起一页,特别注意:一定要延时,留时间给上页写入完成,才能写新的一页数据。

uint8 My_I2C_Mem_Write(uint32 addr, uint8 len, uint8 *pBuf)
{

  uint8 addrL = 0, addrH = 0, addrHH = 0;   //KJ-

  addrL = (uint8)(addr & 0xff); //KJ-
  addrH = (uint8)(addr >> 8);   //KJ-
  addrHH = (uint8)( (i2cAddrSave & 0xFC) | ((addr >> 15) & 0x02) );  //KJ- i2cAddr | P0

  //KJ- Write Start_Signal for Read
  I2C_STRT();

  //KJ- Write Device_Addr.
  if ( I2CSTAT == mstStarted ) /* A start condition has been transmitted */
  {
    I2C_WRITE( addrHH & 0xFE ); //KJ- set LSB = 0 for Write
  }
  if ( I2CSTAT !=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值