开发者社区> 科技小先锋> 正文

WinCE6.0+ S3C6410 IIC驱动学习

简介:
+关注继续查看
  整个的十月份一直都在研究Camera的驱动,但收获颇少,磕磕撞撞的没有获得多大的收获。虽然目前工作的主要任务不在这一块,但是还是想坚持下去,直到自己觉得Camera驱动掌握到一定程度位置。由于Camera驱动中使用了IIC,而且发现现有Camera驱动中,IIC的部分出了问题,所以先入手掌握IIC驱动。
       为了能够让整体看着流畅,而且IIC相关的知识不是特别多,所以从IIC的基本知识到驱动源码的分析都做一个介绍。
       1IIC总线介绍
       IIC(InterIntegrated Circuit,内置集成电路总线)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,这对于缓解嵌入式系统资源少的缺陷有很大好处。总线的长度可高达25英尺,总线上的数据的传输速率在标准模式下达到100kb/s,在快速模式下可以达到400kb/s,在高速模式下达到3.4Mb/sIIC总线支持多主控,其中任何能够进行发送和接收的设备都可以成为主总线。
       2IIC总线工作原理
       IIC 总线遵从同步串行传输协议,即各位串行(一位接一位)发送,由时钟(clock )线指示读数据(data )线的时刻。每个数据包前有一个地址,以指示由哪个器件来接收该数据。
       IIC采用两根I/O线:一根时钟线(SCL串行时钟线),一根数据线(SDA串行数据线),实现全双工的同步数据通信。IIC总线通过SCL/SDA两根线使挂接到总线上的器件相互进行信息传递。在信息的传输过程中,I2C总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。
       SDASCL都是双向线路,各通过一个电流源或上拉电阻连接到正的电源电压。当总线空闲时这两条线路都是高电平,连接到总线的器件输出必须是漏极开路或集电极开路才能执行线与的功能。
       IIC在数据传输过程总共产生三种信号:开始信号、结束信号和应答信号。
       开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
       结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
       应答信号:接收器在接收到8bit数据后,向发送器发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
       IIC数据传输的两种模式:主设备发送从设备接收和从设备发送主设备接收,这两种模式都需要主机发送开始信号和结束信号,应答信号由接收器产生。从设备的地址一般是12个字节,用于区分连接在同一IIC上的不同器件。
       3S3C6410IIC接口
       S3C6410IIC总线接口有四种操作模式:主控制器发送模式、主控制器接收模式、从属器发送模式和从属器接收模式。
       当一个开始信号产生后,IIC总线获得繁忙信号,停止信号将使IIC总线空闲。在一个开始信号后,主控制将发送一个从属器地址来通知从属器设备。一个字节的地址域包含7位地址和1位传输方向指示器,如果为0则表示写操作(发送操作),为1是读操作(接收操作)。
       SDA线上的每一个字节长度必须是8位,每一个字节后面跟随一个应答信号ACK位(acknowledgement)。ACK脉冲在SCL线的第9个时钟产生。发送器在收到ACK信号后,置SDA为高电平来释放SDA线,接收器在ACK发送时钟期间,置SDA为低电平,以使SDA在第9SCL时钟的高电平期间保持低位。
       在发送模式下,当发送数据时,IIC总线接口保持等待,直到写入新数据到IICDS寄存器。在数据写入IICDS之前,SCL一直保持低电平,之后将被释放。6410支持通过中断来判断数据发送是否完成,完成后才可以继续写新数据到IICDS寄存器进行发送。
       在接收模式下,当接收数据时,IIC总线接口保持等待,直到IICDS寄存器被读取。在数据从寄存器读出之前,SCL保持低电平,之后才被释放。同样6410支持通过中段来判断数据接收是否完成,完成后便可以继续从IICDS中读取新的数据。
       S3C6410处理器有4个寄存器来控制IIC总线的操作:IIC总线控制寄存器(IICCON)、IIC总线控制/状态寄存器(IICSTAT)、IIC总线发送/接收数据移位寄存器(IICDS)和IIC总线地址寄存器(IICADD)。关于各个寄存器的说明请参看手册。
       今天先写到这里,改天上驱动的源码分析。


本文转自jazka 51CTO博客,原文链接:http://blog.51cto.com/jazka/701691,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
linux驱动——dht11温湿度传感器驱动(5.4版本内核)
linux驱动——dht11温湿度传感器驱动(5.4版本内核)
40 0
Linux驱动分析之Uart驱动
之前对Uart驱动的整体架构做了介绍,现在来分析具体的驱动程序。我们以NXP 的 IMX6来进行分析。
23 0
Linux驱动分析之LCD驱动架构
在Linux设备中,LCD显示采用了帧缓冲(framebuffer)技术,所以LCD驱动也叫Framebuffer驱动,所以LCD驱动框架就是围绕帧缓冲展开工作。帧缓冲(framebuffer)是Linux系统为显示设备提供的一个接口,它将显示缓冲区抽象出来,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。对于帧缓冲设备而言,只要在显示缓冲区中与显示点对应的区域写入颜色值,对应的颜色会自动在屏幕上显示。帧缓冲为标准字符设备, 主设备号为29,对应于/dev/fbn。
45 0
Linux驱动分析之Uart驱动架构
UART设备驱动可以使用tty驱动的框架来实现,但是因为串口之间有共性,所以Linux在tty接口上封装了一层(serial core)。后面我们再拿一篇文章来解释tty驱动,tty其实就是各种终端设备,串口其实也是终端设备。
55 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十)LED模板驱动程序的改造:总线设备驱动模型
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十)LED模板驱动程序的改造:总线设备驱动模型
111 0
STM32-嵌入式学习笔记01-使用HSE和HSI配置时钟
STM32-嵌入式学习笔记01-使用HSE和HSI配置时钟
203 0
【STM32 .Net MF开发板学习-13】用PWM驱动智能小车
以前对步进电机和直流电机的控制了解不深,以为仅对步进电机而言,才能进行PWM控制,及到购买相关的驱动板和步进电机后,才发现由于驱动板的原因,控制步进电机的方向、速度只能通过IO控制
537 0
+关注
科技小先锋
文章
问答
视频
相关电子书
更多
面向领域的场景驱动设计
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载