七、串行口

Download Report

Transcript 七、串行口

Communications
通信基础知识
 通信方式的几个要素
 串行、并行(Serial/parallel)
 同步、异步(Synchronous/asynchronous)
 点对点、总线(Point-to-point/bus)
 半双工、全双工(Half-duplex/full-duplex)
 主从式、对等式(Master-slave/equal partners)
 单端信号、差分信号(Single-ended/differential)
微控制器开发技术
Lecture4 Page 1
通信基础知识-characteristics
Communications
——
串行、并行
 串行通信




数据按位传输
通信方只需要很少的连接 – resource/pin efficient
速度较慢,传输信息少
传输距离较远
 并行通信




数据按字节/字传输
通信方需要多个连接信号-- difficult for PCB routing
传输速度快
传输距离较短
你接触过哪些串行/并行通信?
微控制器开发技术
Lecture4 Page 2
通信基础知识-characteristics
Communications
——
同步、异步
 同步通信
 接收方可以得到发送方的通信时钟信号
 传输速率高
 异步通信
 发送方和接收方使用独立的时钟来处理通信信号
 通信双方约定通信速率
 通信中需要约定起始/停止位或定义特殊的帧结构
 传输速率较低
微控制器开发技术
Lecture4 Page 3
通信基础知识-characteristics
Communications
——
拓扑结构
 点对点
 通信线路上只有两个通信方
 不需要寻址
 总线
 通信线路上有多个通信方
 需要建立寻址机制
微控制器开发技术
Lecture4 Page 4
通信基础知识-characteristics
Communications
——
半双工、全双工
 半双工
 不能同时进行发送和接收
 一方发送时,其他通信方只能处于接收状态
 需要额外的逻辑来控制发送和接收状态的切换
 有发生冲突的危险
 全双工
 通信端可以同时进行发送和接收
 需要两个独立的通信通道
 使用简单,数据传输率高
对讲机?电话机?
微控制器开发技术
Lecture4 Page 5
通信基础知识-characteristics
Communications
——
主从式、对等式
 主从式
 只有主端可以发起数据传输
 从端等待主端的允许才能传输数据
 对等式
 任何节点可以发起数据传输
 需要建立冲突检测和仲裁机制
微控制器开发技术
Lecture4 Page 6
通信基础知识-characteristics
Communications
——
单端、差分信号
 单端信号
 信号幅度以地电平作为参考
 通信双方必须建立共同的参考地电平
 干扰造成的信号幅度变化可能导致错误解释
 差分信号
 每个信号使用两根线传输,信号的值由两个线上的电
平的差值表示
 通信方不需要共同的参考地
 对干扰抑止能力强
 传输速率高
微控制器开发技术
Lecture4 Page 7
微控制器常见的通信类型
总线类型
线数
通信类型
多主 波特率(bps)
器件数
目
总线长度
UART
2
异步
No
3K-1M
2
*
SPI
3
同步
Yes
1M-10M
<10
板内
I2C
2
同步
Yes
~1M
<10
板内
CAN
2
异步
Yes
20K-1M
128
百米~公
里
LIN
1
异步
No
<20K
16
几十米
微控制器开发技术
Lecture4 Page 8
Tsinghua Freescale Embedded System Center
www.tsinghua-mot.net
by AlexGong [email protected]
10.2 同步串行外设接口SPI
单片机原理及应用
本节提要
一、SPI概述
二、SPI模块功能
三、SPI模块引脚
四、SPI模块寄存器
五、SPI模块编程范例
微控制器开发技术
Lecture4 Page 10
本节提要
一、SPI概述
二、SPI模块功能
三、SPI模块引脚
四、SPI模块寄存器
五、SPI模块编程范例
微控制器开发技术
Lecture4 Page 11
SPI 特性
 可设置主机模式 / 从机模式
 可选择8位或16位数据宽度
 可选择全双工模式 ( 一个)或单线双向模式
 可灵活设置的时钟极性和相位
 可选择从最高位或最低位开始传送
 可编程的传送速率
 可实现双缓存操作
 与LCD驱动器, D/A 转换器, RTC,EEPROM等通信
