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,如需转载请自行联系原作者
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
嵌入式开发板串口驱动框架
嵌入式开发板串口驱动框架
15 0
|
8月前
|
缓存 Linux 定位技术
嵌入式Linux系列第7篇:操作UART
嵌入式Linux系列第7篇:操作UART
|
缓存 Linux 芯片
Linux驱动分析之Uart驱动
之前对Uart驱动的整体架构做了介绍,现在来分析具体的驱动程序。我们以NXP 的 IMX6来进行分析。
|
缓存 Linux API
Linux驱动分析之Uart驱动架构
UART设备驱动可以使用tty驱动的框架来实现,但是因为串口之间有共性,所以Linux在tty接口上封装了一层(serial core)。后面我们再拿一篇文章来解释tty驱动,tty其实就是各种终端设备,串口其实也是终端设备。
Linux驱动分析之Uart驱动架构
|
API 芯片
HarmonyOS系统中内核实现UART串口通信方法
大家好,今天主要聊一聊,如何使用鸿蒙系统实现UART数据的读写方法。
366 0
HarmonyOS系统中内核实现UART串口通信方法
|
传感器 芯片