© 2005 Texas Instruments Inc、Slide 1
新型的高性能双通信模块—USCI
Thomas Kot
德州仪器MSP430资深市场工程师
thomas-kot@ti.com
© 2005 Texas Instruments Inc、Slide 2
会议议程
• USCI 介绍
• UART/LinBUS 异步模式
• SPI 同步模式
• I2C 同步模式
• 选择正确的总线
• 设备选择
• 模块的同时工作
© 2005 Texas Instruments Inc、Slide 3
通用串行通信 I/F
• 超低功耗
LPMx 工作
• 2 个独立块
• 双缓存 TX/RX
• RX 干扰抑制
• 波特率发生器
灵活的时钟源
自动检测
生成
• 启用 DMA
• 中断驱动
© 2005 Texas Instruments Inc、Slide 4
特性概览
• 新型
MSP430 串行接口
• 两个相互独立的通信块
• 异步通信模式
UART 标准与多处理器
带自动波特率检测的 UART(LIN 支持)
IrDA(SIR——低红外,最大 115k 波特)
LPMx 唤醒
• 同步通信模式
SPI(主从模式,3 或 4 线)
I2C(主从模式)
LPMx 工作
© 2005 Texas Instruments Inc、Slide 5
USCI 与 USART 的差异
USART
• UART
仅一个调制器
N/A
N/A
N/A
• SPI
仅提供一个 SPI
• I2C
复杂特性
USCI
• UART
两个调制器可支持 n/16 计时
自动波特率检测功能:LIN
集成式 IrDA 编码器与解码器
同步 USCI_A/USCI_B
• SPI
双 SPI:USCI_A 与 B 各一个
• I2C
经简化,方便易用
© 2005 Texas Instruments Inc、Slide 6
USCI_A
USCI_A
Baudrate Generator
IrDA Decoder
SPI
UART
Transmit Shift Register
Transmit Buffer
UC0TXBUF IrDA Encoder
Receive Buffer UC0RXBUF
Receive Shift Register
UCA0TXD
UCA0RXD
• 支持 IrDA/LIN 或 SPI 的 UART
• 双缓存 TX/RX
• 可自动检测波特率的波特率发生器
© 2005 Texas Instruments Inc、Slide 7
USCI_B
USCI_B
I2C
Bitclock Generator
SPI
Transmit Shift Register
Transmit Buffer
UC1TXBUF
I2C Bus
Interface
Receive Buffer UC1RXBUF
Receive Shift Register
UCB0SIMO
UCB0SOMI
• I2C 主/从,最大 400kHz,或 SPI
• 比特时钟发生器
• 双缓存 TX/RX
© 2005 Texas Instruments Inc、Slide 8
USCI_A UART 模式
Receiver Shift Register
Transmit Shift Register
RXBUF
TXBUF
Baud-Rate Generator
Auto baud rate detect
Start Edge
Clock
RXD
TXD
• 超低功耗
• 灵活
7 或 8 位数据
奇、偶或非奇偶
LSB 或 MSB 优先
干扰抑制
• 通信
IrDA
多处理器
自动波特 (S/W LIN)
•中断驱动
故障检测
TX/RX
© 2005 Texas Instruments Inc、Slide 9
UART 波特率生成器
• 低功耗低频率模式
可使用较慢的时钟
n/8 调制器
最大波特率 1/3 BRCLK
大多数情况 3x BITCLK
• 16x 过采样模式
准标准 UART、LIN、IrDA
n/16 调制器
最大波特率 1/16 BRCLK
大多数情况 16x BITCLK
• 灵活的时钟源
外部 UCA0CLK 输入
ACLK
SMCLK
© 2005 Texas Instruments Inc、Slide 10
32KHz XTAL实现 UART 9600 波特率通信
9600 波特率:
BRCLK = ACLK = 32768 Hz
Baud = 32768/9600 = 3.41
BR1 | BR0 | MCTL = 00h 03h 06h: modulation wraps around after 8 bits
BITCLK = ACLK/3 /4 /3 /4 /3 /4 /3 /3 /3 /4 . . .
D0 D1 D2 D3 D4 D5 D6 D7ST ST
© 2005 Texas Instruments Inc、Slide 11
过采样模式波特率
• 双调制器
• 用 BITCLK16 进行 RX 采样
• BITCLK16 支持 IrDA TX 脉
冲发生
• 准标准 UART、IrDA & LIN
15-Bit Prescaler/Divider
BR0
BITCLK16
BR1
87
BRFx
16
BRCLK
/16
2nd Modulator BITCLK
BRSx
8
1st Modulator
LSB
© 2005 Texas Instruments Inc、Slide 12
UART 超低功耗工作
• 从 LPMx 唤醒
• 如果 LPMx 关闭 BRCLK 源,则 RX 起始沿或自动写入
TXBUF 可打开内部 BRCLK 源
• BRCLK 源在 LPMx 中的 TX 或 RX 终点后关闭
• 无需软件处理
• 瞬时开启的时钟避免了丢字符的损失
• LPM3 模式中,SMCLK 可支持高波特率!
LPMx 操作为什么重要?
© 2005 Texas Instruments Inc、Slide 13
演示:在起始沿上唤醒 LPM3
• LPM3 中115.2 kbps 采用 DCO/FLL 作为时钟源
SetupUSCIA mov.b #UCSWRST,&UC0CTL1 ; module reset
bis.b #UCSSEL1,&UC0CTL1 ; SMCLK
mov.b #0x09,&UC0BR0 ; 115k at 1048576Hz
mov.b #0x00,&UC0BR1 ;
mov.b #0x08,&UC0MCTL ; modulation values
bic.b #UCSWRST, &UC0CTL1 ; state m/c start
bis.b #UC0RXIE, &IE2 ; enable RXinterrupt
Mainloop bis.b #LPM3+GIE,SR ; enter LPM3, enable
; interrupts
USCI01RX_ISR //Function: Echo received character
bit.b #UC0TXIFG,&IFG2 ; TX buffer ready?
jz TX0 ; jump if not ready
mov.b &UC0RXBUF,&UC0TXBUF ; RX -> TX
TX0 reti ;
SetupUSCIA mov.b #UCSWRST,&UC0CTL1 ; module reset
bis.b #UCSSEL1,&UC0CTL1 ; SMCLK
mov.b #0x09,&UC0BR0 ; 115k at 1048576Hz
mov.b #0x00,&UC0BR1 ;
mov.b #0x08,&UC0MCTL ; modulation values
bic.b #UCSWRST, &UC0CTL1 ; state m/c start
bis.b #UC0RXIE, &IE2 ; enable RXinterrupt
Mainloop bis.b #LPM3+GIE,SR ; enter LPM3, enable
; interrupts
USCI01RX_ISR //Function: Echo received character
bit.b #UC0TXIFG,&IFG2 ; TX buffer ready?
jz TX0 ; jump if not ready
mov.b &UC0RXBUF,&UC0TXBUF ; RX -> TX
TX0 reti ;
© 2005 Texas Instruments Inc、Slide 14
UART 通信协议
[2nd Stop Bit]
[Parity Bit]
[Address Bit]
[8th Data Bit]
ST D0 D6 D7 AD PA SP SP
• 支持四种通信协议
标准
闲置线路多处理器
地址位多处理器
LIN 的自动波特率检测
• 标准协议
带故障检测的标准 UART 通信
© 2005 Texas Instruments Inc、Slide 15
UART 错误检测
• 干扰抑制器滤掉 RX bit level < de-glitch time
• 自动错误检测
帧错误 FE
如停止位在接收帧中缺失,则设置 FE =1
奇偶校验错误 PE
如接收帧中存在奇偶不匹配,则设置 PE=1
接收溢出错误 OE
如 RXBUF 被覆盖,则设置 OE =1
中断条件 BRK
如接收帧中所有位为 0,则设置 BRK=1,
如对 BRKIE 与 RXIFG 进行设置=1 ,则 BRK=1
• UART 经编程后,仅向 RXBUF 传输无错误的字符
© 2005 Texas Instruments Inc、Slide 16
UART 闲置线路多处理器
• 闲置线路多处理器协议
如停止位后出现连续 10 个周期的标志,则检测到闲置。
闲置后的第一个字符是地址
可对 UART进行编程,仅接收地址字符
Idle periods of 10 bits or more
Address DataST SP ST SP DataST SP
UC0TXD/UC0RXD
A D D A D A D D D
© 2005 Texas Instruments Inc、Slide 17
UART 地址位多处理器
0Address DataST SP ST SP DataST SP01
Characters with AD bit =1
are Address bytes
Characters with AD bit =0
are Data bytes
Idle periods are of no significance
A D D A D A D D D
UC0TXD/UC0RXD
• 地址位多处理器协议
接收字符中的额外位状态标记为地址字符
可对 UART 进行编程,仅接收地址字符
© 2005 Texas Instruments Inc、Slide 18
UART 自动波特率检测
• 自动波特率检测协议
波特率是由有效的 SYNC 计算出来的
自动波特率值存储在 BR1、BR0 和调制器位中
硬件BREAK 超时检测
可编程的DELIMITER时间
© 2005 Texas Instruments Inc、Slide 19
UART LIN 支持
• 汽车本地互连网络
•
UART 自动波特率检测
• LIN 模式 UART = 8 bit、LSB 优先、无奇偶位、1 停止位
• LIN 设备驱动程序通过软件实施
• 需要外部 LIN 总线驱动
• 支持 LIN 从模式
根据接收到的 LIN break和synch 场‘0x55’ 进行break synch检测和自动波特
率测量
© 2005 Texas Instruments Inc、Slide 20
支持 LIN 主模式
• 支持LIN 主模式
自动break-synch生成
• 软件序列传输一个 LIN 主模式要求的中断同步字段
1. 选择自动波特率检测模式且 UCTXBRK = 1
2. DELIMx 指定break delimiter的长度,默认为 1 位周期
3. 检查 TXBUF 是否准备就绪,并向 TXBUF 写入 LIN synch ‘0x55h’
• 传输13 位间隔场后,然后是break delimiter和synch场
UCTXBRK 在同步载入 TX 移位寄存器后自动重设
写入 TXBUF 的数据正常传输
© 2005 Texas Instruments Inc、Slide 21
UART IrDA 支持
• 集成 IrDA 编码器和解码器
• 直接连接至外部 IR 模拟电路
• 32KHz 频率可产生 9.6kbps
• 接受脉冲过滤的数字滤波级
• 支持 IrDA 标准 3/16 位周期
脉冲
• IrDA 协议栈由软件实施
UART
IR Transmit
Formatter
IR Receive
Decoder
UART CLK
TX
RX
© 2005 Texas Instruments Inc、Slide 22
IrDA 编码器
• 可编程的发射机脉冲长度
• 过采样波特率发生器可选择 IrDA 标准 3/16 位长度
© 2005 Texas Instruments Inc、Slide 23
IrDA 解码器
• 可编程的高或低脉冲检测能支持两种类型的 IrDA 收发器
• 可编程的接收脉冲长度滤波器,增强了抗干扰的能力
• 上例演示了检测低脉冲的情况
© 2005 Texas Instruments Inc、Slide 24
USCI_A & USCI_B SPI 模式
Receive Shift Register
Transmit Shift Register
RXBUF
TXBUF
Master Bit Clock Generator
16-Bit Prescaler
BR1,BR0
BRCLK
SOMI
SIMO
CLK
Slave
Slave
• 灵活的接口
3 或 4 引脚 SPI
7 或 8 位数据长度
主或从
LSB 或 MSB 优先
• 软件可配置的时钟相位和极
性
• 可编程的 SPI 主时钟
• 双缓存 TX/RX
• 中断驱动 TX/RX
• 可启用 DMA
• LPMx 操作
© 2005 Texas Instruments Inc、Slide 25
SPI 连接
• 3 线模式支持主从模式
• 4 线主模式STE 防止与其他主设备发生冲突
• 4 线从设备中,TX 及 RX 用 STE 进行外部控制
© 2005 Texas Instruments Inc、Slide 26
USCI SPI 中断处理
• TX & RX ISR 建议流程
• USCI_A & USCI_B 共享 TX 向量和 RX 向量
• 软件检测 ISR 是否响应正确的事件
© 2005 Texas Instruments Inc、Slide 27
USCI_B I2C 模式
UCBxSCL
UCBxSDA
SCL
SDA
USCI
I2C Device A
• 超低功耗
LPMx 从接收器 START 检测
LPM4 中的从操作
• Philips 规范 2.1 版
7 和 10 位地址
支持多个主设备
从模式
高达 400kbps
• 中断驱动
无应答
判优丢失
启动/停止条件
TX/RX
I2C 方块示意图
• 集成前置分频器 (pre-scaler)
的比特时钟发生器
• 灵活的时钟选择
• 开漏输出,符合 I2C 标准
• 从LPMx 返回后自动工作
© 2005 Texas Instruments Inc、Slide 28
© 2005 Texas Instruments Inc、Slide 29
I2C 状态的中断处理
• I2C工作状态的辨别标志
ALIFG 仲裁丢失标志
NACKIFG 未接收到应答的标志
STTIFG 从模式启动条件的标志
STPIFG 从模式停止条件的标志
© 2005 Texas Instruments Inc、Slide 30
I2C 数据中断处理
• I2C传输标记
UCBxTXBUF 为空时 UCBxTXIFG置位
• I2C 接收标记
UCBxRXBUF 接收到字符UCBxRXIFG
置位
TX ISR
USCI_A
TXIFG ?
I2C
RXIFG?
USCI_A
TX ISR
Write TXBUF
Return
I2C RX ISR Return
I2C
TXIFG? I2C TX ISR Return
Return
YES
NO
YES
YES
NO
NO
© 2005 Texas Instruments Inc、Slide 31
USCI 中断
• USCI_A & USCI_B 共享 TX
& RX 中断矢量
• USCI_A flags
UART – TXIFG、RXIFG
SPI – TXIFG、RXIFG
• USCI_B 标志
SPI – TXIFG、RXIFG
I2C 状态 – ALIFG、NACKIFG、
STTIFG、STPIFG
I2C 数据 – TXIFG、RXIFG
© 2005 Texas Instruments Inc、Slide 32
常见的串行总线选项
• 异步
UART 半双工或全双工
最大波特率达 BRCLK/3
是否要求无线?考虑到 IrDA
网络化异步?考虑到 LIN
• 高速通信
SPI 模式
根据所选择的设备系列,可实施 4 或 8MHz 主模式
根据所选择的设备系列,可实施 8 或 16MHz 从模式
自然全双工增加吞吐量
• I2C 环境
符合 Philips v2.1 标准
最大支持 400kHz 的高速
主/从操作
支持多主设备环境
© 2005 Texas Instruments Inc、Slide 33
未来的 USCI 设备
• USCI_A = UART、IrDA、LIN 支持、SPI
• USCI_B = SPI、I2C
• USCI_C = UART、SPI
© 2005 Texas Instruments Inc、Slide 34
演示:同步工作的 USCI_A/USCI_B
USCI_A
UART
USCI_B
SPI
Hyperterminal
115.2kbps echo
TLV5619
DAC
3MHz
master
© 2005 Texas Instruments Inc、Slide 35
演示:USCI 配置
SetupUSCIA
mov.b #UCSWRST,&UC0CTL1 ; state machine reset
bis.b #UCSSEL1,&UC0CTL1 ; SMCLK
mov.b #0x34,&UC0BR0 ; 115k at 6029312Hz
mov.b #0x00,&UC0BR1 ;
mov.b #0x20,&UC0MCTL ; modulation values
bic.b #UCSWRST,&UC0CTL1 ; state machine start
SetupUSCIB
mov.b #SWRST,&UC1CTL1 ; state machine reset
mov.b #UCCKPL+UCCKPH+UCMSB+UCMST+UCSYNC,&UC1CTL0
; SPI-M,MSB,3-pin,CK-
mov.b #UCSSEL1,&UC1CTL1 ; SMCLK
mov.b #0x02,&UC1BR0 ; SMCLK/2
mov.b #0x00,&UC1BR1 ;
bic.b #SWRST,&UC1CTL1 ; state machine start
bis.b #UC0RXIE+UC1TXIE,&IE2; enable RX/TX int.
SetupUSCIA
mov.b #UCSWRST,&UC0CTL1 ; state machine reset
bis.b #UCSSEL1,&UC0CTL1 ; SMCLK
mov.b #0x34,&UC0BR0 ; 115k at 6029312Hz
mov.b #0x00,&UC0BR1 ;
mov.b #0x20,&UC0MCTL ; modulation values
bic.b #UCSWRST,&UC0CTL1 ; state machine start
SetupUSCIB
mov.b #SWRST,&UC1CTL1 ; state machine reset
mov.b #UCCKPL+UCCKPH+UCMSB+UCMST+UCSYNC,&UC1CTL0
; SPI-M,MSB,3-pin,CK-
mov.b #UCSSEL1,&UC1CTL1 ; SMCLK
mov.b #0x02,&UC1BR0 ; SMCLK/2
mov.b #0x00,&UC1BR1 ;
bic.b #SWRST,&UC1CTL1 ; state machine start
bis.b #UC0RXIE+UC1TXIE,&IE2; enable RX/TX int.
© 2005 Texas Instruments Inc、Slide 36
演示:USCI 中断子例程
USCIARX_ISR// Echo back RXed character, TXBUF ready?
TX0 bit.b #UC0TXIFG,&IFG2 ; TXBUF ready?
jz TX0 ; Jump if not ready
mov.b &UC0RXBUF,&UC0TXBUF ; RX -> TX
reti ;
USCIBTX_ISR// External DAC Sine table update
bic.b #0x01,&P3OUT ; FS reset
L1 bit.b #UC1TXIFG,&IFG2 ; USCI Transmit ready?
jnc L1 ;
mov.b Sin_tab(R6),&UC1TXBUF; load from sine table
incd.w R6 ;
and.w #0x3E,R6 ; only 32 words
L2 bit.b #UCBUSY,&UC1STAT ; USCI Transmit done?
jnz L2 ;
bis.b #0x01,&P3OUT ; FS set
reti ;
USCIARX_ISR// Echo back RXed character, TXBUF ready?
TX0 bit.b #UC0TXIFG,&IFG2 ; TXBUF ready?
jz TX0 ; Jump if not ready
mov.b &UC0RXBUF,&UC0TXBUF ; RX -> TX
reti ;
USCIBTX_ISR// External DAC Sine table update
bic.b #0x01,&P3OUT ; FS reset
L1 bit.b #UC1TXIFG,&IFG2 ; USCI Transmit ready?
jnc L1 ;
mov.b Sin_tab(R6),&UC1TXBUF; load from sine table
incd.w R6 ;
and.w #0x3E,R6 ; only 32 words
L2 bit.b #UCBUSY,&UC1STAT ; USCI Transmit done?
jnz L2 ;
bis.b #0x01,&P3OUT ; FS set
reti ;
© 2005 Texas Instruments Inc、Slide 37
为什么 USCI 不能发挥作用?
• 正确的 USCI_A 配置步骤
1. 置位 SWRST
2. 配置 USCI 寄存器
3. 清除 SWRST
4. 需要时启用中断
SetupUSCIA mov.b #UCSWRST,&UC0CTL1 ; module reset
bis.b #UCSSEL1,&UC0CTL1 ; SMCLK
mov.b #0x09,&UC0BR0 ; 115k at 1048576Hz
mov.b #0x00,&UC0BR1 ;
mov.b #0x08,&UC0MCTL ; modulation values
bic.b #UCSWRST, &UC0CTL1 ; state m/c start
bis.b #UC0RXIE, &IE2 ; enable RXinterrupt
SetupUSCIA mov.b #UCSWRST,&UC0CTL1 ; module reset
bis.b #UCSSEL1,&UC0CTL1 ; SMCLK
mov.b #0x09,&UC0BR0 ; 115k at 1048576Hz
mov.b #0x00,&UC0BR1 ;
mov.b #0x08,&UC0MCTL ; modulation values
bic.b #UCSWRST, &UC0CTL1 ; state m/c start
bis.b #UC0RXIE, &IE2 ; enable RXinterrupt
© 2005 Texas Instruments Inc、Slide 38
USCI:以一变应千变
• USCI 是 MSP430新标准的串行接口
• 两个相互独立的块可同时工作
• 所有模式都能从任意 LPMx 进行操作
• USCI 由中断驱动
• USCI 可启用 DMA
• USCI_A 支持 UART、IrDA、自动波特 LinBUS
• UART 集成了波特率发生器和调制器,可支持部分比特率
• USCI_B 支持 SPI、I2C
新型的高性能双通信模块—USCI
会议议程
通用串行通信 I/F
特性概览
USCI 与 USART 的差异
USCI_A
USCI_B
USCI_A UART 模式
UART 波特率生成器
32KHz XTAL实现 UART 9600 波特率通信
过采样模式波特率
UART 超低功耗工作
演示:在起始沿上唤醒 LPM3
UART 通信协议
UART 错误检测
UART 闲置线路多处理器
UART 地址位多处理器
UART 自动波特率检测
UART LIN 支持
支持 LIN 主模式
UART IrDA 支持
IrDA 编码器
IrDA 解码器
USCI_A & USCI_B SPI 模式
SPI 连接
USCI SPI 中断处理
USCI_B I2C 模式
I2C 方块示意图
I2C 状态的中断处理
I2C 数据中断处理
USCI 中断
常见的串行总线选项
未来的 USCI 设备
演示:同步工作的 USCI_A/USCI_B
演示:USCI 配置
演示:USCI 中断子例程
为什么 USCI 不能发挥作用?
USCI:以一变应千变