购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第六章

实例四
——I2C总线接口

6.1 I2C总线

I2C总线是一种广泛应用且功能强大的实现设备间通信的同步串行通信总线。I2C总线使用两个双向的集电极开路或漏极开路线路,即串行数据线(SDA)和串行时钟线(SCL)。SDA和SCL都是双向的,均需要采用电流源或上拉电阻连接至VCC,上拉电阻的大小取决于I2C线路上的电容量。为了实现连接设备的线与功能,连接至I2C总线的设备接口输出部分必须是漏极开路(Open Drain, OD)驱动或集电极开路OC(Open Collector, OC)驱动。I2C总线采用SCL上的时钟信号实现位信息的同步,通过SDA传输数据,即在SCL线高电平SDA线需保持稳定。

I2C总线上有两类节点,主节点和从节点。主节点产生时钟并初始化与从节点的通信。从节点接收时钟并对主节点的呼叫做出反馈。I2C总线是多主控总线,这意味着可以存在多个主控节点。此外,可以在消息之间(STOP信号之后)改变主节点和从节点。无论何种情况,I2C总线上的设备有四种潜在的操作模式:主发送、主接收、从发送、从接收。实际应用中,大部分设备只使用单一的角色,以及工作在相对应的两个模式下。I2C总线设备的连接如图 6.1。

图 6.1 基于I2C总线的设备连接

I2C总线典型的应用电压为+5V和+3.3V。I2C总线可以连接的节点数量受地址空间和总线400 pF电容的限制。因此,实际通信距离在几米之内。同时,相对较高的阻抗和较低的抗扰度要求I2C总线上的设备具有共用接地电位。I2C总线在标准模式时速率为 100kbps,快速模式时速率为 400kbps,快速+模式时速率为 1Mbps,高速模式时速率为 3.4Mbps,可采用 10 kbp s的低速模式,也允许采用其他的时钟频率。

I2C总线支持多种采用不同技术(CMOS, NMOS, bipolar)实现的设备的连接。总线上的低电平和高电平依赖于连接设备的VDD。设备输入参考电平定义为VDD的 30%和 70%,即VIL不高于 0.3*VDD,VIH不低于 0.7*VDD。图 6.2 为不同电压供电设备采用同一I2C总线连接。图6.2 中I2C总线以VDD1 为参考,VDD2 和VDD3 是可以不同于VDD1 的。

图 6.2 不同电压供电设备采用同一I2C总线连接

除了数据位 0 和 1 之外,I2C总线使用了与数据位不同的START和STOP信号,以用作消息定界符。I2C总线定义了以START信号开始、以STOP信号结束的三种基本传输类型:主节点写数据至指定从节点的单消息,主节点从指定从节点读数据的单消息,主节点给一个或多个从节点发布至少两个读或写信息的组合格式消息。在I2C总线空闲的情况下,才可以初始化(启动)数据传输。在STOP信号之后,如果SDA和SCL均为高,则认为总线空闲。I2C通信协议如图 6.3 所示。

图 6.3 I2C通信协议

从图 6.3 可知,I2C总线数据的传输过程,START起始条件、STOP中止条件以及有效数据位。I2C总线上所有数据的传输以START开始,以STOP结束。当SCL为高时,SDA从高到低的转换,定义为START起始条件。当SCL为高时,SDA从低到高的转换,定义为STOP中止条件。在SCL高电平期间,SDA必须保持稳定。只有当SCL为低电平时,SDA才可以实现高低电平转换。

SDA传输的每个字节必须是 8 位长度。每次可以传输的字节数不设限制。每个传输的字节之后必须有确认位(ACK)。数据采用MSB在前原则传输。由于各种原因当从设备无法接收或传输完整字节时,从设备可以拉低SCL时钟线,以强制主设备进入等待状态。当从设备准备好并且释放SCL后,数据传输继续。I2C总线上的数据传输如图 6.4。

图 6.4 I2C总线上的数据传输

I2C总线上传输的设备地址为 7 位长度,之后的第八位为数据方向位(R/W)。第八位数值为 0,表示写操作,数值为 1 表示读操作。图 6.5 为完整的I2C数据传输。

