想通过IIC总线发送从机地址,然后根据最后一位(应答位)来判断目标从机是否挂在IIC总线上,但如何只发送地址呢?
比如从机地址0 xa4 sci产生9个脉冲,SDA产生0 xa4 +应答位的信号。
目前我是这样的:(存在一个问题就是有时候明明从机设备没接上,也会有检测到应答信号,如果从机设备接上了,则会多发一次0 x00的数据(总共有18个时钟脉冲了))。
SEND_I2C_COMMAND (0 x00);//创建虚拟访问
数= 0;
while((GetWord16(I2C_STATUS_REG) & TFE) == 0) & count < 100000) //WAIT_UNTIL_I2C_FIFO_IS_EMPTY();//等待Tx FIFO为空
{
数+ +;
}
/ / WAIT_UNTIL_NO_MASTER_ACTIVITY ();//等待没有主活动
abort_SR_Status = GetWord16 (I2C_TX_ABRT_SOURCE_REG);//读取Tx中止源寄存器
GetWord16 (I2C_CLR_TX_ABRT_REG);//清除Tx中止标志
if((abort_SR_Status & ABRT_7B_ADDR_NOACK) == 1);
返回错误;
其他的
返回true;
设备:
嗨,先生
不是很清楚你的用法,如果你是打算判断是否有有设备挂在I2c总线,你可以可以读奴隶设备的ID,如果能读到,说明,有读不到,没有,你自己知道应该有啥设备
知道奴隶设备的id,比如说0 x02是从机地址。那么我想知道这个从机是否挂在I2C总线上,请问,该怎么读?
一般I2C设备,都会有1 - 2个只读寄存器,里面的值是固定的。可以通过读取这些寄存器来判断
好的,谢谢您的回答。
另外有个关于IIC管脚的问题,
配置P02, 3为sci、SDA芯片内部有上拉电阻吗?具体阻值是多少?还是浮空输入的?
I2c总线都需要外部的拉起电阻