当前位置: 首页 > news >正文

怎样淘宝做seo网站推广/设计网络营销方案

怎样淘宝做seo网站推广,设计网络营销方案,东莞互联网推广,高碑店住房和城乡建设局网站1. I2C 协议1.1 I2C总线工作原理 I2C总线是由数据线SDA和时钟SCL构成的串行总线,各种被控制器件均并联在这条总线上,每个器件都有一个唯一的地址识别,可以作为总线上的一个发送器件或接收器件(具体由器件的功能决定)1.2 I2C总线的几种信号状…
1. I2C 协议
 
 1.1  I2C总线工作原理
      I2C总线是由数据线SDA和时钟SCL构成的串行总线,各种被控制器件均并联在这条总线上,每个器件都有一个唯一的地址识别,可以作为总线上的一个发送器件或接收器件(具体由器件的功能决定)
1.2  I2C总线的几种信号状态

      1.  空闲状态:SDASCL都为高电平。

      2.  开始条件(S)SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。

      3.  结束条件(P)SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。

      4.  数据有效:在SCL的高电平期间, SDA保持稳定,数据有效。SDA的改变只能发生在SCL的底电平期间。 

      5.  ACK信号: 数据传输的过程中,接收器件每接收一个字节数据要产生一个ACK信号,向发送器件发出特定的低电平脉冲,表示已经收到数据。

1.3  I2C总线基本操作

      I2C总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL),同时控制总线的传输方向,并产生开始和停止条件。

      数据传输中,首先主器件产生开始条件,随后是器件的控制字节(前七位是从器件的地址,最后一位为读写位 )。接下来是读写操作的数据,以及 ACK响应信号。数据传输结束时,主器件产生停止条件

 

2. Linux I2C 结构分析

2.1 层次分析

1. I2C Core

 I2C Core用于维护Linux的I2C核心部分,其中维护了两个静态的List,分别记录系统中的I2C driver结构和I2C adapter结构。

static LIST_HEAD(adapters);

static LIST_HEAD(drivers);

I2C core提供接口函数,允许一个I2C adatperI2C driverI2C client初始化时在I2C core中进行注册,以及退出时进行注销。具体可以参见i2c_core.c代码。

同时还提供了I2C总线读写访问的一般接口(具体的实现在与I2C控制器相关的I2C adapter中实现),主要应用在I2C设备驱动中。

常用的主要是

i2c_master_send()

i2c_master_recv()

i2c_transfer()

 

2. I2C bus driver

总线驱动的职责,是为系统中每个I2C总线增加相应的读写方法。但是总线驱动本身并不会进行任何的通讯,它只是存在在那里,等待设备驱动调用其函数。

在系统开机时,首先装载的是I2C总线驱动。一个总线驱动用于支持一条特定的I2C总线的读写。一个总线驱动通常需要两个模块,一个struct i2c_adapter和一个struct i2c_algorithm来描述:

在 buses目录下的i2c-pxa.c中实现了PXA的I2C总线适配器,I2C adapter 构造一个对I2C core层接口的数据结构,并通过接口函数向I2C core注册一个控制器。I2C adapter主要实现对I2C总线访问的算法,iic_xfer() 函数就是I2C adapter底层对I2C总线读写方法的实现。同时I2C adpter 中还实现了对I2C控制器中断的处理函数。

1) i2c-pxa.c定义了i2c_algorithm,并且实现了master的发送函数i2c_pxa_xfer(),以及设备查询总线的模式的函数i2c_pxa_functionality()

static const struct i2c_algorithm i2c_pxa_algorithm = {
 .master_xfer = i2c_pxa_xfer,
 .functionality = i2c_pxa_functionality,
};

2) i2c-pxa.c中,实现了i2c_adapter,主要是在定义pxa-i2c时进行初始化,并且i2c_pxa_probe()中进行填充parent指针,并且调用

ret = i2c_add_adapter(&i2c->adap);

进行添加。

static struct pxa_i2c i2c_pxa = {
 .lock = SPIN_LOCK_UNLOCKED,
 .adap = {
  .owner  = THIS_MODULE,
  .algo  = &i2c_pxa_algorithm,
  .name  = "pxa2xx-i2c.0",
  .retries = 5,
 },
};

总的来说,在i2c-pxa中,使用platform驱动模型,完成了i2c的总线两种模块struct i2c_adapterstruct i2c_algorithm

 

3. I2C device driver

I2C只有总线驱动是不够的,必须有设备才能工作。这就是I2C device driver的必要性。I2C的device是有两个模块来描述的,struct i2c_driverstruct i2c_client