图 6.5 完整的I2C数据传输

主设备产生STOP中止条件中止数据传输。如果主设备需要继续采用该总线通信,可以在不产生STOP中止条件的情况下产生一个重复性START起始条件(Sr)并且制定另一个从设备。采用该方式,可以组合多种形式的读写传输。图 6.6 为组合数据传输。

图 6.6 I2C组合数据传输

通常情况下,I2C总线采用 7 位地址空间,也可采用用 10 位地址空间。I2C总线上的每个设备均有一个特定的设备地址,以与总线上的其他设备相区分。许多从节点需要在上电时进行配置,以确定该设备功能或行为。主节点访问从节点的内部寄存器,实现从节点的配置。从节点可以有一个或多个寄存器,以保存信息、读或写数据。

I2C总线设备也采用 10 位地址,扩展了地址空间和设备数目。7 位地址的设备和 10 位地址的设备可以连接至同一I2C总线,且可以应用于I2C总线的所有速度模式。相对而言,10 位地址应用得不是那么广泛。10 位地址由两个字节组成,在START起始条件(S)或重复性START起始条件(Sr)之后传输。第一个字节的前七位是 1111 0XX,其中XX为 10 位地址的最高两位;第一个字节的第八位(R/W)决定了消息的传输方向。7 位地址设备的读写格式均适用于 10位地址设备。

6.2 TMP006 红外温度传感器

TMP006 是一款具有数字接口的非接触式红外温度传感器,主要用于物体表面温度测量 【16】 【17】 ,如图 6.7。

图 6.7 红外温度传感器TMP006 目标测量

保证目标温度测量和计算的精度,应用TMP006 时,需要考虑两个主要的基本测量限制:目标物体的表面发射率,以及TMP006 位置与目标大小的关系。TMP006 仅可用于红外辐射率大于 0.7 的目标表面温度计算,并且优选大于 0.9 的对象。当被测目标表面红外辐射率很低时,可以采用涂抹油漆的方式,以达到 0.8-0.96 的红外辐射率。测量时,将TMP006 直接放在目标物体的正面,并使目标表面与TMP006 平行,且距离d小于圆形目标半径r的 1/2,如图 6.7所示,这样就可以确保传感器捕获的红外信号至少有 90%来自目标。

TMP006 使用集成在硅片上的热电堆吸收被测目标的红外能量辐射,依据热电堆电压的相应变化以确定目标温度。TMP006 工作电压 3.3V,工作电流低至 240µA,工作温度范围–40°C~+125°C,数字输出传感器电压 7 μV/°C。TMP006 为 1.6mmX1.6mm晶圆芯片级封装(WCSP)器件(DSBGA)。

TMP006 在CC3200-LAUNCHXL开发板上的应用电路如图 6.8。

图 6.8 TMP006 电气原理图

从TMP006 电气原理图可知,设备地址ADDR(1:0)配置为 01B,未使用/DTRDY引脚,采用I2C接口输出传感数值。

TMP006 内部数据寄存器存储了配置信息、温度测量结果和状态信息,寄存器映射图如表6.1。

表 6.1 寄存器映射

如表 6.1 所示,TMP006 的温度寄存器Ta是一个 14 位只读寄存器,存储最近一次的局部参考温度转换数据Ta。上电或软复位后,在第一次温度转换完成之前,读取该温度寄存器的数值为 0 摄氏度(0000h)。TMP006 温度寄存器的数据采用二进制补码有符号整数格式,最小位为 1/32℃(0.03125),如表 6.2。

表 6.2 TM006 温度数据格式

传感器电压寄存器Vo是一个 16 位只读寄存器,数据采用二进制补码有符号整数格式。最低位LSB为 156.25nV。全范围数值是±5.12mV。红外检测对象的温度参考传感器电压寄存器数据与温度寄存器数据计算得出。关于TMP006 温度计算方程式请参考文档TMP006 User's Guide用户手册。