接口简单;
微控制器开发技术
Lecture4 Page 12
SPI的数据流动
微控制器开发技术
Lecture4 Page 13
SPI工作原理
IO端
7
CPU端
0
MOSI
7
0
MISO
重复8次
IO端
7
CPU端
0
MOSI
7
0
MISO
微控制器开发技术
Lecture4 Page 14
本节提要
一、SPI概述
二、SPI模块功能
三、SPI模块引脚
四、SPI模块寄存器
五、SPI模块编程范例
微控制器开发技术
Lecture4 Page 15
SPI 方框图
移位寄存器
SPI 时钟发生器
控制寄存器
微控制器开发技术
Lecture4 Page 16
主机模式
控制整个数据传送
通过定义SS 选择通信从机
确定SCK 波特率,相位和极性
切换SCK 脉冲
驱动MOSI信号
采样MISO信号
通过写入SPIDR触发传输过程
微控制器开发技术
Lecture4 Page 17
从机模式
响应传输
仅当定义了相应的SS才被激活
利用事先定义的相位和极性检测SCK跳变沿
驱动MISO信号
采样MOSI信号
微控制器开发技术
Lecture4 Page 18
本节提要
一、SPI概述
二、SPI模块功能
三、SPI模块引脚
四、SPI模块寄存器
五、SPI模块编程范例
微控制器开发技术
Lecture4 Page 19
SPI 引脚1 —— 串行数据引脚
MOSI — Master Out/Slave In Pin
MISO — Master In/Slave Out Pin
作用:发送和接收串行数据
 SPI置为主机模式:MISO – 数据输入线
MOSI – 数据输出线
 SPI置为从机模式:MISO – 数据输出线
MOSI – 数据输入线
.
微控制器开发技术
Lecture4 Page 20
SPI 引脚2 —— 串行时钟
SCK — Serial Clock Pin
同步信号,对MOSI和MISO引脚传输的串行输入、输出数据进行同步
 主机模式下,SCK信号来源于内部MCU总线时钟
 主机和从机在SCK信号的跳变沿进行移位和采样数据
 SCK的时钟频率由SPI0BR选择
 主机和从机遵守相同时序模式
.
微控制器开发技术
Lecture4 Page 21
SPI 信号 – SCK极性 & 相位
SCK奇数跳变沿驱动,偶数跳变沿采样
微控制器开发技术
Lecture4 Page 22
SPI 信号 –SCK极性 & 相位(续)
SCK偶数跳变沿驱动,奇数跳变沿采样
微控制器开发技术
Lecture4 Page 23
SPI 引脚3 —— 外设片选
SS — Slave Select Pin
主机和从机对SS引脚使用不同
 主机模式:SS信号上拉到高电平
 从机模式:SS信号为低电平
.
微控制器开发技术
Lecture4 Page 24
本节提要
一、SPI概述
二、SPI模块功能
三、SPI模块引脚
四、SPI模块寄存器
五、SPI模块编程范例
微控制器开发技术
Lecture4 Page 25
SPI 寄存器 1/4
SPICR1 - SPI 控制寄存器 1
1 = SPI IS MASTER
0 = SPI IS SLAVE
1 = SPI Transmit Interrupt Enable
0 = SPI Transmit Interrupt Disabled
1 = SPI SYSTEM Enabled
0 = SPI SYSTEM Disabled
1 = SPI Interrupt Enabled
0 = SPI Interrupt Disabled
1 = SPI LSB FIRST
0 = SPI MSB FIRST
DDRS7 SSOE
0
0
0
1
1
1
0
1
MASTER MODE
SS INPUT
(MODF Enabled)
GP INPUT
GP OUTPUT
SS OUTPUT
SLAVE MODE
SS INPUT
SS INPUT
SS INPUT
SS INPUT
SPICR2 - SPI 控制寄存器 2
MODFEN - Mode Fault Enable
0 = Mode Fault Disabled
1 = Mode Fault Enabled
BIDIROE - Output Enable in Bidirectional mode
0 = Output Buffer Disabled
1 = Output Buffer Enabled
微控制器开发技术
SPISWAI = SPI Stop in Wait Mode
1 = HALT SSI CLOCK WHEN
CPU IN WAIT MODE
Lecture4 Page 26
SPI 寄存器 2/4
练习: 20M 总线时钟, 最大 SPI 波特率 = ?
最小SPI 波特率 = ?
微控制器开发技术
Lecture4 Page 27
SPI 寄存器 3/4
SPISR - SPI 状态寄存器
SPRF - SPI 接收中断标志
1 = New is received into SPIDR
SPTEF - SPI 发送缓存空中断标志
1 = SPI Data Register is Empty
微控制器开发技术
MODF –主机模式错误标志
1 = SPI Master was selected as Slave
Lecture4 Page 28
SPI 寄存器 4/4
SPI Data Register(SPIDR = SPIDRH:SPIDRL) - SPI 数据寄存器
注: 用户仅当SPI发送缓冲空标志置位时才能写入该寄存器.
注: 发送数据与接收数据使用相同寄存器
微控制器开发技术
Lecture4 Page 29
本节提要
一、SPI概述
二、SPI模块功能
三、SPI模块引脚
四、SPI模块寄存器
五、SPI模块编程范例
微控制器开发技术
Lecture4 Page 30
SPI模块编程范例
 SPI模块编程方法
