“线程”中讨论的其它部件: TCA6424
您好,
我正在尝试通过 i2c 使用 pysmbus2和 Raspberry Pi 4与两台 TCA6424A 设备通信。
因此 ,smbus2 读取和 写入 i2c 函数不例外 。
但是,读取函数似乎无法从配置为这样的输入寄存器中读取
总线= SMBus (1)
接下来,我将数据写入 设备地址 0x23输出端口-0

This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,
我正在尝试通过 i2c 使用 pysmbus2和 Raspberry Pi 4与两台 TCA6424A 设备通信。
因此 ,smbus2 读取和 写入 i2c 函数不例外 。
但是,读取函数似乎无法从配置为这样的输入寄存器中读取
总线= SMBus (1)
接下来,我将数据写入 设备地址 0x23输出端口-0
感谢您的快速响应, 我会根据 您的建议尝试 i2c_msg.writ(0x23,[0x02])。
目的是读取输入 Port-2 ,因此 i2c_msg.write(0x23,0x02) 应将0x2写入 TCA6424命令字节,以便从输入 Port-2读取。 如果我没有弄错的话。
我不确定是否三次阅读同一个注册表。 我只是用 Python 模仿原 MCU STM32 C 代码 读取功能,效果很好。 唯一的区别是 :C 代码使用8位地址 ,smbus2 python 只 能使用7位地址。 但是,使用 带有8位寻址的 i2c 嗅探器,我可以看到我的 python 读取函数 读取= i2c_msg.read (0x23,3)正在从地址0x47读取(应该是,正确吗?)
作废 TCA_READ (作废)
{
读取状态= 0;
I2C2->CR1 |= 0x00000040;//传输完全中断已启用 TCIE
I2C2->CR2 &= 0x00000000;
I2C2->CR2 |= 0x00010046;//AUTOEND=0,nbytes=1,写入请求,添加[7:1]=从地址=0x46
}
开关(读取状态)
{
案例0:
I2C2->CR2 |= 0x00002000; //Start 条件
读取状态= 1;
休息;
案例1:
读取状态= 2;
I2C2->TXDR = 0x02;
休息;
案例2:
I2C2->CR1 &= 0xFFFFFFBF;//传输完全中断已禁用 TCIE
I2C2->CR2 &= 0x00000000;
I2C2->CR2 |= 0x00010000;
I2C2->CR2 |= 0x02000446; //AUTOEND=1,nbytes=2 (3字节),读取请求,添加[7:0]=从属写入地址=0x46
I2C2->CR2 |= 0x00002000; //重新启动条件
读取状态= 3;
休息;
案例3:
TCA_Temp_buy[TCA_Temp_Sample_Count]= I2C2->RXDR;
读取状态= 0;
休息;
默认值:
read_error_set();
休息;
}
“I2C_msg.read (0x23,3)”指示其读取三个字节。 因为以前写入的命令字节是0x02 (而不是0x82),所以寄存器索引不会自动递增,因此您将获得三次相同的值。
n ü I²C 地址始终有七位。 I²C 事务的第一个字节包含地址和 R/W 位。 该字节有时被称为“地址字节”,但这不会使地址成为八位。 (某些微控制器有一个寄存器,该寄存器还将地址和 R/W 位组合在一起,例如在您的示例中。)