TMP006 有一个用于寻址给定数据寄存器的 8 位指针寄存器,标识了在I2C总线上读写命令对应的数据寄存器。每个写命令均会设置该寄存器。在执行读命令之前,必须先执行写命令,以在该寄存器中设置合适的值。指针寄存器的上电复位POR值为 00h,该值将选择热电堆电压寄存器Vobject(Vo)。关于TMP006 的详细编程信息,请参见TMP006 数据手册。

6.3 I2C测试

6.3.1 TMP006 温度测试

I2C_demo示例程序,测试TMP006 温度传感器,测试数据如图 6.9 所示。

图 6.9 采用I2C_demo示例程序检测TMP006 温度传感器

从测试记录可知,测试过程中读取了如表 6.1 所示的TMP006 寄存器。其中,配置寄存器、生产商ID寄存器、设备ID寄存器内容与TMP006 数据手册一致。传感器电压寄存器数值为0xfe8d,由此可知传感器输出电压信号Vo。环境温度寄存器数值为 0x0f28,由此可知环境温度Ta。

基于以上两个数据,采用TMP006 对象温度计算公式 【16】 ,可计算出TMP006 采用红外方式检测的目标对象温度。

修改并采用CC3200 软件开发套件中提供的OOB示例程序,测试TMP006 温度传感器,测试数据如图 6.10 所示。

图 6.10 采用OOB示例程序检测TMP006 温度传感器

从测试数据可知,相关寄存器参数测试结果一致;由于测试时刻不同,传感器电压寄存器和温度寄存器略有差异。测试程序见 6.5,程序中调用了温度计算函数。

6.3.2 I2C通信距离测试

基于CC3200-LAUNCHXL开发板,采用相互读取I2C接口设备(振动和温度)的方式,在相同的环境下对I2C总线通信距离进行多次读取的功能测试,测试结果如表 6.3。

表 6.3 I2C总线测试记录

从上表可知,采用一致性较高的程序,通信成功与否与I2C接口设备、I2C总线模式、系统侧软件、通信距离、通信线缆均有关系。例如,通信距离越短,在各种模式或设备下读取操作更易于成功;相较于多芯线缆,单芯线缆更具有优势;相较于振动传感器,可以在更远的距离读取温度传感器参数;整体而言,标准模式下可以实现更远距离的I2C参数读取;在外接线缆的情况下,CC3200-LAUNCHXL开发板OOB读取几乎都不成功,只有采用 0.5 米单芯线缆时,I2C标准模式 100kbps工况下读取操作成功。

6.4 I2C程序

6.4.1 I2C引脚配置函数

I2C引脚配置程序如下:

6.4.2 I2C初始化函数

I2C初始化函数I2C_IF_Open()使能I2C接口、配置I2C为标准模式 100kbps或快速模式400kbps。

函数I2C_IF_Open()的定义如下:

6.4.3 用户命令解析函数(串口)

解析用户命令(串口),并调用相应的I2C应用程序接口函数API。

6.4.4 I2C命令处理函数

命令处理函数以读命令和读寄存器命令为例。读命令处理函数解析所获得读命令参数,例如I2C设备地址和读数据长度,同时,执行I2C读取操作,并给出操作结果。

读命令处理函数解析所获得读命令寄存器参数,例如I2C设备地址、寄存器偏移地址和读数据长度,同时,执行I2C写寄存器地址及读指定长度数据,并给出操作结果。

关于I2C总线写命令和写寄存器命令,参见CC3200 SDK软件开发套件中I2C_demo示例程序。

6.4.5 TMP006 温度读取函数

默认情况,TMP006 温度数值为摄氏温度。TMP006DrvGetTempBoth()为TMP006 环境温度和传感器参考温度读取函数。

温度计算函数如下:

采用I2C总线读取TMP006 温度传感器数据,主函数如下: xV+X88RwVV2NOAgZjGkb0851sHBAd9MS58+PgdFbjIzW1mL4D2dNwcJ1Hw9J/61K



第七章

实例五
——SDHOST接口

