硬件实现I2C协议 (主机传输)

  1. 设备默认是 Slave, 某个设备产生一个 Start, 就成了 Master.
  • 检查总线是否空闲: SR2->BUSY == 0 继续;
  • 生成 Start 信号;
  • 检查是否 Start 成功: SR1->SB == 1 继续.
  1. Master 广播地址 (8 bit): 7 bit 地址 + 1 bit 模式 (LSB, \(R / \bar{W}\)).
  • 广播地址,无需检查 SR1->TxE (此时仍为 0);
  • 检查是否有从机回应 (地址匹配): SR1->ADDR == 1 继续 (地址匹配的从机). 此时, SR1->TxE1, SR1->BTF0 (第一次传输数据为地址, 不会改变 BTF);
  • 先后访问 SR1SR2, 清零 SR1->ADDR; 否则, 之后传输了非地址数据, 也不会将 SR1->BTF 置一.
  1. 传输数据
  • 检查数据寄存器是否为空: SR1->TxE == 1 继续;
  • 写入数据;
  • 如果需要连续传输数据, 重复上两步;
  • 确保最后一个字节也发送成功 (可在结束通讯前判断): SR1->BTF == 1 继续.
  1. 产生 Stop 信号, 结束通讯
  • 检查传输是否完成 (最后一个字节也传输完成): SR1->BTF == 1 继续;
  • 如果仅传输了地址, 未传输过非地址数据, SR1->BTF 仍为 0, 无需检查;
  • 生成 Stop 信号.

END

posted @ 2025-07-30 16:40  ltign  阅读(16)  评论(0)    收藏  举报