4开发实例本文引用地址:http://www.eepw.com.cn/article/279351.htm

Linux内核已经提供了I2C驱动中所需要的基本模块。i2c-core、i2c-dev和i2c-proc是总线控制器和I2C设备所需要的核心模块。对于MPC8250处理器,内核中还有MPC8260的算法模块i2c-algo-8260,它也适用于MPC8250的I2C控制接口。这些模块程序在默认条件下是不会被编译到内核里的,所以需要在配置Linux内核时把这些模块选中。在笔者的开发中需要实现的是I2C总线控制器驱动和I2C设备EEPROM驱动。

4.1 I2C总线控制器驱动的设计

MPC8250的I2C总线驱动程序由i2c-algo-8260算法模块和MPC8250具体的I2C总线控制器驱动组成。其中i2c-algo-8260算法模块已经在内核中实现,所以主要实现FC总线控制器驱动。

i2c-algo-8260算法模块主要用来描述MPC82xx处理器如何在I2C总线上传输数据。该模块中主要实现了MPC82xx处理器上I2C总线的初始化、读写、ioctl控制和中断请求等功能。另外,还有i2c_8260_add_bus和i2c_8260_del_bus两个函数,它们是使用这个算法的Adapter初始化时和退出时调用的函数,用来注册和注销一个总线控制器,需要从模块导出。这些函数功能都被封装在一个i2c-algorithm结构中,传递给使用这个算法的Adapter.算法模块中这些函数需要调用特定控制器模块中的函数来实现具体的操作。

在I2C总线控制器驱动模块中主要要实现两个结构体i2c_adapter和i2c_algo_8260_data,定义这两个结构中的函数指针成员。并且用己经初始化好的i2c_algo_826o_data结构来初始化struct i2c_adapter结构的algo_data成员变量。其中,定义i2e_algo_8260_data结构为:

struct i2c_algo_8260_data rw8250_data={

setisr:rw8250_install_isr

};

这里的成员变量rw8250_install__isr提供了MPC8250的I2C总线控制器向内核申请中端请求的功能。结构体i2c_adapter定义如下:

struct i2c_adapter rw8250_ops={"rw8250",I2C_HW_

MPC8250_RW8250,NULL,

其中,"rw8250"是该总线控制器的标识名,宏名I2C_HW_MPC8250_RW8250定义了内核中注册该适配器的ID号,而成员函数rw8250_inc_use和rw8250_dec_use用来增加和减少内核使用该模块的次数。

另外,该模块还要完成一个注册模块时的初始化函数rw8250_iic_init,在该函数中要初始化I2C控制器使用的通用端口号PortD14、PortD15,并在双端口RAM中为发送和接受数据的缓冲区分配空间。函数rw8250_iic_init在进行模块初始化时将被init_module调用。

总之。I2C控制器模块中设计的这些函数都是为i2c_algo_8650算法模块服务的。最后需要封装在i2c-adapter结构中。通过i2c_algo_8260_data算法模块中输出的接口函数传递给算法模块。

4.2 I2C设备驱动的设计

I2C设备EEPROM驱动除了要根据EEPROM的具体特性进行设计外。还要考虑I2C总线驱动程序体系结构的特性。在EEPROM设备驱动程序中需要实现一个i2c_driver结构。每个对应于具体设备的Client都从这个结构来构造。在i2c_driver结构中有两个函数attach_adapter和detach_client必须要实现。i2c_driver结构的定义如下:

struct i2c_driver eeprom_driver = {

/*name*/ "I2C_EEPROM_DRIVER",/*id*/I2C_DRIVERID_EEPROM,

/*flags*/ I2C_DF_NOTIFY,/*attach_ adapter*/

/*command*/

};

在设备驱动中。向EEPROM写数据通过调用i2c-core提供的i2c_master_send函数来完成。从EEPROM读取数据通过另一个函数i2c_master_read来完成。与一般设备驱动不同的地方就是在EEPROM驱动模块初始函数中要调用i2c-core提供的i2c_add_driver函数来注册该设备。在模块退出函数中调用i2c_del_driver函数来注销该设备。

5结束语

I2C总线具有控制简单、通信速率高等优点,作为一种2线双向同步串行数据总线,它为嵌入式系统设计提供了一种完善的集成电路间的串行总线扩展技术,大大简化了应用系统的硬件设计,为实现应用系统的模块化设计创造了极为有利的条件。同时,在很多情况下需要对系统中的某些动态信息进行掉电保护。在数据量不太大的场合下,通过I2C总线连接的EEPROM在这方面就比较能发挥作用。而Linux作为一种新的操作系统,目前在嵌入式系统中的应用非常广泛。其发展前景无法估量。由于Linux源码开放,且非常易于移植,为其编写设备驱动程序相对容易。本文介绍了Linux下I2C总线

linux下的iic驱动程序,实战经验吐血推荐:怎样在Linux环境下轻松实现基于I2C总线的EEPROM驱动程序...相关推荐

