IIC调试心得——基于ADuC7023(ARM7TDMI)

文章目录

  • IIC调试心得——基于ADuC7023(ARMV4架构)
    • 基本通信——从机侧
    • 基本通信——主机侧
    • 适应ADuC7023支持400kHz速率的特殊设计

IIC调试心得——基于ADuC7023(ARMV4架构)

以下调试均在外部IIC Master通信正常的情况下,进行的ADuC7023 IIC Slave&Master侧调试。
且仅列出我在调试中踩过的坑和我想到可能有的坑。

基本通信——从机侧

  1. 无波形
    • 供电正常?
    • IIC线可能被拉死,Master无法驱动(测试方法:断掉与Slave的连接观察Master波形;将Slave IIC设置为IO模式,看能否拉高拉低IO)
    • Slave侧是否有特殊的兼容设计(一开始我调试的Demo板上就有个短接开关)
  2. 有波形
    • 无ACK:
      1. Device address和IIC Master不匹配
      2. IIC模式未开启
      3. 检查IIC Tx IRQ、Rx IRQ、STOP IRQ、RSTART IRQ是否正常开启
      4. Slave侧IO驱动能力不足
    • 有ACK:
      1. ACK之后的数据有规则,非乱码 -> 通信基本成功,需要查看传入的数据
      2. ACK之后数据全高/低,或无规则 ->高电平电压不达标; ADuC7023的速率实现问题。

基本通信——主机侧

因为先调试了从机,主机侧遇到的困难参考了从机解决。需要注意的是时钟线占空比最好是50%(例程中非50%)。

速率100kHz和400kHz的可靠设置:

// Select standard mode(100kHz)
//I2C1DIV = 0xC0C0;
// Select standard mode(400kHz)
//I2C1DIV  = 0x3232;

适应ADuC7023支持400kHz速率的特殊设计

这是个巨坑!!!数据手册上也没有!!!浪费巨多时间查资料、调试,最后还是联系的技术支持解决。。并且为了适应这个沙雕要求,牺牲了代码的优雅简洁!深深的怨念。。。

ADuC7023这款芯片的IIC外设,Slave收发数据的时候会经由2个字节FIFO。在100k速率下没什么,正常在收发中断中读写FIFO就行。

但是!

在外部Master是400kHz速率下,ADuC7023作为Slave,数据需要提前在FIFO中装载才能正确发送!

也就是说,我们需要在Tx IRQ触发之前就装载外部Master需要的正确值到Slave FIFO中。我在Rx IRQ、STOP IRQ和变量初始化中进行了这个Init FIFO的操作。

你可能感兴趣的:(嵌入式,#,协议)