2110,7110,8210 IC卡驱动总结.doc
由于引进操作系统,导致系统实时性变差,鼓需要采用ISO7816控制器采样方式来进行IC卡驱动开发,目前2110,7110,8210的IC卡驱动采用统一架构。
其架构整体思想为:
1. 采用ISO7816控制器进行采样,这样不同CPU之间的ISO7816控制器特性及操作方式存在差异,但总体思想为定时器驱动状态机有序运转,故需要两个定时器资源,一个为状态机驱动定时及字符间超时记时(此为串行执行,可公用一个定时器),另一个专门为ATR总超时记时(需要与字符超时定时器并行计时)。
2. ISO7816控制器这块主要应用其硬收发数据功能,利用发送完成及发送空中断来推动发送数据及发送状态机(在发送状态机过程中没有发送超时及发送错误机制,但有重发超次机制退出状态机,故默认发送一定可以顺序发送出去,当出现发送不出去的情况可能引起阻塞从而导致假死机),利用接收完成中断来推动接收状态机,同时利用接收错误中断以及接收等待超时中断来确保在任何接收状态机中遇到异常情况可退出状态机,从而出现接收异常情况下能错误退出避免阻塞假死机。
3. 主要利用状态机驱动定时器中断服务函数来控制时序(包括上电时序及收发时序,处于复位还是PPS或者APDU状态切换)及ISO7816控制器功能配置及收发功能切换,以及字符接收超时错误处理(退出状态机);
4. 利用ISO7816 串口中断服务函数来进行数据发送及接收,以及接收错误及发送,接收超次处理(推出状态机);
2110的ISO7816控制器特性及具体实现:
1. 2110的ISO7816控制器仅有硬件接收及发送功能,内部无字符超时控制定时器,故此时需要启用2个外部定时器资源来完成驱动设计,一个为.状态机驱动定时及字符间超时记时,另一个为ATR总超时记时,这样设计后则导致状态机驱动定时器中断服务函数完全处理包括上电时序及收发时序,处于复位还是PPS或者APDU状态切换以及字符接收超时(包括反向首字符接收超时以及连续字符间接收超时)均需要处理,ISO7816 串口中断服务函数仅处理数据收发及接收错误相关处理。
2. 2110由于采用UCOS2操作系统,printk是启用一个任务来打印的,故当出现wait_for_completion_interruptible_timeout一直阻塞(可能是状态机乱了[比如发送异常]无法退出状态机),则printk就无法再打印调试信息了,需要等待wait_for_completion_interruptible_timeout退出才能打印调试信息,解决办法是将wait_for_completion_interruptible_timeout参数的超时等待由无限等待改为5~10S超时退出即可看到调试信息以方便定位问题。
3. 2110经过不断调试发现在现有CLK下PPS因子大于12后则出现发送异常(只能发送两个字节,后续字节无法发送)导致wait_for_completion_interruptible_timeout阻塞从而假死机,经示波器查看发送波形完全失真,而当PPS因子小于6后发送数据基本OK,无变形情况,故目前对PPS速率进行了限制。
7110的ISO7816控制器特性及具体实现:
1. 7110的ISO7816控制器有硬件接收及发送功能,内部包括字符超时控制定时器,故此时需要启用1个外部定时器资源来完成驱动设计,此外部定时器为.状态机驱动定时及ATR总超时记时,内部包括字符超时控制定时器为字符间超时(包括反向首字符接收超时以及连续字符间接收超时)记时,这样设计后则导致状态机驱动定时器中断服务函数完全处理包括上电时序及收发时序,处于复位还是PPS或者APDU状态切换以及字符接收超时以及ATR总超时处理,ISO7816 串口中断服务函数处理数据收发及接收错误相关处理以及字符间超时(包括反向首字符接收超时以及连续字符间接收超时)处理。
8210的ISO7816控制器特性及具体实现:
2. 8210的ISO7816控制器有硬件接收及发送功能,并且内部包括字符超时控制定时器及一个通用定时器,故此时不需要外部定时器资源来完成驱动设计,此内部通用定时器为.状态机驱动定时及ATR总超时记时以及反向首字符超时记时,内部字符超时控制定时器进行连续字符间超时记时,这样设计后则导致状态机驱动定时器中断服务函数完全处理包括上电时序及收发时序,处于复位还是PPS或者APDU状态切换以及ATR总超时及及反向首字符超时处理,ISO7816 串口中断服务函数处理数据收发及接收错误相关处理以及正向连续字符间超时处理。