desertsailor 发表于 2025-6-11 20:27

N32L403的I2C有BUG?

使用N32L403的I2C,通过查询方式读写AT24C256,单次读或写多个字节,存在卡死的情况,而且这种现象的出现似乎与代码对齐有关系,当出现卡死的情况时,在相关代码前增加一条无关指令后又能稳定工作了,删去这条无关指令稳定出现卡死的现象。大家有遇到这种情况吗?原厂的技术人员能否解答一下?

chenqianqian 发表于 2025-6-11 22:00

IIC本身也简单,不会存在bug吧。

dffzh 发表于 2025-6-12 08:45

咱一般都用模拟IIC,感觉比MCU硬件IIC用起来方便,特别是做MCU和外置flash/eeprom芯片的通信的时候。

丙丁先生 发表于 2025-6-12 13:17

还停留在例程的怎删改查的应用开发阶段,底层的IIC原理有接触,硬件还没有涉及,不妨分享出源码,研究研究,

lemonboard 发表于 2025-6-12 22:44

看看官方的堪误文档,里面有就代表真的有bug。如果没有,估计也是很难发现的bug。
不会像楼主这么简单就测试出来了

liangshuang95 发表于 2025-6-13 08:14

我认为应该不是bug,如果是的话很多人都反馈了。

爱情海玩偶 发表于 2025-6-13 09:45

不给源码怎么给你排查

desertsailor 发表于 2025-6-15 22:34

阻塞式写入, while(I2C1->STS2 & I2C_STS2_BUSY);      //等待总线空闲
        I2C1->CTRL1 |= I2C_CTRL1_STARTGEN ;   //产生起始信号
        while(!(I2C1->STS1 & I2C_STS1_STARTBF));//起始信号已发出
        I2C1->DAT = WD_ADDR;                  //要读写器件的地址
        while(!(I2C1->STS1 & I2C_STS1_ADDRF));//地址发送结束
        temp = I2C1->STS2;                      //读取一次清除标志位
        I2C1->DAT = Addr>>8;                  //地址高字节
        while(!(I2C1->STS1 & I2C_STS1_TXDATE)); //字节发送完毕
        I2C1->DAT = Addr & 0x00FF;
        while(!(I2C1->STS1 & I2C_STS1_TXDATE));      
        for(i=0; i<Num; i++)
        {
                I2C1->DAT = *(pBuffer+i);
                while(!(I2C1->STS1 & I2C_STS1_TXDATE));
        }
        I2C1->CTRL1 |= I2C_CTRL1_STOPGEN;       //发送停止位   
稳定卡死在几个while处,但只要增加一条NOP之类的无关指令就不会卡死了。
页: [1]
查看完整版本: N32L403的I2C有BUG?