我正在 STM32 F107 上开发一个嵌入式系统,通过 i2c 与 2 个从设备进行通信:一个 rfid 读取器 rfid 手册 和一个 eeprom 模块 eeprom 手册。 这两个设备具有相同的从地址A0(用于写操作)和A1(用于读操作)。 如果只使用一台设备,则效果很好。但如果我同时使用它们,我就会遇到问题。 首先,我从 rfid 读卡器读取卡 ID,然后将其写入 eeprom(到目前为止一切正常),当我尝试再次从 rfid 读卡器读取时,我得到的输入数据是错误的,并且始终相同,即使我换卡了 发生了什么事以及我可以采取什么措施来解决问题?
设备必须具有不同的地址。您应该重新配置任一设备以使用不同的地址以避免冲突。这通常通过跳线(rfid 读取器上的 JP1、JP2)或通过硬连线芯片上的某些地址引脚(eeprom 芯片上的 A0 和 A1 引脚)来完成。
如果没有额外的引脚可用于移动 I2C 设备,请尝试使用 i2c 缓冲区或 i2c MUX。
更改地址的方法有以下几种:
更改从属地址之一:如果可以将其中一个从属设备配置为具有独特的 I2C 从属地址,那么这是最简单且值得鼓励的解决方案。许多 I2C 设备可帮助您通过硬件引脚或软件配置来更改其处理方式。
使用 I2C 多路复用器 (I2C MUX):I2C 多路复用器是一种工具,可让您将具有相同地址的多个从设备连接到同一 I2C 总线。它基本上充当传输的角色,允许您选择使用哪个工具进行通话。您可以通过STM32管理I2C MUX并选择精确的从设备进行对话。
实现软件寻址:如果您无法更改从设备的地址并且不需要应用I2C MUX,则可以实现软件程序寻址。这需要暂时转换其中一个设备的从属地址,同时与它通信,然后完成后恢复真实地址。
以下是在 STM32 中实现软件寻址的时尚定义:
a.在将数据发送到具有冲突地址的从属工具之前,发送一条命令以将其地址短暂地转换为完全不同的价格。
B.使用简短的处理与工具进行通信。
C.公报完成后,发送所有其他命令以将工具的交易恢复为原始价格。