I2C Subsystem
用户层测试指令 # 检测当前系统有几组i2c总线 i2cdetect -l # 查看i2c-0接口上的设备 i2cdetect -y -a 0 # Force scanning of non-regular addresses i2cdetect -y -r 0 # 读取指定设备的全部寄存器的值 i2cdump -f -y 0 0x68 # 读取指定i2c设备的某个寄存器的值,如下读取i2c-0地址为0x68器件中的0x01寄存器 i2cget -f -y 0 0x68 0x01 # 写入指定i2c设备的某个寄存器的值,如下写入i2c-0地址为0x68器件中的0x01寄存器值为0x6f i2cset -f -y 0 0x68 0x01 0x6f # 写入i2c-0地址为0x50的eeprom,从偏移为0x64地址读8个byte。 i2ctransfer -f -y 0 w1@0x50 0x64 r8 I2C 基础知识 写操作 主芯片要发出一个start信号 然后发出一个设备地址(用来确定是往哪一个芯片写数据),方向(读/写,0表示写,1表示读) 从设备回应(用来确定这个设备是否存在),然后就可以传输数据 主设备发送一个字节数据给从设备,并等待回应 每传输一字节数据,接收方要有一个回应信号(确定数据是否接受完成),然后再传输下一个数据。 数据发送完之后,主芯片就会发送一个停止信号。 下图:白色背景表示"主→从",灰色背景表示"从→主" 读操作 I2C信号 I2C协议中数据传输的单位是字节,也就是8位。但是要用到9个时钟:前面8个时钟用来传输8数据,第9个时钟用来传输回应信号。传输时,先传输最高位(MSB)。 开始信号(S):SCL为高电平时,SDA山高电平向低电平跳变,开始传送数据。 结束信号(P):SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。 响应信号(ACK):接收器在接收到8位数据后,在第9个时钟周期,拉低SDA SDA上传输的数据必须在SCL为高电平期间保持稳定,SDA上的数据只能在SCL为低电平期间变化 I2C协议信号如下:...