SD(Secure Digital Memory Card)是SD协会(SD Association, SDA)设计的一种专有的非易失性存储卡格式,广泛应用于各种电子设备。SD标准于 1999 年发布,最初作为多媒体卡MMC(Multi-Media Card)的更新,但最终成为了一个重要的行业标准。2000 年成立的非营利性组织SDA负责推广和管理SD卡标准。SD标准主要涵盖SD存储卡、SD主机以及SD衍生产品。

7.1 SD存储卡

SD存储卡具有三种尺寸,分布为SD卡、miniSD卡、microSD卡,三种尺寸的卡以特定的方式可以嵌套使用。其中,microSD卡较为通用,一般可直接或采用SD适配器与具有USB接口的SD读卡器连接,如图 7.1。

图 7.1 microSD卡、SD卡适配器和SD读卡器

SD存储卡分为五种系列,分别为SDSC、SDHC、SDXC、SDUC、SDIO。表 7.1 说明了SD存储卡的容量等级。

表 7.1 SD存储卡容量等级

SD存储卡主要分为四部分组成:外部引脚、内部寄存器、接口控制器和内部存储介质。SD存储卡接口除了保留MMC卡的 7 针外,在接口两侧多了 2 针,作为数据线。SD卡外形尺寸为 24mm*32mm*2.1mm或 24mm*32mm*1.4mm,SD卡接口如图 7.2。

图 7.2 SD卡接口

SD 存储卡主要引脚和功能描述如下:CLK时钟信号,控制器或者SD 存储卡在每个时钟周期传输一个命令位或数据位,在默认速度模式下SD 总线的频率可在 0~25MHz 之间变化;CMD命令和响应复用引脚,命令是由控制器发给SD 存储卡,可以是从控制器到单个SD 存储卡,也可以是到 SD 总线上所有卡;响应是存储卡对控制器发送的命令应答,应答可以来自单卡或所有卡;DAT0~3 数据线,数据可以从存储卡传向控制器也可以从控制器传向存储卡。

SD存储卡有两种驱动模式:SPI模式与SDIO模式。它们所使用的接口信号是不同的。在SPI模式下,需要用到SD卡的 4 根信号线,即CS、SCLK、DI与DO(片选、时钟、数据输入与数据输出)。SD存储卡支持三种传输模式:SPI模式(独立序列输入和序列输出),1 位SD模式(独立指令和数据通道,独有的传输格式), 4 位SD模式(使用保留的针脚以及重新设置的针脚,支持四位宽的并行传输)。SD卡接口信号定义如表 7.2。

表 7.2 SD卡接口信号定义

采用“X”表示法表示SD数据传输速度时,是按CD-ROM的 150kB/s为 1 倍速的速率计算方法来计算的。基本上,它们能够比标准CD-ROM的传输速度快 6 倍(900 kB/秒),而高速的SD卡更能传输 66x(10 MB/秒)以及更高的速度。

普通卡和高速卡的速率定义为Class2、Class4、Class6 和Class10 四个等级。超高速卡,速率定义为UHS-I、UHS-II和UHS-Ⅲ等。SDA对SD Express和视频速度等级也进行了定义。详细信息请参见SD规范以及相关文档。

关于SD存储卡的详细说明,可参考SD规格(SD Specifications)文档 【29】

7.2 SD主控制器接口

7.2.1 SD主控制器接口概述

CC3200 上的SD主控制器提供嵌入式处理器等主设备与SD存储卡的接口,以极少的主设备资源实现SD操作。SD主设备工作在 1 位SD模式,实现SD卡访问、处理传输层的SD协议、数据打包、增加CRC循环校验码和启动停止位、以及检测内容的正确性。SD控制器接口发送SD命令,轮询适配器状态或者等待异常状态或操作完成告警的中断请求。SD控制器可配置为产生DMA请求且工作在极小CPU干预的状态。

图 7.3 1 位SD主控制器接口(CC3200)功能框图

SD主设备接口采用 3 根信号线(CLK, CMD, DATA)与SD存储卡通信。CLK信号由SD主控制器内部产生并提供给外部SD存储卡;双向的CMD信号线用于发送命令和接收响应;双向的DATA数据线用于发送数据至SD存储卡或者从SD存储卡接收数据。

