Other Parts Discussed in Thread: TCA6424A, TCA6424
“线程”中讨论的其它部件: 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.
Other Parts Discussed in Thread: TCA6424A, TCA6424
您好,
我正在尝试通过 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 位组合在一起,例如在您的示例中。)