打印
[N32L4xx]

N32L403的I2C有BUG?

[复制链接]
448|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
desertsailor|  楼主 | 2025-6-11 20:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用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原理有接触,硬件还没有涉及,不妨分享出源码,研究研究,

使用特权

评论回复
5
lemonboard| | 2025-6-12 22:44 | 只看该作者
看看官方的堪误文档,里面有就代表真的有bug。如果没有,估计也是很难发现的bug。
不会像楼主这么简单就测试出来了

使用特权

评论回复
6
liangshuang95| | 2025-6-13 08:14 | 只看该作者
我认为应该不是bug,如果是的话很多人都反馈了。

使用特权

评论回复
7
爱情海玩偶| | 2025-6-13 09:45 | 只看该作者
不给源码怎么给你排查

使用特权

评论回复
8
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之类的无关指令就不会卡死了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

522

帖子

2

粉丝