① SPI初始化:先写SPI0BR,设定SPI波特率;再写控
制寄存器SPI0CR1和SPI0CR2,设定时钟的极性、
相位、SPI数据传输宽度、SPI工作模式、中断允许
位,并使能SPI模块
② SPI收发数据:通过查询SPI0SR中的状态位或采用
中断方式,读写数据寄存器,完成数据收发。
微控制器开发技术
Lecture4 Page 31
SPI模块编程范例(续1)
 SPI模块编程范例
1. SPI初始化
//SPI初始化函数
void SPI_Init()
{
SPI0BR=0x44; //设定波特率
SPI0CR1=0x5C; //关闭SPI中断,置SPI主机模式,使能SPI模块
SPI0CR2=0x00; //数据传输宽度为8位,即一个字节
}
微控制器开发技术
Lecture4 Page 32
SPI模块编程范例(续2)
2. SPI收发数据
//SPI发送一个字节的函数
//参数:send_data为待发送的1字节数据
void SPI_send_char(unsigned char send_data)
{
while((SPI0SR&0x20)==0);
SPI0DRL=send_data;
}
//SPI接收一个字节的函数
//返回:接收的1字节数据
unsigned char SPI_rev_char(void)
{
while((SPI0SR&0x80)==0);
return SPI0DRL;
}
微控制器开发技术
Lecture4 Page 33
SPI驱动数码管显示的典型应用
硬件连接:
教材P80:
1.MCU的MOSI(17)接164的A脚(1)
2.MCU的SCK(18)接164的CLK脚(8)
3.164的B(2)和/MR(9)接+5V
4.164的Q0~Q7,接数码管的a~DP
板上12、11、10、9、8、7、6、5、4、 3、 2、1
1 位、a 、 f 、2、3、b、4、g、c、DP、d、e
微控制器开发技术
Lecture4 Page 34
74LS164原理
符号
引脚
说明
DSA
1
数据输入
DSB
2
数据输入
Q0~Q
3
3~6
输出
GND
7
地 (0 V)
CP
8
时钟输入(低电平到高电平边沿触发)
/M/R
9
中央复位输入(低电平有效)
Q4~Q
7
10~1
3
输出
VCC
14
正电源
微控制器开发技术
Lecture4 Page 35
SPI驱动数码管显示的典型应用
软件:
见3-SPI练习程序
微控制器开发技术
Lecture4 Page 36
异步串行通信(SCI)
通信基础知识
异步串行通信协议RS-232标准
SCI功能简介
SCI寄存器
SCI软件开发方法
SCI应用程序示例
SCI
RS232 standard
EIA RS-232-C
美国电子工业协会正式公布的异步串行通信标准,也是目前最常用的异步串行通信标准,
用来实现计算机与计算机之间、计算机与外设之间的数据通信
RS-232-C电平采用负逻辑,即,逻辑1:-3~-25V,逻辑0:+3~+25V (需要电平转换)
RS-232-C接口标准有22根线,采用标准25芯D型插头座;PC上使用简化的9芯D型插座
多种通信应答(握手)方式: 硬件握手,自应答,XON/XOFF模式
波特率: 300bps ~ 4Mbps, 物理层有多种实现方式(铜缆,光缆,红外,无线,微波)
起始位/停止位/数据位/奇偶校验/全双工半双工模式
广泛应用: Modem,20mA电流环,RS485
个人计算机都有标准的RS232接口,驱动程序,超级终端
RS232 standard
RS232 standard
 简化的9芯D型接头信号定义(硬件流量控制)

