
协议
abt_l
驱动,嵌入式开发。
展开
-
协议[I2C]_I2C子系统之write()
应用层调用write()函数后首先进入的是i2c类设备的write函数,即i2cdev_fops中的write方法。此处的i2cdev_fops对应的是系统中所有i2c类设备的操作。也就是说系统中所有i2c adapter 的read()write() open() close() ioctl()等操作,首先调用的是i2c类i2cdev_fops中的方法,通过i2c类中的方法再去寻转载 2015-10-22 16:12:19 · 1981 阅读 · 0 评论 -
协议[I2C]_I2C子系统之 adapter driver注册——I2C_dev_init()
i2c的操作在内核中是当做字符设备来操作的,相关初始化在由i2c_dev_init函数来初始化。并且i2c adapter的驱动通过i2cdev_driver这个通用驱动的attach方法来实现注册的。下面具体分析整个过程。static int __init i2c_dev_init(void) { 。。。 。。。 res = register转载 2015-10-22 16:11:00 · 504 阅读 · 0 评论 -
协议[I2C]_I2C子系统之__I2C_first_dynamic_bus_num变量的相关分析
__i2c_first_dynamic_bus_num定义的位置在/driver/i2c/i2c-boardinfo.c#include #include 。。。 。。。 int __i2c_first_dynamic_bus_num; EXPORT_SYMBOL_GPL(__i2c_first_dynamic_bus_num); 。。。 。。。 i转载 2015-10-22 16:09:31 · 389 阅读 · 0 评论 -
协议[I2C]_I2C子系统之adapter device和client device注册——I2C_add_number_adapter()
如前文所述(http://www.linuxidc.com/Linux/2012-08/68263.htm),在probe函数会调用函数i2c_add_number_adapter(),通过此函数来实现adapter device和client device的注册i2c_add_number_adapter()函数如下:int i2c_add_numbered_adapte转载 2015-10-22 16:08:12 · 423 阅读 · 0 评论 -
协议[I2C]_I2C子系统之I2C总线时钟频率设置
时钟相关基本知识可先参考这篇http://www.linuxidc.com/Linux/2012-02/54968.htm下面直接从总线时钟初始化函数开始分析:void __init s3c244x_init_clocks(int xtal) { /* initialise the clocks here, to allow other things like the转载 2015-10-22 16:03:23 · 3588 阅读 · 0 评论 -
协议[I2C]_I2C子系统之platform_driver初始化——I2C_adap_s3c_init()
在完成platform_device的添加之后,i2c子系统将进行platform_driver的注册过程。platform_driver的注册通过调用初始化函数i2c_adapter_s3c_init函数来完成。i2c_adap_s3c_init()函数体如下:static int __init i2c_adap_s3c_init(void) { return转载 2015-10-22 16:02:21 · 436 阅读 · 0 评论 -
协议[I2C]_I2C子系统之platfor_device初始化——smdk2440_machine_init()
调用完函数i2c_init后(见 I2C子系统之I2C bus初始化——I2C_init() http://www.linuxidc.com/Linux/2012-08/68261.htm) 系统将成功创建i2c总线。初始化完毕总线后还需要接着初始化i2c设备和i2c驱动(一般是先初始化device),对于2440来说,linux内核中的device初始化一般是通过platform devic转载 2015-10-22 16:00:48 · 435 阅读 · 0 评论 -
协议[I2C]_I2C子系统之I2C bus初始化——I2C_init()
根据前文的分析(http://www.linuxidc.com/Linux/2012-08/68260.htm),在linux内核启动的时候最先执行的和I2C子系统相关的函数应该是driver/i2c/i2c-core.c文件中的i2c_init()函数。下面具体此函数具体做了那些预备工作。1.i2c总线的注册i2c_init()的函数实现如下:static int _转载 2015-10-22 15:59:31 · 716 阅读 · 0 评论 -
协议[I2C]_I2C子系统之内核中I2C子系统的结构
本文开始,分析内核的i2c子系统。说明:1.分析的内核版本为2.6.37.1 2.开发板为TQ2440,板载ARM9(S3C2440) 3.I2C设备为AT24C02 4.分析顺序就是内核I2C子系统的注册顺序(即本系列文章发表的先后顺序)。在正式进入代码分析前应摸清各初始化函数的执行先后顺序,清楚这个顺序后对转载 2015-10-22 15:58:17 · 422 阅读 · 0 评论 -
协议[I2C]_I2C子系统之总结
I2C子系统的结构是符合内核总的驱动模型。I2C 子系统主要包含4大部件1.i2c bus2.adapter device3.client device4.adapter driver其中i2c bus是用于管理的,并非是通信总线。i2c bus上挂着adapter(主机) device、client(从机) device、adapter driver。为了统一操作,adapter转载 2015-10-22 15:57:07 · 357 阅读 · 0 评论 -
协议[I2C]_I2C子系统之ioctl()
根据前一篇的文章介绍 at24c02的读写方式有很多种,写有两种1.写一字节数据到word address处2.从指定的word address处开始写一页数据,此word address需要页对齐!读有三种1.从at24c02当前的word address读一字节数据2.从指定的word address 读数据3.从当前的word address地址开始读一串数据根据驱动中wri转载 2015-10-22 15:55:48 · 608 阅读 · 0 评论 -
协议[I2C]_I2C子系统之at24c02读写测试
结合ioctl和at24c02的介绍,写了个at24c02的测试程序测试硬件平台:TQ2440、at24c02内核版本:linux-2.6.37.1读写单独分开成两个小程序。相关阅读:I2C子系统之at24c02读写测试 http://www.linuxidc.com/Linux/2012-08/68256.htmI2C子系统之ioctl() http://www.lin转载 2015-10-22 15:54:46 · 513 阅读 · 0 评论 -
协议[I2C]_I2C子系统之at24c02简介
AT24C02存储规格总共32个page,每个page为8byte。总共256KB(2Kb),地址的长度需要使用8bit(刚好可以用来表示256个字节的地址)来表示。AT24CC02的地址设备的地址由8bit组成,前4 bit是固定的(1010);接着的3 bit转载 2015-10-22 15:52:57 · 460 阅读 · 0 评论