在利用数字机顶盒收看数字电视节目时,为了满足不同用户的需要,保证每个用户的利益,需要采用条件接收系统管理用户的权限并确保用户的正常收看。而在机顶盒中,通常使用智能卡技术实现条件接收。
智能卡有自己的微处理器、存储器和一个与机顶盒通信的接口。采用智能卡实现条件接收的优势在于:它具有高度的安全性和保密性,主要用于存储用户的私人密钥、控制授权、保密算法等信息,可以保证整个数字电视系统的安全。
本文主要讨论智能卡与机顶盒之间的通信。机顶盒中的主芯片一般都提供与智能卡通信的接口,利用相应的硬件和通信协议,就可以实现它们之间的正常通信。在本文中,机顶盒芯片采用ST公司的Sti5516。由于Sti5516提供的智能卡接口需要外接一个接口芯片才能与智能卡通信,所以还采用了Philips公司的TDA8004T芯片。整个硬件框图如图1 所示。
图1 机顶盒与智能卡通信的硬件框图
1 Sti5516的智能卡接口
Sti5516支持智能卡接口——异步收发控制器(UART),用于实现Sti5516与二个智能卡控制器的通信。异步收发控制器支持全双工异步通信,接收器与发送器使用相同的数据格式和波特率。数据的传输和接收可以是双BUFFER,也可以是16位FIFO。通信过程中奇偶校验位、数据位、停止位都是可编程的。同时,在传输和接收中的错误觉察增强了数据传输的稳定性,UART与智能卡的握手协议确保了数据传输的安全性。Sti5516有一个智能卡时钟产生器,提供给智能卡一个时钟信号。智能卡使用这个时钟驱动智能卡与UART之间的通信。这个时钟也用于智能卡CPU时钟。智能卡接口操作要求卡的时钟可以调整,这样波特率可以改变,时钟的调整可以根据ISO7816标准。Sti5516提供的智能卡接口支持T=0、T=1协议。2 TDA8004T介绍
TDA8004T提供了一个低成本的异步智能卡接口,可用于电子付费、读卡器、付费电视等。它可以取代智能卡与微控制器之间的一些外部元器件,提供微控制器与智能卡之间稳定、低噪音并符合ISO-7816 标准的通信接口[1]。其原理结构图如图2所示。
图2 TDA8004原理结构图
3 通信协议
在Sti5516与智能卡的通信过程中,本文采用了T=0协议。
T=0协议是异步半双工字节传输协议[2],即协议所处理的最小单位是单个字节。通信命令总是由接口设备启动,以命令报头通知卡做什么,并且允许在卡发出的过程字节的控制下传输数据字节。命令报头由连续的5个字节组成,这5个字节指定为CLA、INS、P1、P2、P3。其中CLA为指令类别,INS为指令类别中的指令代码,P1、P2为一个完成指令代码的参考符号(例如地址),P3由一个可变长度的条件体组成。条件体包括命令数据域长度字节Lc、命令数据域和响应返回的最大长度字节Le。根据不同的命令,条件体的组成也不相同。这样,在一个5字节命令报头传输后,接口设备等待一个或者两个过程字节。过程字节的值将指明接口设备请求的动作。如果过程字节的值与INS字节相同,表示接口设备向卡发送或者从卡接收所有数据;如果与INS字节的补码相同,表示接口设备向卡发送或者从卡接收下一个字节;如果为0x60,表示延长等待时间;如果为0x61,表示接口设备等待第二个过程字节,并根据第二个过程字节发送命令取回数据;如果为0x6c,表示接口设备等待第二个过程字节,并根据第二个过程字节重发上一条命令。如果过程字节是0x90、0x00,表示通信成功完成[2~3]。
4 通信的实现
在实际通信过程中,本文将工作频率定为3.57MHz,保证数据传输的波特率为9600bps。数据格式采用带奇偶校验的8个数据位和2个停止位,如图3所示。
图3 数据格式
在机顶盒与智能卡发送数据和接收数据的过程中,使用了Sti5516智能卡接口UART的驱动。因此在进行通信之前首先要对UART初始化。初始化之后,进行卡的复位应答,如果应答正确才能与卡通信。
根据T=0协议的定义,机顶盒与智能卡通信的流程图如图4所示。
图4 机顶盒与智能卡通信的流程图
5 调试经验
(1) 在写智能卡接口UART的驱动时,必须按照T=0协议标准配置工作频率、数据传输波特率和数据格式;
(2) 在确保卡的复位应答正确后,才能进行卡与机顶盒的通信;
(3) 命令报头的传送一般是有一定的先后顺序的,在测试过程中,需要按照顺序发送命令报头,才能正常接收数据;
(4) 判断过程字节和条件体形式时,一定要按图4所描述的,考虑仔细、全面,以免通信错误。
由于目前大多数智能卡支持T=0协议,所以本文主要介绍了基于T=0协议的机顶盒与智能卡之间的通信。在此基础上,以后可以实现基于T=1协议的通信,以便支持更多的智能卡。