dm365的i2c总结最终版(菜鸟入门,欢迎拍砖)

I2C总线只有两根线,分别是串行数据线SDA和时钟线SCL,方便了工程人员的布线。I2C是多主机制。I2C协议不再多说。

 

参考文档:http://blog.sina.com.cn/s/blog_a56ef549010187m2.html

 

Linuxi2c分为i2c核心、i2c总线驱动和i2c设备驱动。

I2C核心:I2C核心提供了I2C总线驱动和设备驱动的注册、注销方法,I2C通信方法(algorithm),上层的,与具体适配器(adapter)无关的代码以及探测设备、检测设备地址的上层代码。对应的主要文件为i2c-core.c。这一部分是linux本身提供的,我们都不需要修改。但是知道函数是什么功能,还是很有帮助的。因为在驱动中发送数据时往往会调用到i2c-core.c中的函数。比较常用的函数主要有:i2c_add_adapteri2c_register_driveri2c_smbus_read_bytei2c_smbus_write_bytei2c_smbus_xfer等等等等。

 

I2C总线驱动:I2C总线驱动是I2C适配器的软件实现。I2C适配器可由CPU控制,也可以集成在CPU内部。davinciI2C总线驱动主要是i2c-davinci.c文件,dm365也是使用的这个文件。

 

I2C设备驱动:I2C设备驱动是对I2C设备的软件实现。由于一般I2C总线驱动一般都有提供,我们主要编写的也就是这一部分设备驱动。

 

I2C总线驱动的工作流程:

devices.c中添加总线设备,即定义platform_device,并调用platform_device_register函数对总线设备进行注册。

个人理解:这里应该就是定义并注册了一个i2c adapter

 

i2c-davinc.c文件中添加总线驱动。

 

这里开始就需要提到几个文件:

1devices.c:位于arch/arm/mach-davinci中。devices.c中主要是定义了一些davinci的相关设备,在文件的注释中有:DaVinci platform device setup/initialization

即对platform device的设置/初始化。

 

devices.c中开始部分宏定义中定义了相关外设的起始地址等相关信息,若I2CMMCSD0MMCSD1等。

 

函数davinci_map_sysmod中调用了函数:ioremap_nocache( )ioremap_nocache作用是把内存映射到CPU空间,返回值为线性地址,此时CPU就可以访问设备的内存了,可以像访问内存一样使用访问内存的指令访问设备的内存(寄存器)。

参考:http://blog.csdn.net/shans

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值