这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【换取手持数字示波器】IIC读取总线设备地址

共1条 1/1 1 跳转至

【换取手持数字示波器】IIC读取总线设备地址

助工
2025-01-03 19:22:50     打赏

1、引言

IIC通信是总线型通信,理论上一套总线上可以挂载127个从机设备,在IIC设备通信过程中,首要步骤是主机对从机进行设备地址进行确认,如果设备地址正确且IIC从设备工作正常,那么从设备会返回1个ACK确认信号,表示可与主机建立通信。如果主机没有接收到从设备的ACK应答信号,说明双方的IIC通信是不能正常建立起来。因此在进行IIC从设备数据读取时,可以提前读取总线上所有设备的IIC地址,能够获取到正常通信的IIC设备类型。

2、操作思路

IIC协议规定了IIC设备的地址为7位,在一条总线上理论上会有128个设备地址,因此主机只需从设备地址0到设备地址127顺序发起IIC通信信号后等待从设备的IIC应答ACK信号,若存在ACK应答则输出该设备地址。以下使用STM32L4主控作为IIC主设备,向总线上的从设备发起写入指令

示例代码

void IIC_Wait_Ack(uint8_t addr)
{
    IIC_SDA_Mode(GPIO_MODE_INPUT);
    SCL(L);
    delay_us(1);
    SCL(H);
    delay_us(1);
    if(HAL_GPIO_ReadPin(I2C_SDA_GPIO_Port,I2C_SDA_Pin))
    {
    IIC_Stop();
    }
    else
    {
    printf("IIC_Dev Addr:0x%X\n",addr);
    SCL(L);
    }
}
for(uint8_t i=0;i<128;i++){
    IIC_Start();	
    IIC_Send_Data(i<<1);
    IIC_Wait_Ack(i);//printf iic dev addr
    delay_us(20);
    IIC_Stop();
    delay_ms(20);
}

3、实验结果

IIC总线挂载有温度传感器、EEPROM各一个,iic地址分别为0x40,0x50

3P}DWL9JD3H6EJB2{Z%4YX9.png

逻辑分析仪波形

image.png





关键词: IIC总线地址    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]