01
I2C 总线介绍
I2C 总线是由 Philips 公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。在物联网、车联网设备中经常被用来连接电子控制单元和传感器、存储器等不需要高速传输数据的外设。具有接线少、控制方式简单、通信速率高等优点。
I2C 总线是一个典型的多主机总线,当多个主机同时传输数据时,可以通过冲突检测和仲裁级制来防止数据被破坏,总线上的每个设备都拥有唯一的地址。传输速率在标准模式下可达 100kbit/s,快速模式下可达 400kbit/s,高速模式下可达 3.4Mbit/s。
I2C 设备地址支持7位、10位两种,其中7位地址最为常见,典型的数据传输时序图如下所示。其中 SCL 是时钟线、SDA 是数据线,数据传输的单位是字节(8bit),第一个字节中前七位代表设备地址,最后一位表示数据传输的方向,“0”表示发送(写),“1”表示请求数据(读)。
02
Linux i2C 总线设备信息搜集方法
2.1 查看挂在设备
登录系统 shell,查看 /sys/bus/i2c 目录,其中 devices目录下可以查看当前设备 i2c 总线挂载的设备。
如图所示,当前设备 i2c 总线0上挂载了0x1b、0x40、0x41等设备,i2c总线1上挂载了0x1c、0x36、0x46等设备。
当然,还可以使用 i2c-tools 来进行检测,在ubuntu中可以直接使用apt安装i2c-tools。
安装完成后,使用i2cdetect探测当前设备的 i2c 总线。如下图所示,设备现在有5条i2c总线,分别是0、1、4、9、10。
接下来,可以使用”i2cdetect -r -y 总线id”命令依次扫描各个总线上挂载的设备地址。可以看到设备i2c总线0上三个地址挂载了设备,分别是0x1b、0x40、0x41,与/sys/bus/i2c/devices目录下的信息一致。
2.2 查看设备型号信息
以总线0上挂载的设备为例,可以通过查看 /sys/bus/i2c/0-00xx 目录下的name、modalias文件,获取设备的型号信息。其中0x1b挂载的设备rk808是DC/DC电源模块、syr828是矽力杰的DC/DC模块。
在车机设备中还会经常看到光线传感器设备。如下图所示设备 is176683,英特矽尔推出的一款人眼级响应的光/数字传感器。
2.3 查看设备数据
以 is176683 为例,通过上图我们得知设备挂载在 i2c 总线 3 上,地址是 0x44,可以直接使用 i2c-tools 中的 i2cdump 工具读取 is176683 的数据。
通过查看is176683的数据手册,我们可以知道,地址0x04、0x05存储了当前光线传感器的数值。传感器的数值就是上图中的0x0084。
接下来,我们尝试用手遮挡光线传感器,并读取检测值。可以发现数值明显变小。
2.4 修改设备数据
可以通过 i2ct-tools 中的 i2cset 程序修改 i2c设备可写地址的数值。以eeprom为例,假设 eeprom 挂载在 i2c 总线 2 上,地址为 0x50,可以使用 ”i2cset -f -y 3 0x50 03 0xff”将 eeprom 的地址 0x03 的值修改为 0xff。
03
总结
通过查看/sys/bus/i2c目录下的文件信息,或者按 照i2c-tools工具,我们可以很方便的搜集设备存在几条i2c总线,分别挂载了什么类型的设备,以及使用i2cdump、i2cset等命令直接访问、修改设备的数据。并在此基础上进一步分析设备关键功能的实现框架,发掘潜在的漏洞。
随着全球车联网产业生态不断丰富完善,汽车联网化渗透不断加强,通过学习和掌握 I2C 设备信息搜集技术与方法,深化车联网检测技术攻关,梆梆安全持续推动车联网产业发展,推进车联网健康有序发展。
推荐阅读
Recommended
>

推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...