I2C学习笔记一

本文是I2C学习笔记的第一部分,介绍了I2C接口的基本概念,如两线接口SDA和SCL,以及7位和10位设备地址。讲解了内核加载I2C设备的过程,通过设备驱动与dts的交互建立设备与驱动的联系。详细阐述了I2C设备结构,并列举了数据收发的相关函数,包括i2c_transfer和smbus协议的读写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:http://blog.youkuaiyun.com/fanqipin/article/details/7940061

介绍

I2C(Inter-Intergratedcircuit)及子集smbus(system management Bus)接口是嵌入式系统中比较常见的接口。I2C设备主要有EEPROM,HWMON,RTC等。

I2C为两线接口,SDA和SCL。

I2C设备通常为7位地址,但也有10位地址。


在kernel加载时,会加载dts,遍历到dts文件中的i2c设备;

dts中至少包含设备名称和设备地址;

当设备驱动insmod时,driver中的name与dts中的name一致时,probe函数被调用,并将client传递给driver,如此设备与driver建立联系。

在probe中创建设备节点,供用户空间访问设备。

i2cdev->dev = device_create(i2c_dev_class, NULL, MKDEV(I2C_MAJOR, client->adapter->nr), 
NULL,"i2c-%d",client->adapter->nr);


目前linux仅支持master模式,不支持slave。
一般来说,我们都会按照I2C驱动框架,将操作I2C从设备的代码整合为一个从设备驱动,注册到I2C-CORE中,通过i2c core提供的adapter接口,与从设备进行通信。

i2c驱动架构中有4中角色:core、adapter、client_driver、client_device。
core负责维护i2c bus匹配已经存在的adapter/driver/client;
adapter负责master控制器,提供通信API
client_device:描述从设备的属性
client_driver:从设备驱动。

设备驱动主要围绕struct i2c_driver和 struct i2c_client结构。
i2c_driver对外提供诸如设备枚举、电源管理等回调;
i2c_client由core在probe时提供给driver,描述关联的设备,比如名称、地址等操作设备的必要信息。
驱动完成设备枚举后,拿到设备对应的i2c_client和i2c_adapter结构,就可以调用core的API访问从设备了。

i2c总线上的I2C设备结构

struct i2c_client{
    unsigned short flags;//div
    unsigned short addr;//7位地址
    char name[I2C_NAME_SIZE];
    struct i2c_adapter *adapter;//i2c主机控制器
    struct i2c_driv
### 关于蓝桥杯嵌入式比赛中的I2C学习资料和技术笔记 在准备蓝桥杯嵌入式的比赛中,掌握I2C协议及其应用是非常重要的。以下是针对I2C相关内容的学习建议以及参考资料: #### 、基础知识 I2C(Inter-Integrated Circuit)是种用于短距离通信的串行总线协议,广泛应用于嵌入式系统中设备间的通信。其特点包括支持多主控和多从机模式,通过SDA(数据线)和SCL(时钟线)实现双向传输[^1]。 #### 二、具体应用场景 在蓝桥杯嵌入式竞赛中,通常涉及以下两个典型场景: 1. **读取24C02 EEPROM存储器** 使用I2C协议与24C02芯片交互,完成数据的写入和读取操作。这需要理解地址帧结构、起始条件、停止条件等基本概念[^2]。 2. **控制MCP4017可编程电阻** MCP4017是款基于I2C接口的数字电位计,能够通过软件调整阻值。参赛者需熟悉如何配置寄存器并发送命令字节来改变输出电压。 #### 三、推荐学习资源 1. **博客文章** - @maosql 提供了系列有关蓝桥杯嵌入式比赛的技术分享,其中包含了对常见硬件模块的操作指南及调试经验总结。 - 文章链接:视频教程 2. **官方文档或开源项目** - 参考 `iic-hal.c` 和 `iic-hal.h` 文件作为驱动开发的基础框架,在实际工程项目中可根据需求对其进行适配修改[^3]。 - 将上述源码迁移到 BSP (Board Support Package) 目录下,并遵循团队内部统命名规范以便维护管理。 3. **实践案例分析** 结合理论知识动手搭建实验平台验证功能正确性至关重要。例如尝试编写段简单的程序初始化 I²C 总线并与外设建立连接;或者模拟真实赛场环境测试时间效率等问题解决能力提升效果显著。 #### 四、注意事项 - 编程过程中要特别留意端口方向设置及时序参数调节以确保信号质量稳定可靠; - 防止因拉高/拉低电流过大损坏器件引脚; - 对异常情况进行充分预判处理以免影响整体性能表现。 ```c // 示例代码片段展示基础收发流程 #include "iic_hal.h" void iic_init(void){ // 初始化GPIO及相关寄存器状态... } uint8_t iic_start(uint8_t slave_addr){ // 发送启动信号并指定目标设备地址返回应答标志位 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值