新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > I2C总线及EEPROM的Linux驱动程序的设计

I2C总线及EEPROM的Linux驱动程序的设计

作者:时间:2013-10-21来源:网络收藏

  在控制器驱动模块中主要要实现两个结构体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_adapter定义如下:

  struct i2c_adapter rw8250_ops={“rw8250”,I2C_HW_

  MPC8250_RW8250,NULL,rw8250_data,rw8250_inc_use,rw8250_dec_use,rw8250_reg,rw8250_unreg,};

  其中,“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设备 驱动除了要根据的具体特性进行设计外。还要考虑驱动程序体系结构的特性。在设备驱动程序中需要实现一个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*/eeprom_attach_adapter,/*detach_client */eeprom_detach_client,

  /*command*/eeprom_command,/*inc_use*/ eeprom_inc_use,/*dec_use*/ eeprom_dec_use

  };

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

  5 结束语

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

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 3 下一页

关键词: I2C总线 EEPROM Linux

评论


相关推荐

技术专区

关闭