s3c2410-第二十二章 SPI(串行外围设备接口)
- 格式:pdf
- 大小:137.54 KB
- 文档页数:7
串行外设接口(SPI)总线解析及应用
串行外设接口(SPI)总线是一个工作在全双工模式下的同步串行数据链路。
它可用于在单个主控制器和一个或多个从设备之间交换数据。
其简单的实施方案只使用四条支持数据与控制的信号线(图1):
虽然表1 中的引脚名称来自摩托罗拉开发的SPI 标准,但具体集成电路的SPI 端口名称往往与图1 中所示的不同。
图1:基本SPI 总线
表1:SPI 引脚名称分配
SPI 数据速率一般在1 到70MHz 的范围内,字长为从8 位及12 位到这两个值的倍数。
数据传输一般由数据交换构成。
在主控制器向从设备发送数据时,从设备也向主控制器发送数据。
因此主控制器的内部移位寄存器和从设备都采用环形设置(图2)。
图2:双移位寄存器形成一个芯片间的环形缓存器
在数据交换之前,主控制器和从设备会将存储器数据加载至它们的内部移位寄存器。
收到时钟信号后,主控制器先通过MOSI 线路时钟输出其移位寄存器的MSB。
同时从设备会读取位于SIMO 的主控器第一位元,将其存储在存储器中,然后通过SOMI 时钟输出其MSB。
主控制器可读取位于MISO 的从设备第一位元,并将其存储在存储器中,以便后续处理。
整个过程将一直持续到所有位元完成交换,而主控器则可让时钟空闲并通过/SS 禁用从设备。
一、SPI接口简介SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。
SPI有三个寄存器分别为:控制寄存器SPCR,状态寄存器SPSR,数据寄存器SPDR。
外围设备FLASHRAM、网络控制器、LCD显示驱动器、A/D 转换器(如图一所示)和MCU等。
图一、ADC中的SPI二、SPI接口一个典型的SPI模块的核心部件是一个8位的移位寄存器和一个8位的数据寄存器SPIDR。
通过SPI进行数据传送的设备有主SPI和从SPI之分,即SPI传送在一个主SPI和一个从SPI之间进行。
图二给出了两个SPI模块相互连接、进行SPI传送的示意图,图左边是一个主SPI,图右边为一个从SPI。
图二、典型SPI示意图在AN-877应用笔记中,对spi的接口定义与典型spi接口有所不同,AN-877使用一根线SDIO代替了典型SPI的MISO和MOSI,SS接口用CSB代替。
图三和图四分别是双线模式下单器件控制(主从一对一)和双线模式下多器件控制(主从一对多)。
图三:主从一对一控制图四:主从一对多控制但是原理都一样。
主从机之间一般由3个引脚组成:串行时钟引脚(SCLK)、串行数据输入/输出引脚(SDIO)、片选引脚(CSB)。
1、引脚数据输入/输出(SDIO):该引脚用作数据的输入/输出,用作输入还是用作输出具体取决于所发送的指令(读或写)以及时序帧中的相对位置(指令周期或数据周期)。
在读或写的第一个阶段,该引脚用作输入,将信息传递到内部状态机。
如果该命令为读命令,状态机把该引脚(SDIO)变为输出,然后该引脚将数据回传给外部控制器。
如果该命令为写命令,该引脚始终用作输入。
串行时钟(SCLK):SCLK由外部控制器提供,时钟频率最高为25MHZ。
所有数据的输入输出都是与SCLK同步的。
输入数据在SCLK的上升沿有效,输出数据在SCLK的下降沿有效。
s3c2410中文手册简介S3C2410 是一种嵌入式处理器,由韩国三星电子公司设计和制造。
它是一款高度集成的 ARM 架构芯片,广泛应用于各种移动设备中,如智能手机、平板电脑、PDA 等。
本手册将详细介绍 S3C2410 芯片的特性、功能和使用方法,帮助开发人员更好地理解和应用该芯片。
芯片特性S3C2410 芯片具有以下主要特性:1.ARM920T 内核: S3C2410 芯片采用了 ARM920T 内核,它是一种高性能、低功耗的 32 位 RISC 处理器。
ARM920T 内核支持 ARMv4T 指令集,并具有强大的计算和处理能力。
2.高度集成的外设: S3C2410 芯片内集成了许多常用的外围设备,包括 UART、SPI、I2C、PWM 等。
这些外设可满足各种应用需求,简化了系统设计和连接。
3.多种接口: S3C2410 芯片提供了丰富的接口,如LCD 控制器、触摸屏控制器、SDIO 控制器等。
这些接口允许连接各种外部设备,如显示屏、输入设备、存储卡等,实现更丰富的功能。
4.低功耗设计: S3C2410 芯片采用先进的低功耗设计技术,具有很低的静态功耗和动态功耗。
这使得它非常适合于移动设备,延长了电池寿命。
芯片功能GPIOS3C2410 芯片提供了多个 GPIO 管脚,用来实现输入和输出功能。
GPIO 管脚可以通过软件配置为输入模式或输出模式,并可以设置电平状态。
开发人员可以利用GPIO 实现各种功能,如控制 LED 灯、读取按键状态等。
UARTS3C2410 芯片内集成了多个 UART 模块,用于串口通信。
每个 UART 模块都提供了数据传输和接收的功能,并支持多种通信协议,如 RS232、RS485 等。
开发人员可以使用 UART 实现与外部设备的串口通信。
LCD 控制器S3C2410 芯片具有强大的 LCD 控制器,支持多种显示模式和分辨率。
LCD 控制器可以控制显示屏的像素点,实现图形显示和文字显示功能。
SPI协议串行外设接口协议的解析SPI(Serial Peripheral Interface)协议是一种串行外设接口协议,常用于在微控制器和外部设备之间进行数据通信。
本文将对SPI协议的基本原理、通信格式以及常见应用进行解析。
一、SPI协议概述SPI协议是一种同步的全双工通信协议,其核心思想是通过使用四根线(片选信号、时钟、输入数据、输出数据)来实现设备之间的通信。
SPI可以同时支持单主机和多从机的通信方式,能够实现高速数据传输,并且相对简单易用。
二、SPI工作原理SPI工作在主-从模式下,一个主设备可以与一个或多个从设备进行通信。
SPI协议中的主设备控制时钟信号,指示数据传输的开始和结束,从设备根据时钟信号来读取或写入数据。
SPI通信时,主设备通过选择片选信号来选择要与其通信的从设备。
三、SPI通信格式1. 时钟极性(CPOL)和相位(CPHA):SPI通信协议的时钟极性和相位可以根据设备的要求进行设置,以适应不同设备的通信模式。
CPOL定义了在空闲状态下(时钟未激活)时钟信号的电平,高电平或低电平;CPHA定义了数据采样的时机,以时钟的上升沿还是下降沿为准。
2. 数据位顺序:SPI通信中数据传输的位顺序可以是LSB(Least Significant Bit,最低有效位)或MSB(Most Significant Bit,最高有效位)。
3. 传输速度:SPI通信的速度由主设备的时钟频率控制,可以根据从设备的要求和系统的稳定性来进行设置。
四、SPI应用场景SPI协议广泛应用于各种外设和传感器之间的通信,以下是几个常见的应用场景:1. 存储器芯片:SPI协议被广泛应用于存储器芯片(如Flash和EEPROM)和微控制器之间的通信,实现数据的读写操作。
2. 显示模块:很多液晶屏和OLED显示模块都采用SPI协议与主控制器进行通信,传输图像数据和命令。
3. 传感器:许多传感器(如温度传感器、加速度传感器等)通过SPI协议与控制器进行数据传输,实现实时数据采集和处理。
S3C2410中文手册:SPI总线SPI总线概述S3C2410的串行外设接口SPI可以进行串行数据传输接口。
S3C2410具有两个SPI,每个SPI具有两个8位移位寄存器用于独立地发送和接收数据。
在SPI传输过程中,数据时同时发送和接收的(全双工),8位串行数据传输频率由相应的控制寄存器设置,如果希望仅发送数据,则接收数据can be dummy,同样如果只希望接收数据,则应该发送dummy '1' data。
有4个与SPI传输相关的引脚:SCK (SPICLK0,1)、MISO (SPIMISO0,1)数据线、MOSI (SPIMOSI0,1) 数据线、SS (nSS0,1)-低电平有效。
特性— SPI 2.11版协议兼容8位发送移位寄存器—— 8位接收移位寄存器— 8位预定标器逻辑Polling、中断、DMA传输模式—方框图图22-1 SPI方框图SPI操作使用SPI接口,S3C2410能够与外部设备同时收发8位数据。
一个串行时钟线SCK用于同步两根数据线来以为和采样信息。
当SPI为主机时,可以通过设置SPPREn寄存器的适当的位来控制传输频率,你可以通过调整波特率寄存器的值修改它的的频率。
如果SPI是从机,由另外的主机提供时钟。
当用户向SPTDATn寄存器中写入数据时,SPI接收/发送操作将同步开始。
某些情况下,nSS应该在数据写入SPTDATn之前有效。
编程流程当一个数据被写入SPTDATn寄存器时,如果ENSCK和SPCONn寄存器中的MSTR位被置位,则启动数据发送。
可以根据如下步骤对SPI模块进行编程:1. 设置波特率预定标器寄存器SPPREn2. 设置SPCONn来恰当地配置SPI模块3. 向SPTDATn写入10次0XFF来初始化MCC或SD卡4. 设置作为nSS的GPIO,配置为低电平使MCC或SD卡生效5. Tx数据—>检查Transfer Ready flag (REDY = 1)的状态,然后向SPTDATn写入数据。
S3C2410 I2C总线接口Ø I2C(Inter-Integrated Circuit)总线 是由Philips半导体公司于上世纪80年为了 实现在同一块电路板上的各个器件进行简 单的消息传递而设计的。
Ø 开始信号:SCL为高电平时,SDA由高 电平向低电平跳变,开始传送数据Ø 结束信号:SCL为高电平时,SDA由低电平向 高电平跳变,结束传送数据Ø 传输状态与空闲状态:当SCL为高电平 时,保持SDA高电平(或低电平)不变 ,那么I2C总线保持在传输状态或者空 闲状态。
Ø 应答信号:接收数据的组件在接收到 8bit数据后,向发送数据的I2C器件发 出特定的低电平脉冲,表示已收到数 据。
Ø 2. I2C总线的操作 Ø 控制字节 在起始条件之后,必须是器件的 控制字节,其中高四位为器件类型识别符 (不同的芯片类型有不同的定义),接着 三位为片选,最后一位为读写位,当为1时 为读操作,为0时为写操作。
Ø 写操作 分为“字节写”和“页面写”两种操作。
对于页面写,根据芯片的一次装载的字节 不同有所不同。
Ø 读操作 有三种基本操作:当前地址读、随 机读和顺序读三种。
Ø 3. I2C总线地址地址 0000000 0 0000000 1 0000001 X 0000010 X 0000011 X 00001XX X 11110XX X 11111XX X 用途 广播地址 起始字节 CBUS 地址(一种三线总线,和 I2C 不同) 保留地址,或者用做其他总线 保留地址 高速主设备地址(第三位用来确定主设备) 10 位地址模式 保留地址S3C2410 I2C总线功能模块 Ø S3C2410支持多主控的I2C串行总线接口。
Ø 一条专门的串行数据线(SDA)和一条时 钟信号线(SCL)在所有连接到I2C总线上 的主控组件和周边设备之间进行信息的传 送。
第二十二章SPI(串行外围设备接口)22.1概述S3C2440A的SPI接口可以接口串行数据传输。
S3C2440A包括两个SPI接口,每个接口分别有两个8位的数据移位器用于发送和接收。
在SPI发送期间,数据同时发送(串行移出)和接收(串行移入)。
在某个频率下的8位串行数据由相应的控制寄存器设置决定。
如果你仅想发送,接收数据可以保持缄默。
另外如果你只想接收,你应该发送缄默数据1。
22.2特点-支持两个通道的SPI-兼容SPI协议(2.11版本)-8位发送移位寄存器-8位接收移位寄存器-8位预定标器-查询,中断和DMA传输模式-容忍5V输入,除nSS22.3模块图22.4SPI操作使用SPI接口,S3C2440A可以和外部设备接收发送8位数据。
一个串行时钟线来同步两个用于信息移位和采用的数据线。
当SPI是主机时,传输频率通过设定SPPREn寄存器的相应位来控制。
你可以修改其频率来调节波特率数据寄存器的值。
如果SPI是从属,其他的主机提供时钟。
当程序员写字节数据到SPTDATn寄存器时,SPI发送接收操作会同时开始。
在这种情况下,在写字节数据到SPTDATn之前,nSS应该被激活。
22.4.1编程步骤当一个字节的数据写入SPTDATn寄存器,如果ENSCK、SPCONn寄存器的MSTR被置位,SPI开始发送。
你可以使用一个典型的编程步骤来操作SPI卡。
对SPI模块编程,按照一下基本步骤(1)时钟波特率预定标器寄存器(SPPREn)(2)设置SPCONn来合理配置SPI模块(3)写数据0xFF到SPTDATn10次,目的是初始化MMC或SD卡。
(4)设置一个GPIO引脚,其作为nSS,低电平是激活MMC或SD卡。
(5)发送数据->检查传输准备标志(REDY=1)的状态,然后写数据到SPTDATn(6)接收数据(1):SPCONn的TAGD位是无效=normal mode->写0xFF到SPTDATn,然后确认REDY置1,然后从读缓存读取数据(7)接收数据(2):SPCONn的TAGD位是有效=Tx Auto Garbage Data mode ->确认REDY置1,然后从读缓存读取数据(然后自动开始传输)(8)设置一个GPIO引脚,其作为nSS,高电平是解除激活MMC或SD卡。
22.4.2SPI传输格式S3C2440A支持4种不同格式来传输数据。
如图22-2所示对于SPICLK的四种波形。
22.4.3对于DMA的发送步骤(1)SPI配置为DMA模式(2)DMA作相应配置(3)SPI请求DMA服务(4)DMA发送1个字节数据到SPI(5)SPI发送数据到卡(6)返回步骤3直到DMA计数器为0(7)SPI配置SMOD位为中断或查询模式22.4.4对于DMA的接收步骤(1)SPI配置为有SMOD位的DMA开始和TAGD位置1(2)DMA做相应的配置(3)SPI从卡接收1个字节的数据(4)SPI请求DMA服务(5)DMA从SPI接收数据(6)知道写数据0xFF到SPTDATn(7)返回步骤4直到DMA计数为0(8)SPI配置为有SMOD位的查询模式和清除TAGD位(9)如果SPSTAn的READY标志置位,则读最后一个字节数据注:总的接收数据=DMA TC值+查询模式下的最后数据(步骤9)第一个DMA接收数据是无效的,用户可以忽略掉。
22.5SPI特殊寄存器(1)SPI控制寄存器(SPCONn)(2)SPI状态寄存器(SPSTAn)(3)SPI引脚控制寄存器(SPPINn)(4)SPI波特率预定标器寄存器(SPPREn)(5)SPI发送数据寄存器(SPTDATn)(6)SPI接收数据寄存器(SPRDATn)22.5.1SPI控制寄存器SPI CONTROL REGISTER(SPCONn)寄存器地址读写描述复位值SPCON00x59000000R/W SPI通道0控制寄存器0x00SPCON10x59000020R/W SPI通道1控制寄存器0x00 SPCONn位描述初始值SPI Mode Select (SMOD)[6:5]决定SPTDAT如何读写00=查询模式01=中断模式10=DMA模式11=reserved00SCK Enable (ENSCK)[4]决定SCK是否使能(仅对主机)0=无效1=有效Master/Slave Select(MSTR)[3]决定主从模式0=从1=主Note:在从模式下,应该留有时间给主机初始化发送接收Clock Polarity Select(CPOL)[2]决定高态有效或低态有效时钟0=高态有效1=低态有效Clock Phase Select(CPHA)[1]从两个基本不同的传输格式中选一0=格式A1=格式BTx Auto Garbage Data mode enable (TAGD)[0]决定是否需要正在接收的数据0=normal mode1=Tx auto garbage data mode注:在正常模式下,如果你仅想接收数据,你可以改传输无效数据0xFF22.5.2SPI 状态寄存器SPI STATUS REGISTER (SPSTAn )22.5.3SPI 引脚控制寄存器SPI PIN CONTROL REGISTER (SPPINn )当SPI 系统使能,除nSS 外引脚的方向由SPCONn 寄存器的MSTR 位控制。
nSS 的方向始终为输入。
当SPI 为主机时,nSS 引脚用于检测多主机错误,提供SPPIN 的ENMUL 位是激活的,其他GPIO 应该用于选择从设备。
如果SPI 配置为从设备,nSS 引脚用来选择SPI 为另一个主设备的从设备。
SPIMISO (MISO )和SPIMOSI (MOSI )数据引脚是用来接收和发送串行数据。
当SPI 配置为主设备,SPIMISO (MISO )是主数据输入线,SPIMOSI (MOSI )是主数据输出线,SPICLK (SCK )是时钟输出线。
当SPI 为从设备,这些引脚翻转角色。
在一个多主机系统中,SPICLK (SCK )、SPIMISO (MISO )和SPIMOSI (MOSI )引脚分别捆绑配置成组。
当另一个SPI 设备工作在主设备状态并选择S3C2440A SPI 为从设备,一个主SPI 将经历多主机错误。
当错误被检测时,接下来的措施被立即执行。
但是如果你想检测这个错误,你必须预先设置SPPINn 的ENMUL 位。
(1)在从模式下SPCONn 的MSTR 位被强制设置为0来操作寄存器地址读写描述复位值SPSTA00x59000004R/W SPI 通道0状态寄存器0x01SPSTA10x59000024R/W SPI 通道1状态寄存器0x01SPCONn位描述初始值保留[7:3]Data CollisionError Flag (DCOL)[2]如果当传输在过程中且通过读SPSTAn 清除,写SPTDAT 或读SPRDATn ,则该标志置位。
0:不检测1:冲突错误检测Multi Master Error Flag (MULF)[1]如果当SPI 配置为主机时nSS 信号为低态有效,该标志置位。
0:不检测1:多主机错误检测0Transfer Ready Flag (REDY)[0]该位是指SPTDATn 或SPRDATn 准备发送或接收。
写数据到SPTDATn 该位自动清除。
0:不准备1:数据接收发送准备1寄存器地址读写描述复位值SPPIN00x59000008R/W SPI 通道0引脚控制寄存器0x00SPPIN10x59000028R/W SPI 通道1引脚控制寄存器0x00SPPINn 位描述初始值保留[7:3]Multi Master error detect Enable (ENMUL)[2]当SPI 系统是主设备,nSS 引脚用作输入来侦测多主机错误0:无效(通用目的)1:多主机错误侦测使能0保留[1]保留0Master Out Keep (KEEP)[0]决定MOSI 驱动或当1个字节发送完成时释放(仅对主机)0:释放1:驱动先前电平1(2)SPSTAn 的MULF 标志置位,且产生SPI 中断。
22.5.4SPI 波特率预定标器寄存器SPI BAUD RATE PRESCALER REGISTER (SPPREn )注:波特率应该小于25MHz 。
22.5.5SPI 发送数据寄存器SPI TX DATA REGISTER (SPTDATn )22.5.6SPI 接收数据寄存器SPI RX DATA REGISTER (SPRDATn )寄存器地址读写描述复位值SPPRE00x5900000C R/W SPI 通道0波特率预定标器寄存器0x00SPPRE10x5900002CR/WSPI 通道1波特率预定标器寄存器0x00SPPREn 位描述初始值Prescaler Value[7:0]决定SPI 时钟率波特率=PCLK /2/(Prescaler 的值+1)0x00寄存器地址读写描述复位值SPTDAT00x59000010R/W SPI 通道0发送数据寄存器0x00SPTDAT10x59000030R/W SPI 通道1发送数据寄存器0x00SPTDATn 位描述初始值Tx Data Register[7:0]该区域包含通过SPI 通道发送的数据0x00寄存器地址读写描述复位值SPRDAT00x59000014R/W SPI 通道0接收数据寄存器0xFF SPRDAT10x59000034R/W SPI 通道1接收数据寄存器0xFFSPRDATn 位描述初始值Rx Data Register[7:0]该区域包含通过SPI 通道接收到的数据0xFF。