6个职位/ 0个新职位
最后发表
Stone_wang
离线
最后看到:1个月1个星期前
加入:2015-10-23 03:55
IIC检测从机是否存在

想通过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;

设备:
Jelphi
离线
最后看到:7个月4天前
工作人员
加入:2015-09-10 12:07
嗨,先生

嗨,先生

不是很清楚你的用法,如果你是打算判断是否有有设备挂在I2c总线,你可以可以读奴隶设备的ID,如果能读到,说明,有读不到,没有,你自己知道应该有啥设备

Stone_wang
离线
最后看到:1个月1个星期前
加入:2015-10-23 03:55
知道奴隶设备的id

知道奴隶设备的id,比如说0 x02是从机地址。那么我想知道这个从机是否挂在I2C总线上,请问,该怎么读?

Gongyu_Dialog
离线
最后看到:4天10小时前
加入:2016-04-27 07:07
一般I2C设备,都会有1 - 2个只读寄存器,里面的值是固定的

一般I2C设备,都会有1 - 2个只读寄存器,里面的值是固定的。可以通过读取这些寄存器来判断

Stone_wang
离线
最后看到:1个月1个星期前
加入:2015-10-23 03:55
好的,谢谢您的回答。

好的,谢谢您的回答。
另外有个关于IIC管脚的问题,
配置P02, 3为sci、SDA芯片内部有上拉电阻吗?具体阻值是多少?还是浮空输入的?

Jelphi
离线
最后看到:7个月4天前
工作人员
加入:2015-09-10 12:07
I2c总线都需要外部的拉起电阻

I2c总线都需要外部的拉起电阻