使用GPIO模拟i2c读取eeprom24XX16

文章介绍了一种使用GPIO模拟I2C通信的方法,特别是在连续写入多个字节时遇到的问题。代码示例中,当地址对齐到EEPROM的页大小时,需要重新发送起始信号和地址。关键点在于,在写入一页后添加停止位,确保写入完成后能继续下一页的写入。通过循环等待确保上一次写操作完成。
摘要由CSDN通过智能技术生成

这边文章写的很好,特别是最后面用gpio模拟i2c的代码,基本可以使用,但是在连续写入多个字节的函数中,还有些问题

uint8_t ee_WriteBytes(uint8_t *_pWriteBuf, uint16_t _usAddress, uint16_t _usSize){

    uint16_t i,m;
    uint16_t addr;
    addr=_usAddress;
  for(i=0;i<_usSize;i++)
    {
          //当第一次或者地址对齐到8就要重新发起起始信号和EEPROM地址
          //为了解决8地址对齐问题
            if(i==0 || (addr % EEPROM_PAGE_SIZE)==0 )
            {

                  //重点,重点+++++++++++++++++,这里要加上如下代码:

                   if(i!=0){

                       i2c_stop();//这里一定要给停止位,才能在写入一页(16个字节)后继续写入。

                   }


                 //循环发送起始信号和EEPROM地址的原因是为了等待上一次写入的一页数据\
                写入完成
                 for(m=0;m<1000;m++)
                 {
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值