重庆生活网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 生活 重庆
查看: 1086|回复: 0
打印 上一主题 下一主题

【從0教学嵌入式Linux】第二十四集(上)

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-13 16:25:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    I2C总线是有Philips公司开发的,它是一种比较简单的总线,接线简单一种是直接操作cpu的I2C控制器,正对于某一个设备写一个字符驱动,这种一种是基于Linux内核I2C子系统完成设备驱动的编写,一般内核会继承相I2C总线上可以连接多个相同或者不同的设备,总线怎样才能知道数据应该发送再通过芯片手册我们可以知道EEPROM的地址的前四位为1010,通过原理不同的I2C设备有不同的时序,也可以说是不同的协议,我们需要了解一些时序现在的CPU多数都有I2C控制器,我们不需要太关心具体时序的实现,这些都I2C子系统下设备驱动有两种模式,一种是用户模式设备驱动,这种驱动依赖I




第24课:I2C驅動程序及應用程序開发(一)

   
(一)I2C总线介绍
I2C总线是有Philips公司开发的,它是一种比较简單的总線,接线简單,只有两根线,数据线(SCL)和时钟线(SDA),控制简单,所以一些封装较小的器件多使用I2C总线,常见的使用I2C總线的設备有EEPROM、rtc及一些传感器,这里我们介绍下基于Linux的I2C设备驅动的编寫。
I2C设备驱动的編寫有多种方式:
一种是直接操作cpu的I2C控制器,正对于某一个设備寫一个字符驱动,這种驱动相对来说比较直接,不需要太依赖于内核相关配置,但这類設备驱動依赖CPU,可移植性较差。
一种是基于Linux内核I2C子系统完成設備驱动的编写,一般内核会继承相关CPU的控制器驅动,即使没有也可以通过技術支持获得,所以我们只需要使用Linux下I2C子系统提供的相关接口來构建我们的设备驱动就行了,这样我们的设備驱动并不依赖于某一个特定的CPU,可移植性较好。
在写驱動之前我们先了解下I2C总线中几个比较重要的概念:
1、地址
I2C总線上可以连接多个相同或者不同的設备,总线怎樣才能知道数据應該发送到哪个设备呢,这里需要一个地址來唯一的標识一個設备,I2C设备地址有7位地址和10位地址,那么这個地址是怎么来的呢,其实這个地址我们可以通過相關的芯片手册获得,这里通过一个EEPROM和一个溫度传感器来说明。
EEPROM(AT24C02/04/08/16)芯片手冊上有如下说明:

   


再結合原理图

   


再通過芯片手册我們可以知道EEPROM的地址的前四位为1010,通过原理图A0/A1/及NC的狀態,我们可以知道后三位为000,这样我们就知道这個EEPROM在I2C总线上的地址為7’b1010000。
同样我们可以通过如下内容知道温度传感器的地址为7’b1001000

   


2、时序
不同的I2C设备有不同的時序,也可以说是不同的协議,我们需要了解一些时序相关的东西,我们发送数据是什么時候开始什么时候结束,怎么发送都由這個时序决定

   


(二)I2C总线应用程序
现在的CPU多数都有I2C控制器,我们不需要太關心具体时序的实現,这些都由控制器去完成,并且内核已經集成多數CPU的I2C控制器驱动,我们写设备驱动就是按照I2C子系统的要求,为他提供需求的數據即可。
I2C子系统下设备驅动有两种模式,一種是用户模式设备驱动,这种驱动依賴I2C子系统中的i2c-dev这个驱动,我们需要在应用程序去封装数据,這需要應用程序的开发人員具备相当的硬件基础,另外一种是普通的设备驅动,我们来看一下这两种方法的具体實现过程。
用户模式驱动实现:
相关结构体:

   


上面就是我们向底層传递的结构,我们需要把我们的时序封装成这样的结构,然后传递下去就行了

   


转化为消息结构为:

   


这里我们封装了两個消息,在这个时序中操作模式改变了,所以我们必须封装为两个時序,如果操作模式不变封装一个消息就可以了,比如如下时序:

   


我們把刚才封装的消息通過ioctl发下去就能够完成数據的读写了,例程如下:

   



   



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|联系我们|重庆生活网

GMT+8, 2024-4-29 21:35 , Processed in 0.203125 second(s), 17 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表