STM8智能卡
设置UART_CR5寄存器的SCEN位选择智能卡模式。在智能卡模式下,下列位必须保持清零:
- UART_CR3寄存器的LINEN位
- UART_CR5寄存器的HDSEL位和IREN位
此外,CLKEN位可以被设置,以提供时钟给智能卡。
注意:该功能只适用于UART1和UART2。
智能卡接口设计成支持ISO7816-3标准所定义的异步协议智能卡。UART应该被设置为8位数据位加校验位和1.5位停止位。当智能卡模式使能时(寄存器UART_CR5的SCEN位置1),UART可以与异步智能卡通讯。
(图112:STM8_ISO7816-3异步协议)
当与智能卡相连接时,UART的TX根智能卡共同驱动一根双向通讯线。
STM8智能卡是一个单线半双工通信协议
- 从发送移位寄存器把数据发送出去,要被延时最小1/2波特时钟。在正常操作时,一个满的发送移位寄存器将在下一个波特时钟沿开始向外移出数据。在智能卡模式里,此发送被再延迟1/2波特时钟。
- 如果在接收一个设置为1.5停止位的数据帧期间,检测到一个校验错误,在1/2波特时钟周期后,发送线被拉低一个波特时钟周期。这是告诉智能卡发送到UART的数据没有被正确接收到。此NACK信号(拉低发送线一个波特时钟周期)在发送端会识别为一个帧错误(发送端被配置成1.5个停止位)。应用程序可以根据协议处理重新发送的数据。如果NACK控制位被置1,发生校验错误时接收器就会给出一个NACK信号;否则就不会发送NACK。
- TE位必须通过置1来使能
- 数据发送
- 在校验错误发生时,发送应答
当向数据寄存器写入新数据时,必须由软件来管理数据发送时间以避免数据线上的冲突。
- RE位必须置1来使能
- 数据接收(由智能卡或者UART发送)
- 侦测在校验错误发生时发送的应答
- 对保护时间寄存器编程会使得TC标志置1的时间点推后。在正常操作时,当发送移位寄存器变空并且没有新的发送请求出现时,TC被置1。在STM8智能卡模式里,空的发送移位寄存器将触发保护时间计数器开始向上计数,直到计到等于保护时间寄存器中的值。TC在这段时间被强制拉低。当保护时间计数器达到保护时间寄存器中的值时,TC被置高。
- TC标志的撤销不受智能卡模式的影响。
- 如果发送器检测到一个帧错误(收到接收器的NACK信号),发送器的接收功能模块不会把NACK当作起始位检测。根据ISO协议,接收到的NACK的持续时间可以是1或2波特时钟周期。
- 在接收器这边,如果一个校验错误被检测到,并且NACK被发送,接收器不会把NACK检测成起始位。
- 智能卡I/O的输出使能信号可以使能对双向信号线的驱动,这条线路同时也由智能卡驱动。在发送起始位,数据位和NACK信号的时候,该信号有效。在发送停止位的时候,该信号被禁用,这样UART在双向信号线上的状态为弱上拉信号"1"。
注意:1.断开符号在智能卡模式里没有意义。一个带帧错误的00h数据将被当成数据而不是断开符号。
2.当来回切换TE位时,没有IDLE帧被发送。ISO协议没有定义IDLE帧。
图113详述了UART是如何采样NACK信号的。在这个例子里,UART正在发送数据,并且被配置成1.5个停止位。为了检查数据的完整性和NACK信号,UART的接收功能块被激活。
(图113:STM8使用1.5停止位检测奇偶检验错)
UART可以通过UART_CK输出为智能卡提供时钟。在STM8智能卡模式里,UART_CK不和通信直接关联,而是先通过一个位预分频器简单地用内部的外设输入时钟来驱动智能卡的时钟。分频系数在预分频寄存器UART_PSCR中配置。UART_CK频率可调整的范围是从fMASTER/2到fMASTER/62,这里的fMASTER是外设输入时钟。