软件I2C通信的设计要点

IIC设计要点:

  • 多多借助逻辑分析仪,可以快速定位和解决问题。
  • 软件iic进行软件延时的时候, 其中使用的变量需要通过volatile进行修饰。
    volatile int delay = 100;
    while(delay --);
    
  • 注意当从机是芯片模拟的IIC时序,从机可能由于处理反应较慢的原因, 容易出现将总线stretch的现象, 就是从机会一直将总线的时钟线一直拉低。例如: 如果从机是内部自带MCU, 主机以400khz的频率进行读写的话,会造成从机无法响应, 并拉低时钟线。
  • 数据线在时钟线为低电平的时候进行改变,在时钟线为高电平,要一直进行保持, 因为数据线是边沿触发。
  • 在读完所有的数据之后,也就是读取完从机的最后一个字节之后,主机要进行发送NACK信号,以此来告诉从机读取结束, 然后发送停止信号。
  • 一般流程就是先写入设备地址,设备地址最后一个位表示接下来的动作是读还是写,然后发送要操作的寄存器地址,再进行读操作或者写操作。
  • 如果设备要从读动作变成写动作的话,主机不必发送stop信号,可以直接重新发送start信号以及设备地址。
  • 在没有发送stop信号前, 一开始发送的设备地址, 将会一直有效。
  • 有的芯片支持连续读,这样可以保证数据被一次性读取, 并且加快读写速度。
  • 注意: 读动作和写动作的时序, 最大的区别在于:
    1. 因为进行iic通信的时候, 想要进行数据交换的数据寄存器的地址是需要主机写入到设备的, 所以, 在读之前, 需要先执行设备地址(写)的操作, 然后再发送数据寄存器的地址给从机。 然后,执行设备地址(读)的操作, 再进行读的操作。
      数据寄存器的地址一旦写入, 如果没有去改变,就会一直有效。
       写动作: 开始信号 ---- 设备地址+写(0) ---- 寄存器地址 ----- 写数据
       读动作: 开始信号 ---- 设备地址+写 (0)---- 寄存器地址 ----- 开始信号 ---- 设备地址+读(1) ---- 读数据
    
    1. 写数据的时候, 每写入一个字节都要读对方ACK信号, 从机不知道何时结束, 没有NACK的动作; 读数据的时候, 每读取一个字节, 需要ACK从机以此, 读到最后一个字节的时候, 务必要NACK从机。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值