DTE
3
2
5
7
8
6
9
4
TxD
RxD
GND
RTS
CTS
DSR
DCD
DTR
DCE
out
in
out
in
in
in
out
TxD Transmit Data
RxD Receive Data
GND
RTS Require To Send
CTS Clear To Send
DSR Data Set Ready
DCD Data Care Detected
DTR Data Terminal Ready
RS232 standard
简化的9芯D型接头信号定义(自应答方式)
DTE / DCE
2 TxD
3 RxD
7 GND
4 RTS
5 CTS
6 DSR
8 DCD
20 DTR
out
in
out
in
in
in
out
TxD
RxD
GND
RTS
CTS
DSR
DCD
DTR
(Transmit Data )
(Receive Data)
(Ground)
(Require to Send)
(Clear to Send)
(Data Terminal Ready)
(Data Carry Detected)
(Data Set Ready)
Ready always, or XON/XOFF protocol, ASCII only!
RS232 standard
简化的9芯D型接头信号定义(无应答方式)
1
2
3
5
6
7
8
9
4
protection ground
RxD in
TxD out
GND
DSR in
RTS out
CTS in
DCD in
DTR out
RxD
TxD
GND
DSR
RTS
CTS
DCD
DTR
(Receive Data)
(Transmit Data )
(Ground)
(Data Terminal Ready)
(Require to Send)
(Clear to Send)
(Data Carrier Detected)
(Data Set Ready)
No Handshake, should use XON/XOFF protocol,ASCII only
RS232 standard
TTL level vs. RS232 level
RS232 standard
TTL level vs. RS232 level
RS232 standard
DB9
RS232标准(1962)
出现的比TTL(1964)
还早
需要接口转换芯片
RS232
MAX232
TTL/CMOS
Microcontroller
UART
Frame format
0
idle
start LSB
1
2
3
4
5
6
7
8
MSB Parity stop (stop)
idle
 NRZ (not return zero) encoding
 Several configurable parameters
 Baud rate, #data bits, parity, #stop bits
 Nomenclature: 9600,N81
 LSB- Least significant bit
 MSB- Most significant bit
Start/stop 位
接受端需要明确数据帧的边界,即该帧从
什么时候开始,什么时候结束。
数据位传送之前,都要发送START 位
(always ‘0’) (从空闲状态开始的下降沿,是
START位的开始)
在数据位传送结束后,还要传送STOP位
(always ‘1’).
数据位识别
接受端在其时钟上升沿采样数据线电平,
以识别数据位的高低状态。
What is the data transmitted above?
数据位识别
Tx_clk
TxD
传输过程会引起信号的延迟,会引入外部干扰导致的噪声及毛刺
RxD
Rx_clk
SCI(UART)-oversampling
- 通信双方有约定的通信速率(波特率)
- 接受端按照16倍波特率的频率对信号进行"over samples"
- 使用其中3个采样结果,通过3取2的机制确定实际的信号电平状态
- 如果3个采样结果不一致,noise标志会置起
- 接受端在总线进入空闲状态后,通过监测下降沿,启动对起始位的判断,从
而开始整个数据帧的接受。
SCI(UART)-oversampling
SCI- 波特率
波特率: bits per second
Question1: 按照9600,N81的通信参数,每
秒可以传送多少个字节?
Hints: don’t forget the start/stop bits.
Question2: 对于一个总线频率为16MHz的
微控制器,其SCI最高支持的波特率是多少?
波特率误差容限
10
Transmitter
9
1
Receiver
0
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
1
1
16*(1+8) +9
 接受端必须能正确的识别整个数据帧,从起始位到停止位
9Ttx < (153/16)Trx <10Ttx
clock difference tolerance
~5%
校验位
校验位附加在数据帧末尾,用于检查传输过程
中是否发生了数据位错误。
start LSB
MSB Parity stop
Parity bit
偶校验 -- 所有数据位和校验位中,1的数目是偶数
奇校验 --所有数据位和校验位中,1的数目是奇数
 Example:
