基于S5PC100裸机程序之SPI(上)
作者:杨老师,华清远见嵌入式学院讲师。
SPI作为应用最为广泛的通信总线协议之一,开发人员应当掌握,本章将介绍SPI总线协议的基本理论,以及S5PC100的SPI总线控制器的操作方法。
1. SPI总线协议理论
1.1 协议简介
SPI是英文Serial Peripheral Interface的缩写,该协议是由美国摩托罗拉公司推出的一种同步串行传输规范,首先由摩托罗拉公司在其MC68HCXX系列处理器上定义,后主要应 用在 EEPROM、FLASH、实时时钟、AD转换器,还有数字信号处理器和数字信号解码器之间。
SPI是一种高速的全双工、同步的通信总线,并且在芯片的引脚上只占用四根线,节约了芯片的引脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。
1.2 协议内容
SPI有4个引脚:CS(从器件选择线)、SDO(串行数据输出线)、SDI(串行数据输入线)和SPICLK(同步串行时钟线)。
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,这些脚的定义如下:
(1)SDO(MOSI)——主设备数据输出,从设备数据输入。
(2)SDI(MISO)——主设备数据输入,从设备数据输出。
(3)SPICLK——时钟信号,由主设备产生。
(4)CS——从设备使能信号,由主设备控制。
其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。这就使在同一总线上连接多个SPI设备成为可能。其中总线协议时序如图1所示。
图1 SPI总线协议时序
接下来就是负责通信的3根线了。通信是通过数据交换完成的,这里先要知道SPI是串行通信协议,也就是说数
据是一位一位地传输的。这就是SPICLK时钟线存在的原因,由SPICLK提供时钟脉冲,SDO、SDI则基于此脉冲完成数据传输。数据输出通过
SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取,完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变
(上沿和下沿为一次)后,就可以完成8位数据的传输。
要注意的是,SPICLK信号线只由主设备控制,从设备不能控制信号线。同样在一个基于SPI的设备中,至
少有一个主控设备。这样传输的特点:这样的传输方式有一个优点,即其与普通的串行通信不同,普通的串行通信一次连续传送至少8位数据,而SPI允许数据一
位一位地传送,甚至允许暂停,因为SPICLK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SPICLK时
钟线的控制可以完成对通信的控制。SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。不同的SPI设备
的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义。
在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从设备的系统中,每个从设备需要独立地使能信号,在硬件上要比I2C总线控制稍微复杂一些。
注意:
SPI的一个缺点是没有指定的流控制,没有应答机制确认是否接收到数据。
SPI
控制器为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大影响。如果
CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传
输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样,如图2所示;如果CPHA=1,在串行同步时钟的第
二个跳变沿(上升或下降)数据被采样,如图3所示。SPI主控制器和与之通信的外设时钟相位和极性应该一致,另外,上面提到这些特性将在寄存器中具体实
现。
图2 CPHA=0时的情况
图3 CPHA=1时的情况
2 SPI控制器详解
2.1 S5PC100的SPI控制器简介
S5PC100包含了两套8位、16位、32位移位寄存器用于收发。在SPI传输数据时,数据的发送及接收数据是同步的,该总线控制器支持摩托罗拉串行外设接口。
下面是该控制器的特性:
全双工通信方式。
8位、16位、32位移位寄存器。
3时钟源供应。
支持8位、16位、32位总线接口。
支持摩托罗拉SPI协议。
支持两个独立的传输及接收FIFO。
支持主机模式及从机模式。
无法传送条件下接收。
Tx/Rx频率最大支持50MHz。
2.2 时钟源控制
每个SPI都能获得不同的3个时钟源,用户可以根据自己的需要来进行配置,需要设置CLK_CFG这个寄存器,后面将会介绍。
时钟控制器如图4所示。
图4 时钟控制器
2.3 寄存器详解
如表-1所示为SPI配置寄存器。
表1 SPI配置寄存器
MODE_CFGn | 位 | 描述 | 复位值 |
CH_WIDTH | [30:29] | 00 = 字节 01 = 半字 10 = 字 11 = 保留 |
0 |
TRAILING_CNT | [28:19] | 接收FIFO中最后写入字节的个数 | 0 |
BUS_WIDTH | [18:17] | 00 = 字节 01 = 半字 10 = 字 11 = 保留 |
0 |
如表2所示为时钟配置寄存器。
表2 时钟配置寄存器
MODE_CFGn | 位 | 描述 | 复位值 |
CH_WIDTH | [30:29] | 00 = 字节 01 = 半字 10 = 字 11 = 保留 |
0 |
TRAILING_CNT | [28:19] | 接收FIFO中最后写入字节的个数 | 0 |
BUS_WIDTH | [18:17] | 00 = 字节 01 = 半字 10 = 字 11 = 保留 |
0 |
如表3所示为SPI模式配置寄存器。
表3 SPI模式配置寄存器
CLK_CFGn | 位 | 描述 | 复位值 |
SPI_CLKSEL | [10:9] | 时钟源选择 00 = PCLK 01 = SCLK_SPI_48 10 = SCLK_SPI 11 = 保留 |
0 |
ENCLK | [8] | 时钟使能 0 = 禁止 1 = 使能 |
0 |
SPI_SCALER | [7:0] | SPI时钟分频值 SPI 时钟输出 =时钟源 /(2 x(预分值 +1)) |
0 |
如表4所示为SPI数据发送寄存器。
表4 SPI数据发送寄存器
SPI_TX_DATAn | 位 | 描述 | 复位值 |
TX_DATA | [31:0] | 该寄存器包含了所要发送的数据 | 0 |
表5所示为SPI数据接收寄存器。
表5 SPI数据接收寄存器
SPI_RX_DATAn | 位 | 描述 | 复位值 |
RX_DATA | [31:0] | 该寄存器包含了所要接收的数据 | 0 |
如表6所示为SPI状态寄存器。
表6 SPI状态寄存器
SPI_STATUSn | 位 | 描述 | 复位值 |
TX_DONE | [21] | 0 = 其他情况 1 = 发送移位寄存器准备 |
0 |
RX_FIFO_LVL | [19:13] | RX FIFO 0 ~ 64 字节 | 0 |
TX_FIFO_LVL | [12:6] | TX FIFO 0 ~ 64 字节 | 0 |
RX_OVERRUN | [5] | Rx Fifo 溢出错误 0 =无误 1 = 溢出错 |
0 |
RX_UNDERRUN | [4] | 0 = 无误 1 = 数据缺失 | 0 |
TX_OVERRUN | [3] | Tx Fifo 溢出错误 0 =无误 1 = 溢出错 |
0 |
TX_UNDERRUN | [2] | 0 = 无误 1 = 数据缺失 | 0 |
3 SPI接口应用示例
这里将介绍一种通过SPI通信的Flash,该芯片是M24PXX,如图5所示为该芯片的原理图,每根接线的意义已经清楚地标识出来了。
图5 M25PXX原理图
这一款芯片内部集成了12条指令,包括了通用的读、写、配置等命令,还有一个内置的状态寄存器,可以通过该寄存器获取芯片当前状态。
文章来源:华清远见嵌入式学院,原文地址:http://www.embedu.org/Column/Column884.htm
基于S5PC100裸机程序之SPI(上)的更多相关文章
- ok6410[002] ubuntu1604系统下搭配ckermit和dnw基于RAM的裸机程序调试环境
ubuntu1604系统下搭配ckermit和dnw基于RAM的裸机程序调试环境 系统: ubuntu16.04 裸板: 飞凌公司OK6410开发板 目标:搭建基于ubuntu1604系统和基于RA ...
- 基于KEIL4开发ARM9(S3C2440)的裸机程序
本文主要介绍如何使用Keil4开发ARM9(S3C2440)裸机程序. 说明: 一.平台: 操作系统:Windows XP系统 KEIL版本:4.73 开发板:ARM9(S3C2440) 二.建立工程 ...
- 一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库 RxJava,相当好
https://github.com/ReactiveX/RxJava https://github.com/ReactiveX/RxAndroid RX (Reactive Extensions,响 ...
- ARM入门实践(一)----Mini6410上最简单的LED点灯裸机程序
Mini6410上最简单的LED点灯裸机程序 : 实验环境: 根据友善教程,要用ADS,据说现在都不用这个了,但是为了打开友善给的mcp工程,就下了一个,Win7下弄上兼容模式和管理员权限,再下一个S ...
- MDK972-EK开发板裸调试设置和裸机程序烧写(转)
硬件平台:MDK972-EK开发板编译调试软件:KEIL uVision4仿真工具:JLINK V7/V8 本例子从串口输出信息,如图: KEIL uVision4调试设置如图所示: ...
- tiny4412 裸机程序 八、重定位到DRAM及LCD实验【转】
本文转载自:http://blog.csdn.net/eshing/article/details/37407423 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 一 ...
- 基于Caffe的DeepID2实现(上)
小喵的唠叨话:小喵最近在做人脸识别的工作,打算将汤晓鸥前辈的DeepID,DeepID2等算法进行实验和复现.DeepID的方法最简单,而DeepID2的实现却略微复杂,并且互联网上也没有比较好的资源 ...
- Resumable.js – 基于 HTML5 File API 的文件上传
Resumable.js 是一个 JavaScript 库,通过 HTML5 文件 API 提供,稳定和可恢复的批量上传功能.在上传大文件的时候通过每个文件分割成小块,每块在上传失败的时候,上传会不断 ...
- EB-SAM9G45裸机程序下载方法
开发板:EB-SAM9G45 这里提供一种裸程序下载的方法. 在官方提供的下载方法中有手动下载和自动下载,它们都离不开SAM-BA软件,而该软件使用比较麻烦,而且操作不当很容易导致电脑蓝屏,还有一个很 ...
随机推荐
- [Eclipse] Eclipse配置Tomcat插件
1 . Eclipse IDE 3.6 for Java EE Developersat- 5.5.28 或者以上版本 : 2 . 安装 Tomcat 插件 , 文件名: tomcatPluginV3 ...
- 函数fseek() 用法(转)
在阅读代码时,遇到了很早之前用过的fseek(),很久没有用了,有点陌生,写出来以便下次查阅. 函数功能是把文件指针指向文件的开头,需要包含头文件stdio.h fseek 函数名: fseek ...
- 在Salesforce中实现对Object的增删改查操作
1): Insert Statement http://www.salesforce.com/us/developer/docs/apexcode/index_Left.htm#CSHID=ap ...
- 【jQuery 冻结任意行列】冻结任意行和列的jQuery插件
实现原理: 创建多个div,div之间通过css实现层叠,每个div放置当前表格的克隆.例如:需要行冻结时,创建存放冻结行表格的div,通过设置z-index属性和position属性,让冻结行表格在 ...
- 【maven + hibernate(注解) +spring +springMVC】 使用maven搭建项目
研究,百度,查资料+好友帮助,使用MyEcplise2015工具,通过maven搭建hibernate+springMVC+spring的项目,数据库采用MySql5.5 不过使用的版本会在项目搭建过 ...
- Js图片切换
<!DOCTYPE html><html<head> <meta charset="UTF-8"> <title></t ...
- jquery尺寸:宽度与高度
width() 方法设置或返回元素的宽度(不包括内边距.边框或外边距). height() 方法设置或返回元素的高度(不包括内边距.边框或外边距). innerWidth() 方法返回元素的宽度(包括 ...
- poj2184 01背包变形,价值为可为负数
题目链接:http://poj.org/problem?id=2184 题意:每行给出si和fi,代表牛的两个属性,然后要求选出几头牛,满足S与F都不能为负数的条件下,使S与F的和最大. tips:动 ...
- express-19 路由2
组织路由 在主应用程序文件中定义所有路由太笨重了.那样不仅会导致那个文件一直增长,还不利于功能的分离,因为那个文件里已经有很多东西了. 四条组织路由的指导原则 给路由处理器用命名函数: 到目前为止,我 ...
- Xamarin Andro教程搭建Xamarin Androidid开发环境(一)
Xamarin Andro教程搭建Xamarin Androidid开发环境(一) "工欲善其事,必先利其器".对于程序员来说,编程的环境就是其手中的利器.如果没有一个合适方便的编 ...