N32L403的I2C有BUG?
使用N32L403的I2C,通过查询方式读写AT24C256,单次读或写多个字节,存在卡死的情况,而且这种现象的出现似乎与代码对齐有关系,当出现卡死的情况时,在相关代码前增加一条无关指令后又能稳定工作了,删去这条无关指令稳定出现卡死的现象。大家有遇到这种情况吗?原厂的技术人员能否解答一下?IIC本身也简单,不会存在bug吧。 咱一般都用模拟IIC,感觉比MCU硬件IIC用起来方便,特别是做MCU和外置flash/eeprom芯片的通信的时候。 还停留在例程的怎删改查的应用开发阶段,底层的IIC原理有接触,硬件还没有涉及,不妨分享出源码,研究研究, 看看官方的堪误文档,里面有就代表真的有bug。如果没有,估计也是很难发现的bug。
不会像楼主这么简单就测试出来了 我认为应该不是bug,如果是的话很多人都反馈了。 不给源码怎么给你排查 阻塞式写入, 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]