what is the even parity for “10011100”
what is the odd parity for “01010110”
SCI 可能产生的事件
- Tx Empty
- Tx Complete
- Rx Full
- Idle
- Rx Overrun
- Noise Error
- Framing Error
- Parity Error
(IRQ)
(IRQ)
(IRQ)
(IRQ)
(IRQ)
SCI 故障
Framing Error: 在数据帧结尾没有收到正确
的停止位
Receiver overrun: 下一个数据到达时,上
一个数据还没有被处理
Parity Error: 接受的校验和与协议规定的不
匹配.
So, are we clear about UART?
Let’s play a game!
I need one volunteer
This volunteer will be a UART sender, all
your students will be UART receivers.
LSB first
Protocol is 1,N81 (1bit per second)
Hand-raise is ‘1’, hand-down is ‘0’
SCI – 双缓冲寄存结构
Transmitter:
Receiver:
DATA IN
P
A
R
I
T
Y
G
E
N
.
T8
DATA
IN
TDR BUFFER
SHIFT REGISTER
DATA
OUT
SHIFT REGISTER
R8
RDR BUFFER
DATA OUT
发送和接受都具有双缓冲结构
CPU不能读写移位缓冲寄存器
CPU仅能访问数据寄存器
.
P
A
R
I
T
Y
C
H
E
C
K
SCI – 缓冲结构
 发送时,数据自动从数据寄存器转移到移位寄存器
 接受时,数据自动从移位寄存器转移到数据寄存器
 发送和接受的数据寄存器使用相同的寄存器地址
 读写该寄存器地址具有不同的含义!
Question: what’s the function of the instructions below
.
while(1){
asm LDAA SCI0DR
asm STAA SCI0DR
}
Transmitter block diagram
Tx data
register
Shift register
Tx clock gen
Note the ÷16
Parity gen
Interrupt
request gen
Control logic
Receiver block diagram
Rx data
register
Rx clock gen
shift register
Control logic
SCI(UART)
SCI Registers 1/5
SCIBH/L
- SCI Baud Rate Control Register
24M bus clock
Bus clock
1 ~ 8191
Exercise1:
9600bps wanted, BR = ?
BDH = ? BDL = ?
Exercise2:
the maximum baud rate = ?
必须连续写入BDH和BDL寄存器,仅仅写入BDH没有作用。
SCI Registers 2/5
SCCR1
- SCI Control Register 1
Address Offset
$0002
1 = EVEN PARITY
0 = ODD PARITY
1 = PARITY Enabled
0 = PARITY Disabled
1 = NORMAL IDLE TIME
0 = SHORT IDLE TIME
SCISWAI - SCI Stop in Wait mode
0 = Normal operation
1 = SCI Disabled in Wait mode
1 = IDLE LINE WAKE-UP
0 = ADDRESS MARK WAKE-UP
1 = 9-BIT DATA
0 = 8-BIT DATA
SCI Registers 3/5
SCICR 2
- SCI Control Register 2
TIE - Transmitter Interrupt Enable
1 = Transmitter IRQ Enabled
0 = Transmitter IRQ Disabled
ILIE - Idle Line Interrupt Enable
1 = IDLE IRQ Enabled
0 = IDLE IRQ Disabled
RWU - Receiver Wake-up
1 = Enter Receiver Wake-UP
0 = Exit Receiver Wake-UP
TCIE - Transmit Complete Interrupt Enable
1 = Transmitter Complete IRQ Enabled
0 = Transmitter Complete IRQ Disabled
TE _ Transmitter Enable
1 = Transmitter Enabled
0 = Transmitter Disabled
SBK - Send Break
1 = Send Break
0 = Terminate Break
RIE - Receiver Interrupt Enable
1 = Receiver IRQ Enabled
0 = Receiver IRQ Disabled
RE Receiver Enable
1 = Receiver Enabled
0 = Receiver Disabled
SCI Registers 4/5
SCISR 1
- SCI Status Register 1
RDRF: Receive data Register Full
TC : Transmit Complete
TDRE: Transmit data register empty
SCISR 2
- SCI Status Register 2
BRK13 - Break Transmit Character Length
0 = Break Char is 10 or 11 bits long
1 = Break Char is 13 or 14 bit long
TXDIR - Transmitter pin direction
0 = TxD pin is input in Single-Wire mode
1 = TxD pin is output in Single-Wire mode
RAF - Receiver Active Status
1 = Receiver Active
0 = Receiver not Active
SCI Registers 5/5
SCIDRH/L
- SCI Data Register High/Low
Note: R8 and T8 are used when 9-bit char is required
Notice: same register for both transmit data and receive data
SCI programming
Put_Char
BRCLR SCI0SR1,#$80,*
STAB
SCI0DRL
RTS
void Put_Char(char c)
{
while ( (SCI0SR1 & 0x80) == 0);
SCI0DRL = c;
}
SCI programming
Get_Char
BRCLR SCI0SR1,$20,*
LDAB SCI0DRL
RTS
char Get_Char(void);
{
while ((SCI0SR1 & 0x20) == 0);
return(SCI0DRL);
}