  1. 分析:windows下cmd默认的编码是ASCII编码 ,windows的中文环境下编码是GBK 方法一:在保存输出流保存的时候做一个对文字GBK编码,在输出到文件 如下 [python] view

    分析:windows下cmd默认的编码是ASCII编码 ,windows的中文环境下编码是GBK 方法一:在保存输出流保存的时候做一个对文字GBK编码,在输出到文件 如下 [python] view ...

  2. linux带source地址ping,实战经验:Linux Source NAT在Ping场景下的应用

    有时候,有这样的一种需求: 需要修改IP数据包中的源地址,比如,从某一个主机发送Ping包到另一个主机,需要修改源地址为另一个源(通常,发出Ping请求的主机有多个网卡地址). 为了解决这一需求,Li ...

  3. linux 6.5升级nss,centos6.5 - centos 6.5系统PHP环境下的CURL库的SSL Version默认为NSS,怎么变更为OpenSSL?...

    现在要求PHP的环境支持TSL1.2和SHA-256,php的CURL库升级到curl 7.35.0,openssl升级到OpenSSL/1.0.1f,但是通过配资文件查看curl的SSL Versi ...

  4. linux英伟达显卡偶尔加载失败,Ubuntu 8.10环境下出现NVIDIA显卡无法正常工作的解决方法...

    部分朋友反映升级到Ubuntu 8.10后,NVIDIA显卡工作不正常,如果无法在受限驱动里更新显卡驱动的话,可以试试下文介绍的方法,下载NVIDIA最新的驱动包自己编译安装. 2.如果你曾经在源中安 ...

  5. 基于USB总线的无线网卡驱动程序

    一.USB设备驱动程序的构成 1.设备的探测,用于检查传递给探测函数的设备信息,确认驱动程序是否适合该设备. 2.数据的发送和接收,负责主机到设备的发送和设备到主机的数据接收. 3.设备断开,当设备断 ...

  6. linux系统论文题目大全_【最新推荐】关于linux论文-范文模板 (20页)

    本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除! == 本文为 word 格式,下载后可方便编辑和修改! == 关于 linux 论文 篇一: Linux 论 ...

  7. Linux设备驱动 IIC驱动

    Linux 设备驱动篇之I2c设备驱动 fulinux 一.I2C驱动体系 虽然I2C硬件体系结构和协议都很容易理解,但是Linux I2C驱动体系结构却有相当的复杂度,它主要由3部分组成,即I2C设 ...

  8. linux环境下添加定时任务,linux下添加定时任务。

    这周要做一个定时增量更新Elasticsearch索引的功能,以前没有做过定时更新,所以请教了下同事,使用crontab添加linux下的定时任务. 一.linux下定时执行任务的方法 在linux中 ...

  9. JAVA生产环境验证_Java生产环境下性能监控与调优详解

    本课程将为你讲解如何在生产环境下对Java应用做性能监控与调优:通过本课程,你将掌握多种性能监控工具应用,学会定位并解决诸如内存溢出.cpu负载飙高等问题:学会线上代码调试,Tomcat.Nginx, ...

最新文章

  1. Dubbo系列(1)_背景介绍和基本情况
  2. nginx 安装失败 没有/etc/nginx目录
  3. [python+pip] 使用pip将函数库安装到Python环境或Anaconda环境
  4. 手机麦克风结构原理图_麦克风的分类和工作原理
  5. 2022-2028年中国数字X射线成像系统行业发展现状调查及市场分析预测报告
  6. Multisim小信号调谐放大器电路仿真
  7. xbee模块和单片机_XBee® ZigBee 模块使用方法
  8. 系统指定的路径不存在,怎么办
  9. python alpha通道_python opencv 为图片添加alpha通道并设置透明
  10. android软件多版本共存,1. android studio 多版本共存(2.2 and 3.3)
  11. node抓取王者荣耀英雄资料库
  12. c语言x20是什么意思,为什么vivo X20坚持不用TYPE-C插口?
  13. 【游戏开发创新】Unity+人工智能,让小朋友的画成真,六一儿童节一起来画猫猫吧(Unity | 人工智能 | 绘图 | 爬虫 | 猫妖)
  14. excel中如何在同一单元格中换行
  15. Vue项目中常见问题(23)动态展示Floor组件
  16. ROS: an open-source Robot Operating System
  17. 图神经网络-图与图学习笔记-1
  18. 国际贸易术语解释通则(CIP 运费和保险费付至(……指定目的地))
  19. 利用TVS及1R电阻保护后级电路
  20. 数据挖掘实战1:泰坦尼克号数据

热门文章

  1. 蓝桥杯-递归-母牛生小母牛
  2. python江红第五章课后答案_第五章课后习题参考答案
  3. AAAI2020 A pre-training based personalized dialogue generation model with persona-sparse data
  4. NMS和soft-NMS原理和代码实现
  5. 如何用化学软件绘制制高分子链
  6. 一图了解交通拥堵治理措施
  7. QtCreator代码对齐的方法
  8. swipei实现3D横向焦点图效果
  9. Go语言环境下载与运行项目-Mac【小白教程】
  10. ubuntu系统界面卡死解决方案记录