前面几片文章介绍了IIC裸机及Linux下驱动开发内容:
《Linux IIC总线驱动开发(一) — IIC 基础概念及驱动架构分析(转)》
《Linux IIC总线驱动开发(二)—— IIC 驱动开发(转)》
现在归纳总结一下IIC相关知识点:
一 、问题
1、IIC总线上的设备是怎么描述的?
struct i2c_client { struct device dev; ... };
2、IIC总线上的驱动是怎么描述的?
struct i2c_driver { struct device_driver driver; };
3、IIC总线上的设备和驱动是怎么匹配的
1)、对于 Cortex - A8 通过driver提供id_table和client->name匹配
2)、对于 Cortex - A9 参考下图
4、如何告诉系统我们从设备的信息
1)、对于 Cortex - A8
arch/arm/mach-s5c100/mac-smdkc100.c struct i2c_borad_info i2c_des0[] = { 填写从设备的信息 }
2)、对于 Cortex - A9
通过设备树,内核转换
5、系统是如何找到我们的从设备信息,找到从设备信息后做了什么事情
1)、对于 Cortex - A8
系统启动的时候,会把从设备信息,注册到_i2c_borad_list。
总线驱动的匹配的时候,会调用
i2c_add_numbered_adapter() | i2c_register_adapter(adap) | i2c_scan_static_board_info() | i2c_new_device() { 1.产生了i2c_client (填充了从设备信息) 2.注册了client->device }
6、在IIC总线上驱动如何获取从设备的信息
//i2c_driver的probe函数在调用的时候,会将i2c_client结构体传递过去,i2c_client包含了从设备的信息 int xxx_probe(struct i2c_client *client, const struct i2c_device_id *id) { }
7、数据如何接收
利用中断
8、数据如何发送
adap->algo->master_xfer static const struct i2c_algorithm s3c24xx_i2c_algorithm = { .master_xfer = s3c24xx_i2c_xfer, .functionality = s3c24xx_i2c_func, };
转自:http://blog.csdn.net/zqixiao_09/article/details/50926494