在介绍chips目录下的device driver前有必要介绍一下i2c-dev.c文件。

      i2c-dev.c中提供了一个通用的I2C设备的驱动程序,实现了字符类型设备的访问接口,对设备的具体访问是通过I2C adapter来实现的。构造一个对I2C core层接口的数据结构,通过接口函数向 I2C Core注册一个I2C设备驱动。同时构造一个对用户层接口的数据结构,并通过接口函数向内核注册为一个主设备号为89的字符类型设备。

static struct i2c_driver i2cdev_driver = {
 .driver = {
  .name = "dev_driver",
 },
 .id  = I2C_DRIVERID_I2CDEV,
 .attach_adapter = i2cdev_attach_adapter,
 .detach_adapter = i2cdev_detach_adapter,
 .detach_client = i2cdev_detach_client,
};

struct i2c_dev {
 struct list_head list;
 struct i2c_adapter *adap;
 struct device *dev;
};

该文件提供了用户层对I2C设备的访问,包括open,read,write,ioctl,release等常规文件操作,我们可以通过open函数打开 I2C的设备文件,通过ioctl函数设定要访问从设备的地址,然后就可以通过 read和write函数完成对I2C设备的读写操作。

static const struct file_operations i2cdev_fops = {
 .owner  = THIS_MODULE,
 .llseek  = no_llseek,
 .read  = i2cdev_read,
 .write  = i2cdev_write,
 .ioctl  = i2cdev_ioctl,
 .open  = i2cdev_open,
 .release = i2cdev_release,
};

      注:通过I2C driver提供的通用方法可以访问任何一个I2C的设备,但是其中实现的read,write及ioctl等功能完全是基于一般设备的实现,所有的操作数据都是基于字节流,没有明确的格式和意义。为了更方便和有效地使用I2C设备,我们可以为一个具体的I2C设备开发特定的I2C设备驱动程序,在驱动中完成对特定的数据格式的解释以及实现一些专用的功能。

在chips目录下包含着各种device 的driver,完成各种从设备的注册。作为一般的I2C设备,使用i2c-dev.c里的操作足够完成操作了。

当然如果不能完成,则需要独立完成该驱动,这就是chips目录下的代码。因为i2c-dev.c已经实现了I2C设备的文件操作接口,所以只要实现struct i2c_driver就可以了。对于某些特殊的操作,可以使用command接口进行控制。 当然,对于i2接口的fm芯片,则将struct i2c_driver放在i2c的chips目录下,而将另外fm操作相关的代码放在了/media/radio目录下了。在这个目录下需要完成读写接口的完成,这个大部分使用V4L2架构。

http://www.lbrq.cn/news/1046665.html

相关文章:

  • 摄影图片网站/百度收录查询代码
  • 做赌博游戏网站违法/如何让百度快速收录新网站
  • 信誉好的邢台做网站/杭州新站整站seo
  • 网站做短信接口具体方法/大数据营销平台那么多
  • 2013我国中小企业接入互联网和网站建设情况/小程序开发公司
  • 安吉网站开发/深圳seo优化方案
  • 网站关键字排名优化/自己创建网站
  • WordPress小说网站源码/网站排名优化怎样做
  • 网站需要多少钱/互联网营销师培训学校
  • 网站的上一页怎么做/成全高清免费观看mv
  • 网站推广优化c重庆/自己怎么优化网站
  • 动态网站建设方面的书/seo关键词排名查询
  • 江苏纬信网站建设/百度网盘网页版官网
  • 网站首页权重/谷歌搜索关键词排名
  • linux做网站优势/网络信息发布平台
  • 源码论坛下载/建设优化网站
  • 武汉建设厅宿舍网站/网站怎么才能被百度收录
  • 手机端便民服务平台网站建设/在哪里找软件开发公司
  • 免费的cms有哪些平台/郑州百度seo网站优化
  • 外卖平台做网站/怎么网站排名seo
  • 楼凤网站怎么做的/东莞网站推广企业
  • 生日网页制作免费网站制作/搜索百度网页版
  • 专业微网站建设公司首选公司/seo职业规划
  • 马和人做人和牛做网站/网址大全123
  • 做网站的项目职责怎么写/长春网站制作方案定制
  • 做问卷的网站生成二维码/大数据智能营销
  • 购物车网站源码/如何做推广最有效果
  • 怎么做有趣的视频网站/网络营销公司如何建立
  • 网站建设公司价位/杭州网站seo公司
  • 呼市做开发网站的公司/成都关键词seo推广平台
  • SQL约束:数据完整性的守护者
  • 基于STM32H5的循环GPDMA链表使用
  • 力扣面试150(51/100)
  • 在 Debian 系统上安装 Redis服务
  • 解决flex元素内部文本溢出的问题min-width: 0
  • node.js 学习笔记2 进程/线程、fs