1 引 言
i2c(inter-integrated circuit)总线是由philips公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。
本文介绍at91sam7x256的i2c控制器twi接口(two-wired interface)的使用方法,并以i2c设备e2prom和日历时钟芯片为例,实现at91sam7x256对时间数据的读取与存储。同时,为了验证时间数据的读取与存储是否正确,使用at91sam7x256的在线仿真器j-link将e2prom中的数据读至内存进行检查。
2 硬件设计
2.1 硬件模块结构
电路的硬件模块结构如图1所示。
at91sam7x256的twi接口由一根时钟线twck和一根数据线twd组成,产生的信号时序符合i2c总线规范;pcf8563是philips公司推出的一款内含i2c总线接口功能的工业级时钟芯片;at24c08是atmel公司推出的符合i2c规约的两线串口e2prom.at91sam7x256的twck和twd分别与芯片pcf8563和at24c08的scl与sda相连,cpu通过twi接口将时间数据读出并存储。为了保证cpu不冲突的访问pcf8563和at24c08,本文将at24c08的a2管脚接高电平。由于i2c总线空闲时为高电平,所以为实现线与功能,总线上连接的设备均是集电极开路的,因此总线需外接上拉电阻r.at91sam7x256的twi有主从2种工作模式,本文中at91sam7x256作为控制方,应工作于主模式。
2.2 at91sam7x256的twi接口
at91sam7x256的twd和twck管脚与设备的i/o管脚复用,同时at91sam7x256采用单独控制功能单元的省电方案,电源管理单元pmc控制各功能单元的时钟是否工作,所以要使用twi接口,需要首先配置twd和twck为外设连线和开路状态,其次配置pmc使twi时钟处于工作状态。
twi接口可提供高达400 kb/s的传输速率,为使得数据的传输速率面向不同应用,可以通过配置时钟脉冲发生器的控制寄存器twi_cweg调整twck的信号频率。
twi接口产生的信号时序符合i2c总线规范,当读/写1个字节数据时,主设备需提供从设备的设备地址、内部地址、读写控制以及起始标志和停止标志。在数据的收发过程中,主要使用控制寄存器twi_cr、主模式寄存器twi_mmr、内部地址寄存器twi_iadr、状态寄存器twi_sr、传输保持寄存器twi_thr和接收保持寄存器twi_rhr.从设备地址在twi_mmr中设置,从设备的内部地址在twi_iadr中设置;在twi_cr中设置是否发送起始信号和停止信号;nak(无应答)、over(运行错误)、txrdy(发送准备好)、rxrdy(接收准备好)、tx-comp(传输完成)等状态位通过查询wi_sr得到。
写数据的过程包括:当twi_thr写入数据后,cpu产生起始信号启动传输,twi_thr中的数据经过并串转换后由twd传输出去,当cpu收到从设备的应答信号后,twi_sr的txrdy将自动置1,说明数据已写入从设备。读数据的过程包括:cpu发出起始信号后,若twi_sr的rxrdy位为1,则说明twi_rhr中有数据等待接收,当twi_rhr中的数据被读出后,则rxrdy自动置为0.当读/写数据完毕后,cpu将产生一个停止信号结束传输,twi_sr的txcomp将自动置1.
2.3 pcf8563日历时钟芯片的使用方法
按i2c协议规约,pcf8563具有惟一的设备地址0a2h.本文重点研究pcf8563时、分、秒数据的读取方法,在此用到的内部寄存器包括控制/状态寄存器1(地址为00h)、秒寄存器(地址为02h)、分寄存器(地址为03h)、小时寄存器(地址为04h)。由于寄存器中以bcd格式存储时、分、秒数据,所以各时间时间寄存器的高位无效。
为使pcf8563工作于普通模式,需要将控制/状态寄存器1置为00h,同时为了存储正确的时间数据,需要将读到的数据中无效的高位进行屏蔽。若需要校对时间,只需对时、分、秒寄存器进行写操作即可。
2.4 at24c08的使用方法
at24c08是容量为8192 b(1024 b)的e2prom.at24c08内部分为4页,每一页有256字节单元,所以若要访问某个单元则需要10位进行寻址,其中最高两位是页地址,低8位是页内地址。设备地址的定义如图2所示,其中p1p0对应页地址,管脚a2可为at24c08设定两组设备地址。当a2为低电平时,4页的设备地址分别为0a0h,0a2h,0a4h,0a6h;当a2为高电平时;反之为0a8h,0aah,0ach,0aeh.因此,为了避免at24c08与pcf8563的设备地址冲突,需将a2连接高电平。
at24c08的写操作支持字节写和页面写两种方式。字节写方式中每写一个字节均需主设备提供起始信号、设备地址、内部地址以及停止信号;页面写方式即连续写数据,需主设备提供起始标志、设备地址以及内部地址,数据全部写完后再发送停止标志。
at24c08的读操作支持当前地址读、随机读和顺序读3种方式。当前地址读表示从当前内部地址单元读出1个字节,所以主设备仅需提供起始信号、设备地址和停止信号;随机读表示从任意内部地址单元读出1个字节,所以主设备需要先提供1次起始信号、设备地址、写操作、设备内部地址和停止信号,设定设备的内部地址,之后再按当前地址读方式读数据即可;顺序读表示从当前地址开始连续读多个字节,所以主设备需提供起始信号、设备地址、读操作,数据全部读完后再发送停止信号。
为了快速读写数据,本文采用页面写的方式将数据写入at24c08;采用随机读和顺序读相结合的方式读取at24c08数据。
3 软件设计
3.1 twi初始化程序的设计
根据twi的功能特点,twi初始化的初始化包括以下4步:
(1)配置pio控制器使复用管脚驱动twi信号;
(2)配置pmc使twi时钟处于工作状态;
(3)配置twi为主工作模式。本文cpu为主设备,日历和存储芯片为从设备;
(4)设置数据传输速率,配置twi时钟波形发生器寄存器。
3.2 pcf8563驱动程序的设计
为了控制pcf8563的工作方式,需要对其写入控制字;为了得到pcf8563输出的时间信息,需要对其进行读操作,读/写数据的流程如图3所示。
本文设计编写如下读函数和写函数:
其中,ptwi是结构体指针,指向的结构体中存放twi的寄存器,通过ptwi即可访问各twi寄存器;address表示设备地址;im_address表示设备内部地址;data代表读写数据的变量指针。
因此,若使pcf8563工作于普通模式,并读时数据,可用以下代码实现:
3.3 at24c08驱动程序的设计
由于at24c08由4个具有不同设备地址的页组成,且采用连续读写数据的操作方式,所以at24c08的读写与pcf8563读写有以下几点区别。
(1)先设置twi_cr的起始标志,之后通过twi_rhr和twi_thr读/写twi接口的数据;发送最后一个数据之前,再设置twi_cr的停止标志。
(2)对于多字节数据的读写,全部数据若没有传输完毕,便不发送停止信号,所以需通过判断twi_sr寄存器中的txrdy和rxrdy决定是否读twi_rhr和写twi_thr,而将是否出现停止信号作为是否停止发送和接收的判断依据。
(3)由于数据量和起始单元均是随机的,所以有可能出现一页写不下的情况,因此针对给定的数据量和起始单元参数需要计算出共需几页,以便在进行页面切换时更换设备地址。
本文设计编写了如下读函数和写函数。
3.4 软件的调试与运行
本文采用iar开发环境和j-link仿真器进行软件的在线调试和加载运行。调用函数完成以下程序设计:首先从pcf8563连续读出若干数据并写入at24c08;其次,将at24c08中的数据读至数组变量中。在程序中的读完at24c08数据后设置断点,观测数组中存放的数据,从而验证驱动程序的正确性。
4 结 语
本文设计的驱动模块已成功地用于智能煤矿分站实验系统中,完成了历史时间数据的记录功能,同时本文为arm控制多个i2c设备提供了可以借鉴的方法。
6自由度惯性传感器的性特点及应用研究
华为如何定义AI时代的交换机
SenseTime与麻省理工学院(MIT)建立了联盟
第22届中国国际光电博览会在深圳国际会展中心开幕!
采用三菱CC-LINK现场总线实现小区自动抄表系统的设计
I2C设备控制方法的实现
STM32 DMA中DMA和CPU两者怎么实现分时使用内存
5G时代来临,LCP天线需求大量提升
电脑内存不足怎么解决win10
安卓用户用iPhone12 Pro的体验如何?
硅基氮化镓是做什么用?
Fairchild因“历史”而“辉煌”
液晶拼接屏的三种拼接方法
低频直接转换正交调制器LTC5598的功能特点及应用分析
USB3.0线缆和连接器的差分信号分析与测量
分离式光电液位传感器在电熨斗方面的应用
Extron推出DMP128数字音频矩阵处理器
谷歌平板为什么凉了
基本数学运算在FPGA中的实现算法仿真分析
11代酷睿处理器+华为MateBook打造智慧化办公