版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式接口技术
10.1扩展技术概述10.2I/O模拟时序接口扩展10.3SPI总线10.4I2C总线组习题10
本章要点
☆解决系统资源不足的基本方法
☆系统扩展对硬件提出的要求,扩展的基本方法
☆I/O模拟时序的接口扩展方法
☆SPI通信扩展的基本原理与应用
☆I2C通信扩展的基本原理与应用
包括STM32在内的嵌入式MUC本身已是一个基本的微型计算机系统,内部具有一定数量的I/O接口和功能部件,在具体应用时首先要充分利用内部已有资源,当其内部资源不够用时才进行扩展。
10.1扩展技术概述
解决MCU片内资源不能满足需要问题的方法有两种,一是选用功能更多、容量更大的MCU
;二是根据应用需要有针对性地对现有系统进行接口扩展。
10.1.1扩展的任务与要求
嵌入式接口扩展的基本任务是以尽可能低的成本,采用最方便的扩展技术满足系统的应用需要,主要进行接口功能扩展和容量扩展。
1.接口的逻辑电平与驱动能力
在进行扩展时,硬件上要保证物理信号能被正确地传递。为此,MCU与外围扩展电路的引脚要正确连接,引脚间不兼容的电平要进行变换。半导体器件主要有TTL和CMOS两大类逻辑电平。
2.接口时序
用户在接口设计时除了注意接口的信号定义,还要重视接口时序问题,由于计算机从本质上来讲是同步时序电路,因此接口扩展中最为关键的问题就是匹配好XPU与接口电路之间的时序逻辑关系。
3.接口软件
要实现接口扩展要求,还需要软件的配合。
10.1.2扩展的基本方法
按不同电路间时序逻辑匹配的方式,嵌入式系统接口有四种基本的扩展方法:专用接口芯片扩展、I/O模拟时序接口扩展、时序可编程芯片扩展和通信扩展。
1.专用接口芯片扩展
在通用计算机领域,对CPU和相应的接口芯片的需求比较大,可以大批量生产以降低成本。另外由于是通用的,CPU和接口芯片的种类不是太多。
如图10.1所示,8086CPU与8255A的数据总线、控制总线直接相连,地址总线基本也直接相连,只有地址总线高位上有译码电路,这是因为在总线上往往挂有多个芯片,在某个时刻CPU只能选中一个芯片,与之建立联系。因此必须利用高位地址总线的译码结果选择芯片,即高位地址
完成芯片选择,低位地址完成片内寄存器/数据单元的选择。数据与控制总线直连,是专用接口芯片与CPU相连的一般规律。图10.1
8255A扩展8086CPU的并口
2.I/O模拟时序接口扩展
时序逻辑是一些或长或短的脉冲信号序列,它既可以用硬件方式产生,也可用软件编程的方式产生。在嵌入式系统应用中,一些MCU可能不具备相应功能的硬件接口部件,无法提供与外围器件相匹配的时序逻辑,此时就可以采用I/O模拟时序方法进行接口扩展。即将MCU的普通I/O引脚与外围器件相连,通过指令置1或清0这些引脚,再配以适当的延时就可以产生外围器件所需的时序逻辑,这就是所谓的I/O模拟时序接口扩展。
I/O模拟时序接口扩展是一种灵活的、硬件成本最低的扩展方式,MCU与接口电路之间的时序逻辑完全由软件编程实现。由于是用软件生成时序,受制于CPU主频,I/O模拟时序的频率较低。同时在软件生成时序逻辑时,会耗费大量的CPU时间,工作效率较低,所以I/O模拟时序接口扩展只适用于低速应用,这是使用I/O模拟时序接口扩展时应特别注意的问题。另外,复杂的时序逻辑会使程序变得过于复杂,而采用软件延时完成定时,时间长短有时难以把握,这都会给I/O模拟时序接口扩展带来困难。
3.时序可编程芯片扩展
前面讲到的专用接口芯片扩展依靠硬件实现,虽然速度快,硬件设计简单,但应用面窄,不够灵活。而I/O模拟时序接口扩展依靠软件实现,虽然灵活,但工作速度慢。时序可编程芯片扩展采用软、硬件相结合的扩展方法,兼具了二者的优点。
4.通信扩展
通信扩展另辟蹊径,没有再考虑芯片之间的种类繁多的时序逻辑,而是用统一规范的通信方式解决嵌入式系统的功能扩展问题。通信扩展以串行方式工作,所需要引脚数少,方便硬件布线,支持远距离扩展,多个外围功能部件可以挂在同一条通信总线上,实现多接口扩展。
由于历史原因,以及在不同厂家的支持下,嵌入式应用领域目前有多种通信扩展标准,其中以SPI总线和I2C总线较为常用,将在本章10.3-10.4节中详细介绍。
以上四种扩展技术的对比见表10.1。
10.2I/O模拟时序接口扩展
10.2.11602内部的存储器1602是一种用5×7点阵图形来显示字符的LCM,显示内容为16×2,即可以显示两行,每行16个字符,专门用于显示字母、数字和符号。
1602内部有三种存储器:CGROM、CGRAM、DDRAM。CGROM保存了厂家生产时固化在模块中的点阵显示数据,共存储了160个不同的点阵字符图形,如图10.2所示。这些字符有阿拉伯数字、英文字母的大小写、常用的符号和日文片假名等,每一个字符都有一个固定的地址,如字母A的地址是41h,显示时LCM把地址41h中的点阵字符图形显示出来,就能看到字母A。CGRAM是用户自定义点阵显示数据。图10.2
1602CGROM中点阵数据与地址
DDRAM则是和显示屏的内容对应的。1602内部的DDRAM有80字节,而显示屏上只有2行×16列,共32个字符,所以两者不完全一一对应。默认情况下,显示屏上第一行显示的是DDRAM中80h到8Fh的内容,第二行显示的是DDRAM中C0h到DFh的内容。这里列举的DDRAM地址准确来说应该是DDRAM地址+80h之后的值,因为在设置LCM显示地址时,命令字的最高位总是为1。表10.2列出了DDRAM地址与字符显示行、列的对应关系。
10.2.21602的引脚与时序
1602LCD采用14脚(无背光)或16脚(带背光)接口,各引脚说明如表10.3所示。
主要引脚说明:
第4脚:RS寄存器选择。高电平时选择1602数据寄存器、低电平时选择1602指令寄存器。
第5脚R/W:读/写信号线。高电平时对1602进行读操作,低电平时对1602进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址;当RS为低电平、R/W为高电平时可以读忙信号;当RS为高电平、R/W为低电平时可以写入数据。
第6脚E:使能端。当E端由高电平跳变成低电平时,液晶模块执行命令,具体操作时序如图10.3所示。图10.31602字符液晶模块操作时序
10.2.3STM32扩展1602
1.硬件设计
STM32扩展1602的具体电路如图10.4所示。虽然1602的工作电压是5V,但是其数据、状态和控制引脚为TTL电平,和STM32的输出电平兼容,引脚可以直接相连。另外,还可以用上拉电阻配合MCU的OC输出实现电平匹配,不过此时应该选择5V兼容的STM32接口线与1602液晶相连。图10.4STM32扩展1602硬件设计
2.软件设计
程序流程如图10.5所示。1602是靠相应的GPIO引脚驱动的,在使用1602进行显示前需要对其进行初始化,由于篇幅限制,对初始化函数未进行过多讲解,同时还省去了延时函数。下面结合1602时序的模拟实现,介绍主要的程序片断。图10.51602的显示流程
1)宏定义
为了使程序简洁易读,方便修改,需要将1602的引脚操作定义成宏。
【例10.1】LCD1602引脚宏定义。
2)主要代码
下面各函数代码均根据图10.3所示时序,表10.5所示的命令序列编写。1602显示刷新慢,所以在执行每条指令之前一定要确认模块的忙标志为低电平(表示不忙)。显示字符时要先向1602输出“置数据存储器地址”指令,告诉模块在哪里显示字符,然后向1602输出数据,告诉模块显示什么字符。
【例10.2】LCD1602读忙状态函数。
还需要打开外设时钟,配置相应的GPIO口,相关引脚才能驱动1602。对于GPIO的引脚配置,可以调用固件库函数实现。
3)数据格式的转换
1602是字符液晶,只能显示字符型数据,而在智能仪表等应用中,除了需要显示字符型数据外,还需要显示多种数据格式,如整数、浮点数。这时,需要对待显示的数据进行格式转换后才能显示。数据格式转换一般有下面两种方法。
(1)自己编写函数,把要写的数据转换成数组的存放形式。
(2)使用SPRINTF函数将各种类型的数据打印成字符串,然后将字符串中的数据依次取显示。
SPRINTF函数的格式化字符串与PRINTF非常相似,唯一不同的是转换后的结果没有送往标准输出设备,而是存放在由指针变量BUFFER指示的字符缓冲区中,这个字符缓冲区可以是一个字符数组。例如,将浮点数3.14转换成长度为4,含2位小数的字符串,存储于字符缓冲区BUFFER中,可采用下面的代码:SPRINTF(BUFFER,"%4.2F",3.14)。
10.3SPI总线
10.3.1SPI总线简介SPI主要使用4个信号:
SPI采用环形总线结构。通信总是由主机发起,在SCk的控制下,两个双向移位寄存器进行数据交换。主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输,然后移位寄存器通过MOSI信号线将字节传送给从机,从机也将自己的移位寄存器中的内容通过MISO信号线返回给主机,如图10.6所示。
SPI时序的总体要求是:确保数据位在前一个时钟沿输出,接收方在后一个时钟沿读取数据,这样是最稳定的通信方式。图10.6
SPI总线的环形结构
10.3.2
SPI从机选择
由于不具备总线仲裁能力,SPI总线上只能有一个主机,但从机可以是多个,一主多从是SPI总线的基本结构。为避免总线冲突,在同一时刻主机只能与一个从机通信。在STM32的SPI接口上有一个NSS(从机选择)引脚,用来选择从机。NSS有两种工作模式:软件NSS和硬件NSS。
在软件NSS模式下,主机SPI模块的NSS引脚可以用作普通I/O引脚,而使用其他GPIO引脚输出NSS信号,如图10.7所示,这是较常用的从机选择方式。图10.7一个主机扩展多个SPI外围器件
硬件NSS模式通常又分两种情况:
(1)NSS输出使能:主机与从机均配置为硬件NSS,当主机SPI工作时,其NSS输出低,而其他设备将自动变为SPI从设备。当一个SPI设备需要发送数据时,必须拉低NSS信号,以通知其他所有设备,本设备是主机;如果不能拉低NSS,则意味着总线上有另外一个主机在通信,将产生一个硬件错误(hARDFAULT)。一旦启动SPI通讯,NSS即为低电平,直到SPI被关闭。
(2)NSS输出关闭:工作于多主环境(作为从机),NSS为输入引脚(当NSS为低电平时被选中)。
另外,在一主一从SPI通信时,由于不存在冲突的问题,片选线并不是必需的。
10.3.3SPI时钟的相位和极性
SPI接口有四种不同的数据传输时序,取决于时钟极性CPOL(CLOCkPOLARITy)和时钟相位CPhA(CLOCkPhASE)的组合,如表10.6所示。
如图10.8所示,当CPhA=0时,MOSI引脚上输出的MSB位在第一个SCk跳变沿前至少半个时钟周期就已经上线了,即SS一拉低就可以上线了,而在第一个跳变沿锁存传送的数据位,在第二个跳变沿将该位移入移位寄存器。之后,继续下一个数据位传送,依次进行。SPI_CR1的DFF位为0时,SCk线共有16个跳变沿,完成8位(一个字节)传送;SPI_CR1的DFF位为1时,SCk线共有32个跳变沿时,完成16位(半个字)传送。在奇数个跳变沿时,锁存数据位,偶数个跳变沿时,移入移位寄存器,最后一位移入时才将数据转入数据寄存器。图10.8CPhA=0时SPI时序
10.3.4STM32的SPI
1.STM32SPI功能简介
STM32的SPI接口功能丰富,既可支持SPI通讯协议也支持I2S音频通讯协议,其SPI模式的主要功能和特点如下:
·支持主/从工作模式,支持多主机系统。
·3线全双工同步传输,2线简单同步传输,8位或16位帧格式选择。
·8种波特率,最大为FPCLk/2。
·主/从模式下均可以由软件或硬件管理NSS:主/从模式可动态转换。
·可编程的时钟极性和相位,可选择四种时序模式中的一种。
·可编程的数据发送顺序,MSB在前或LSB在前。
·可触发中断的专用发送和接收标志:发送缓冲区空,接收缓冲区非空。
·SPI总线忙状态标志。
·硬件CRC支持可靠通信。
·DMA支持1字节发送和接收缓冲。
STM32作为处理器,在SPI总线系统中往往工作于主模式下,其使用步骤如下:
(1)配置相关引脚的复用功能,使能SPIx时钟。
(2)设置SPIx的工作模式,使能SPIx。
(3)使用SPIx的数据收、发功能完成对从机的访问。
2.STM32的SPI引脚配置
在STM32F107中共有3个SPI外设,涉及的引脚如表10.7所示。
在配置SPI时,MOSI和SCk引脚都应配置为复用推挽输出,包括MISO引脚。MISO引脚在SPI主模式下实际为输入端,故其复用输出呈高阻,这样信号可以从引脚经复用输入模块送至SPI。
STM32中,配置为复用输出的引脚只要其输出级关闭,即可作为复用输入使用。下面以扩展AT45DB161D为例讲解SPI相关引脚的配置。
3.设置SPI的工作模式
在设置SPI工作模式时要注意以下几点:
(1)SPI工作模式的设定遵循“先配置模块参数,再使能模块”的原则。
(2)SPI1位于高速的APB2总线上,SPI2位于低速的APB1总线上。
(3)通信时,时钟由SPI主机提供。
(4)设置SPI时钟分频系数时,应考虑从机所能工作的极限频率,不要将其设置得太小。
(5)在有3个SPI接口的STM32芯片里,SPI2和SPI3的部分引脚和JTAG接口引脚存在复用的情况。STM32复位后这些引脚会保持在JTAG模式,导致无论调试或工作期间SPI2和SPI3接口都无法使用,可以采用如下方法解决:
·在调试期间使用SWD接口调试;
·在正常运行时将JTAG关闭;
·将SPI2、SPI3或JTAG引脚重映射至别的引脚处,可用下面的代码完成重映射。
4.数据的发送与接收
如图10.9所示,SPI数据的收/发是通过读/写SPI_DR(SPI数据寄存器)完成的,可通过SPI_SR>TXE和SPI_SR>RXNE标志位了解数据接收与发送的状态。图10.9STM32SPI框图
5.SPI中断
数据发送、接收和出错处理可采用中断。SPI中断有关信息见表10.8。
使能中断可以调用固件函数库完成:
10.3.5SPI在记录智能仪表历史数据中的应用
如同飞机上的“黑匣子”记录飞行数据一样,智能仪表需要记录各种过程参数形成的历史数据,人们可在事后查询和分析这些数据。记录下来的数据是宝贵的资源,它是反映仪表工作过程和生产过程的第一手材料,通过对历史数据的分析可以寻找新的、更好的控制规律,指导工艺改进,降低物料消耗,增加产量和提升安全边际。早期仪表采用记录仪记录数据,随着电子技术的发展,现代智能仪表已广泛采用FLASh存储器记录历史数据。
1.AT45DB161D的结构与工作原理
AT45DB161D由主存储器阵列、数据缓冲器和接口电路组成,其结构如图10.10所示。
除了主存以外,AT45DB161D还有2个容量为528字节的数据缓存。缓存可以用做主存与外部进行数据交换时的缓冲区域,也可以暂存一些临时数据。缓存读写方便迅速,但掉电数据会丢失。图10.10AT45DB161D的结构与工作原理
2.AT45DB161D的引脚
AT45DB161D通过片选引脚使能,通过串行输出(SO)和串行输入(SI)进行数据读和写。由串行时钟(SCk)对读写进行控制。对AT45DB161D的操作都是由主机发送命令来控制的,一条有效的命令从信号的下降沿开始,接着通过SI引脚送入8位指令码和期望的缓冲器或主存储器的地址,接下来是写入或读出数据流,在CS上升沿结束控制操作。所有的指令、地址和数据传输时,都是高位(MSB)在前。AT45DB1616D引脚排列及引脚定义分别如图10.11和表10.9所示。图10.11AT45DB1616引脚排列
3.状态寄存器
状态寄存器是一个8位的寄存器,可以用来确定芯片的就绪/忙状态、主存储器与缓冲区比较操作的结果或者芯片的容量等级,可以通过命令字D7h读出。
4.AT45DB161D的读操作
AT45系列的FLASh支持SPI时序模式0和3,由于上电或复位时器件自动进入模式3,所以使用模式3较为可靠。主存储器共有4096页,每页/缓冲器有528字节,因此使用12位PA11~PA0表示期望的页地址,用10位的BA9~BA0表示页内地址,缓冲器地址用BFA9~BFA0表示。
1)读主存操作
允许用户不通过数据缓冲器,直接读出主存储器中的数据,因此数据缓冲器的内容不发生变化。
连续读操作E8h的命令序列如图10.12所示,在操作码E8h之后跟24位地址(RR:2保留位,PA11~PA0,BA9~BA0)、32位无关的填充码(4个x)和N个字节数据流。那些无关字节在读操作初始化时是必需的。在无关字节后,主机为读N个字节数据流所提供的SCk时钟信号将使数据从SO引脚输出。在装操作码、地址位和读数据期间,CS必须保持低电平。CS变为高电平时,连续主存读操作结束,SO输出高阻态。图10.12主存储器连续读(E8h)命令序列
2)缓冲器读
主存储阵列中的数据可以放在SRAM缓存器内,使用缓存器读命令允许直接从缓冲区中读取数据。操作码选用要结合时钟频率而定,读缓冲器1的操作码D4h、D1h和读缓冲器2的操作码D6h、D3h,对应使用在频率低于66MhZ与33MhZ的情况下。
CS的上跳沿将终止读操作。缓冲器读操作命令序列如图10.13所示。图10.13缓冲器读命令序列
3)主存储器到缓冲器转存
主存储器中任何一页数据都可以转存到其中的1个缓冲器中,操作码53h/55h表示转存到缓冲器1/2中,然后是3字节的地址,包括2位无关位,12位页地址和10位无关位。转换工作在CS从0跳变到1开始,在转存期间,可根据状态寄存器来判定转换工作的执行情况。主存储器到缓冲器转存操作的命令序列如图10.14所示。图10.14主存储器到缓冲器转存命令序列
5.AT45DB161D的写操作
1)缓冲器写
数据可以通过SI引脚写入缓冲区1/2中。首先写入操作码,操作码84h/87h表示写到缓冲器1/2,随后是3字节地址(14位无关位与10位缓冲区地址BFA9~BFA0)。这10位地址表示要写入数据的第一个字节缓冲区地址。在最后一个地址位写入后,就可以开始向其写入数据了。如果到了缓冲区的结尾,则会自动返回到缓冲区的开头。数据会继续写入到缓冲区中,直到CS引脚产生上跳沿为止。缓冲器写操作命令序列如图10.15所示。图10.15缓冲器写命令序列
2)缓冲器数据写入主存储器(带预擦除)
被写入到缓冲器1/2中的数据可以被编程到主存储器中。操作码83h/86h表示从缓冲器1/2写到主存储器中。当CS由0跳变到1时,芯片首先擦除所选的主存储器页,再把缓冲器内容写到指定页中。擦除与编程操作由芯片自主完成,在这期间状态寄存器会指示芯片处于忙状态。图10.16表示了相应操作应实现的命令序列。图10.16缓冲器数据写入主存储器(带擦除功能)命令序列
3)缓冲器数据写入主存储器(不带擦除功能)
操作过程与带预擦除时的情况一样。
4)主存储器写
此操作是往缓冲器写和由缓冲器向主存储器写(预擦除)的结合。
操作时先写入操作码,然后写入3字节地址(2个无关位,12位页地址PA11~PA0与10位缓冲区地址BFA9~BFA0)。所有的地址字节都被写入后,就可以通过SI向芯片写入数据了。当CS引脚出现上跳沿时,芯片先擦除所选中的主存储器页,然后将存在缓冲区中的数据编程到页中去。当数据达到缓冲区末尾时,会自动返回到缓冲区的开头。主存储器写命令序列如图10.17所示。图10.17主存储器写命令序列
为保证写入数据的正确性和完整性,AT45DB161D还提供了主存储器页与缓冲器比较指令。主存储器中任何一页都可以与缓冲器1或缓冲器2进行比较。其对应的操作码分别为60h和61h。比较工作在CS从0跳变到1开始,可根据状态寄存器的内容来判定比较工作的完成。
AT45DB161D主要操作的命令序列如表10.10所示。
6.软件设计
1)宏定义
为了使程序简洁易读、方便修改,将AT45DB161D的操作码定义成宏。
【例10.13】AT45DB161D操作码与引脚宏定义。
2)主要函数代码
下面各函数代码均根据表10.10所示的命令序列编写。在进行读/写操作前要先使能AT45DB161D芯片,完成后要禁止芯片。操作前还要对芯片进行状态检测,如芯片处于忙状态则不能进行下一步操作,函数返回错误状态。
10.4I2C总线
10.4.1I2C总线简介
器件通过SDA(SERIALDATA,串行数据)线和SCL(SERIALCLOCk,串行时钟)线连接到总线上传递信息,所有器件共用上拉电阻。总线接口集成在IC中,不需要其他电路,占电路板面积小,降低了成本,提高了可靠性;IC间没有多余的联系,容易实现模块化、标准化设计。I2C总线系统结构如图10.18所示。
图10.18
I2C总线的系统结构
1.
I2C总线中涉及的主要术语
主机:在I2C总线系统中输出开始信号、结束信号以及时钟信号,是对总线进行控制的器件。
从机:在I2C总线系统中,除主机以外的其他设备均为从机。主机通过地址访问从机,被选中的从机作出响应与主机通信。
2.地址
每个I2C器件都有自己的地址,以便其在从机模式下使用。
2.从机寻址
为了取消
I2C系统中从机地址选择线,最大限度地简化总线连接,I2C总线采用了独特的寻址约定,规定开始信号后主机发送的第一个字节为寻址字节(即器件地址),用来寻找从机,并规定数据传送方向。
10.4.2
I2C的信号
1.位的传输
I2C总线以串行方式传输数据,从数据最高位MSB开始传送,每个数据位在SCL上都有一个时钟脉冲相对应。在一个时钟周期内,当时钟为高电平时,数据线SDA须保持稳定(高电平为数据1,低电平为数据0)。当时钟为低电平时,才允许数据线的电平状态发生改变,如图10.19所示。图10.19
I2C总线的位传输
2.信号类型
I2C总线在传输过程中,除了数据以外另有三种类型的信号。它们分别是开始信号(START)、结束信号(STOP)和应答信号(ACk)。
开始信号:当SCL为高电平时,SDA由高电平向低电平跳变,产生开始信号S,如图10.20所示。
结束信号:当SCL为高电平时,SDA由低电平向高电平跳变,产生结束信号P,如图10.20所示。图10.20
I2C
总线的开始、结束信号
应答信号:接收数据的器件在接收到8位数据后,向发送数据的器件发出一个低电平脉冲,表示已收到数据。在每一个收到的数据字节后面都要跟一位应答信号。应答信号在第9个时钟脉冲时出现,这时发送器释放SDA线,然后由接收器拉低SDA线产生应答信号A;如果接收器没有拉低SDA,则产生非应答信号NA,如图10.21所示。
图10.21
I2C
总线的应答信号
10.4.3I2C总线工作过程
1.主机向从机发送数据
(1)主机在检测到总线为空闲状态(即SDA、SCL线均为高电平)时,发送开始信号S,开始一次通信。
(2)主机接着发送器件地址。地址字节由7位地址和1位读写控制位(R/W=0)组成,主机等待从机响应。
(3)地址相符的从机收到地址字节后向主机返回一个应答信号A。
(4)主机收到从机应答信号后,发送要写入字节地址,等待从机响应。
(5)从机收到数据后返回一个应答信号A。
(6)主机收到应答信号后,发送一个字节数据,并等待从机响应。
(7)当主机收到从机的应答信号后,发送结束信号P,结束本次通信并释放总线,从机在收到信号P后也退出通信。
主机向从机发送1字节数据的整个过程如图10.22所示。图10.22主机向从机发送数据
需要说明的是:
①主机通过发送地址字节与对应的从机建立了通信关系,而挂接在总线上的其他器件虽然同时也收到了,但因为与其自身的地址不相符合,因此退出与主机的通信;
②主机发送的数据数量不受限制,主机通过结束信号通知发送结束,从机收到结束信号后退出本次通信;
③每次发送后,主机都是通过从机返回的应答信号了解从机的状况,如果返回的是非应答信号NA,则需要重发。
2.主机接收数据
(1)主机发送开始信号后,接着发送器件地址(其中的R/W=0),主机等待从机应答。
(2)地址相符的从机收到地址字节后向主机返回一个应答信号A。
(3)主机收到应答后,发送预读取字节地址,等待从机应答。
(4)主机收到应答后,发出重新开始信号SR,接着发送器件地址(其中的R/W=1,表明从从机读数据),主机等待从机应答。
(5)主机收到应答后改变通信模式,由发送变成接收,准备接收从机发出的数据。
(6)当主机完成数据接收后,先向从机发送一个非应答信号NA,表示不再接收数据,再发送一个结束信号P,释放总线结束通信。从机收到NA信号后便停止发送。
主机接收数据的数量由主机自身决定,在这一过程中,始终由主机提供时钟,从机发送数据,主机接收并产生应答信号。当主机发送信号NA后从机便结束传送并释放总线。主机接收数据的整个过程如图10.23所示。图10.23主机接收数据
10.4.4
I2C总线的时钟同步与仲裁
1.
I2C总线的线与
如图10.24所示,I2C总线的时钟同步与多主机仲裁是依靠器件输出端“线与”功能实现的。图10.24
I2C总线器件输出结构
2.SCL信号的同步
I2C
总线的SCL时钟脉冲都是由主机发出的,作为串行数据的移位脉冲。
如果从机希望主机降低传输速度,可以通过将SCL拉低延长其低电平时间的方法来通知主机,当主机在准备下一次传送时发现SCL电平被拉低,就开始等待,直至从机完成操作并释放SCL。这样,主机同步时钟实际上受到从机控制,如图10.25所示。可见SCL低电平是由时钟低电平时间最长的器件决定的,这就是时钟同步,也称为时钟拉伸或时钟延展,它解决了I2C总线的速度同步问题。图10.25
SCL信号同步
3.I2C总线上的总线仲裁
如果在同一个I2C总线系统中有两个主机,其时钟信号分别为SCk1、SCk2,它们都具有控制总线的能力。假设两者都开始控制总线进行通信,由于“线与”的作用,实际的SCL波形如图10.26所示。在总线做出仲裁之前,两个主机都会以“线与”的形式共同参与SCL线的使用,速度快的主机1等待落后的主机2。
对于SDA线的使用,两个主机同样也是按照“线与”的逻辑来影响SDA上的电平变化。仲裁过程如图10.26所示。图10.26
I2C的总线仲裁时序
当主机1发送第3位数据“1”时,主机2发送“0”,由于“线与”的结果SDA上的电平为“0”,这样当主机1检测SDA电平时,就会得到一个与自身输出不相符的“0”电平,这时主机1只好放弃对总线的控制权,因此主机2就成为总线的唯一控制者。不难看出:
(1)对于整个仲裁过程,主机1和主机2都不会丢失数据。
(2)对总线的控制,各主机有相同的优先级。
(3)总线控制遵循“低电平优先”的原则,即谁先发送低电平谁就掌握总线的控制权。
根据上面的描述,对“时钟同步”与“总线仲裁”可以总结如下规律:
(1)主机通过检测SCL上的电平来实现与从机的速度同步,即时钟同步。
(2)主机通过对比SDA电平和自身发送电平来判断是否发生总线“冲突”,即总线仲
裁。因此,I2C总线的“时钟同步”与“总线仲裁”是靠器件自身接口的“线与”结构得以实现
的。这种通过“线与”实现的总线仲裁在其他总线中也经常使用。
10.4.5STM32的
I2C
1.STM32I2C
功能简介
STM32系列微控制器至少集成了一个2C模块。它提供多主机功能,能实现所有I2C总线标准规定的时序、协议、仲裁和定时功能,支持标准(100khz)和快速(400khz)传输模式,可以使用DMA减轻CPU负担。其主要特点如下:
·多主机功能:既可做主机也可做从机。
·主机功能:产生开始信号、结束信号以及时钟信号。
·从机功能:可编程的从机地址,支持2个从地址及停止位检测。
·产生和检测7/10位地址和广播呼叫。
·状态标志:发送/接收模式标志、字节发送结束标志、总线忙标志。
·错误标志:主模式时的仲裁丢失、地址/数据传输后的应答错误、检测到错位的开
始或停止条件、无时钟延展下的上溢或下溢。
·2个中断向量:1个中断用于地址/数据通信成功、1个中断用于错误。
·可选的时钟延展功能。
·可配置的PEC(信息包错误检测)产生或校验:发送模式中PEC值作为最后一个字节传输,对最后一个接收字节进行PEC错误校验。
STM32的I2C模块默认工作于从模式,在发出开始信号后自动从从模式切换到主模式;当仲裁失败或发出结束信号后,则又从主模式切换到从模式。与其他外设一样,I2C的使用步骤如下:
(1)配置I2C相关引脚的复用功能,使能I2C模块时钟。
(2)设置I2C的工作模式。
(3)启动I2C。
(4)使用I2C的数据收/发功能完成对其他I2C设备的访问。
2.STM32的I2C引脚与工作模式设置
STM32F103中有2个I2C外设,涉及的引脚如表10.11所示。
3.主发送器模式
STM32的I2C接口可以工作于从机(发送器或接收器)模式、主机(发送器或接收器)模式等四种模式中的一种。
4.接收器模式
STM32主机接收数据过程如图10.28所示,上方是简化的
I2C数据接收总线操作序列,下方是
I2C接口的事件序列。
需要特别注意的是:在
I2C接收到倒数第二个字节时,用户需要处理EV7_1事件,以便在最后一个数据接收后发出非应答信号和结束信号,结束此次接收过程。图10.28主机接收数据(7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年土地整治项目土地抵押合同范例3篇
- 2024年某物业管理公司与某小区关于物业服务合同
- 房屋租赁合同模板合集五篇
- 七年级第一学期生物教案模板
- 跟岗实习工作总结范文
- 举行春游活动方案
- 配音比赛策划书
- 店长述职报告15篇
- 学生竞选演讲稿怎么写才能吸引人?【5篇】
- 投标承诺书集锦15篇
- 沪教牛津版五年级下册英语全册课件
- 北京大学简介介绍PPT模板
- 湘艺版 四年级上册音乐教案- 第十课 我心爱的小马车
- 前置胎盘的手术配合课件
- 鱼骨图模板1PPT课件
- 中国动画之经典赏析PPT课件
- 浙江省杭州市2021-2022学年九年级(上)期末科学试题【含答案】
- T∕CAMDI 041-2020 增材制造(3D打印)定制式骨科手术导板
- 实施农村客运公交化改造推进城乡客运一体化发展
- 【双人相声剧本搞笑校园】有关2人校园搞笑相声剧本
- 【图文】化学纤维质量检验标准
评论
0/150
提交评论