想通过IIC总线发送从机地址,然后根据最后一位(应答位)来判断目标从机是否挂在IIC总线上,但如何只发送地址呢?
比如从机地址0 xa4 sci产生9个脉冲,SDA产生0xa4 + 应答位 的信号。
目前我是这样的:(存在一个问题就是有时候明明从机设备没接上,也会有检测到应答信号,如果从机设备接上了,则会多发一次0x00的数据(总共有18个时钟脉冲了)。)
SEND_I2C_COMMAND(0x00); // Make a dummy access
count = 0;
while( ((GetWord16(I2C_STATUS_REG) & TFE) == 0) && count < 100000 ) //WAIT_UNTIL_I2C_FIFO_IS_EMPTY(); // Wait until Tx FIFO is empty
{
count ++;
}
// WAIT_UNTIL_NO_MASTER_ACTIVITY(); // Wait until no master activity
abort_SR_Status = GetWord16(I2C_TX_ABRT_SOURCE_REG); // Read the Tx abort source register
GetWord16(I2C_CLR_TX_ABRT_REG); // Clear the Tx abort flag
if((abort_SR_Status & ABRT_7B_ADDR_NOACK) == 1)
return false;
else
return true;
Device:
Hi sir
不是很清楚你的用法,如果你是打算判断是否有有设备挂在I2c总线, 你可以可以读slave Device 的ID,如果能读到,说明有,读不到,没有,你自己知道应该有啥devices
知道slave device 的id ,比如说0x02是从机地址。 那么我想知道这个从机是否挂在I2C总线上,请问,该怎么读?
一般I2C设备,都会有1-2个只读寄存器,里面的值是固定的。可以通过读取这些寄存器来判断
好的,谢谢您的回答。
另外有个关于IIC管脚的问题,
配置P02,P03为 SCL,SDA,芯片内部有上拉电阻吗?具体阻值是多少?还是浮空输入的?
I2c总线都需要外部的拉起电阻