SD主控制器和SD存储卡之间的总线协议是基于消息的。每个消息均由命令、响应、数据和忙信号来表示。命令用于启动操作,从SD主控制器到SD存储卡的命令在CMD信号线上串行传输;响应是对命令的回答,从SD存储卡到SD主控制器地响应在CMD信号线上串行传输;采用DATA数据线传输从SD主控制器到SD存储卡的数据,或者从SD存储卡到SD主控制器的数据。

供电、复位和时钟模块(Power, Reset and Clock Module, PRCM)管理时钟和复位功能。片上SD主控制器时钟来源于 120MHz固定时钟,可以采用内部 10 位分频器模块分频,为SD存储卡提供相应的时钟。用户通过采用合适的参数调用PRCM复位接口API复位PRCM模块,这将令该模块内的所有内部寄存器恢复到默认状态。

7.2.2 SD主控制器特点

SD主控制器特点:

与SD存储卡V2.0 规范中的SD命令和响应规范完全兼容,包括容量大于 2GB的SDHC存储卡;

灵活的结构,允许支持新的命令结构;

1 位SD存储卡传输模式规范;

内置用于读或写操作的 1024 字节缓冲:512 字节缓冲用于传输和接收;每个缓冲均为32 位宽 128 字长;

采用 32 位宽度的总线访问以最大化总线吞吐量;

单中断线实现多中断源事件;

两个从DMA通道,一个用于传输,一个用于接收;

可编程的时钟信号;

集成的内部传输器,允许直接连接至SD卡而无须外部传输器;

支持可配置的忙信号和响应超时;

支持具有奇偶时钟比的多种SD存储卡时钟频率。最大时钟频率可达 24MHz。

7.2.3 控制和操作SD主控制器

鉴于CC3200 平台上外围设备集成的特点,推荐开发者使用外围库API来控制和操作SD主控制器。

基本初始化和配置流程:

1)使用函数PRCMPeripheralClkEnable(PRCM_SDHOST, PRCM_RUN_MODE_CLK)有效SD主控制器时钟;

2)设置并有效合适的SD主控制器引脚;

3)使用函数PinDirModeSet(<PIN_NO>,PIN_DIR_MODE_OUT)设置CLK时钟引脚为输出;

4)使用函数PRCMPeripheralReset(PRCM_SDHOST),SDHostInit(SDHOST_BASE)软复位并初始化SD主控制器;

5)使用函数SDHostSetExpClk(SDHOST_BASE, PRCMPeripheralClockGet(PRCM_SDHOST), XX000000)初始化SD主控制器为SD存储卡提供XXMHz时钟。

用于SD主控制器的外围API功能包括卡检测及初始化、发送命令、读数据块、写数据块等。具体信息请参见CC3200 软件开发套件SDK案例程序,CC3200 Technical Reference Manual技术参考手册 【1】 及CC3200 Peripheral Driver Library User's Guide 【9】 用户指导文档。

7.3 SD卡块操作示例

SD卡块操作程序流程为引脚设置、串口初始化、SDHOST初始化、SD卡选择、SD卡块读取和SD卡块写入,以及相应信息打印。SD卡块操作时,引脚配置:PIN_07 为CLK,PIN_08 为CMD,PIN_6 为DATA,实物如图 7.4。

图 7.4 SD卡块操作示例

采用图 7.1 所示 16G容量SD卡,进行SD卡块操作。将sdhost示例程序烧录至图 7.4 所示目标板,运行程序,测试结果如图 7.5 所示。从图 7.5 可知,所操作的SD卡为SDHC类型,容量为 15120MB字节,块大小为 512 字节。

图 7.5 SD卡块操作测试结果

7.4 SD卡块操作程序

CC3200 SDK提供的SD卡块操作示例程序sdhost如下: xV+X88RwVV2NOAgZjGkb0851sHBAd9MS58+PgdFbjIzW1mL4D2dNwcJ1Hw9J/61K



登录后阅读更多精彩内容
登录
点击中间区域
呼出菜单
上一章
目录
下一章
×