EM78P915-SIM-transplant
所属分类:单片机开发
开发工具:Windows_Unix
文件大小:87KB
下载次数:8
上传日期:2013-10-07 11:49:13
上 传 者:
jiangtianone
说明: SIM卡电话本读写方案,了解SIM文件系统和外部接口的实战方案,采用EMC915芯片实现。
(SIM card phone book reader program, to understand SIM file system and the external interface of practical solutions, using EMC915 chip.)
文件列表:
915\sim_915.prj (949, 2007-07-30)
915\SYSINIT.lst (1916, 2007-07-28)
915\ATR.lst (5890, 2007-07-30)
915\SIM_INIT.lst (6405, 2007-07-30)
915\HARDWARE.lst (5000, 2007-07-28)
915\SIM_UART.lst (14071, 2007-07-30)
915\TRANSP.lst (21127, 2007-07-23)
915\SIM_PTS.asm (1327, 2007-07-30)
915\SELPHO.lst (8004, 2007-07-23)
915\SelPho.ASM (1872, 2007-07-30)
915\PIN.lst (2484, 2007-07-24)
915\PIN.asm (828, 2007-07-30)
915\READPHO.lst (8277, 2007-07-24)
915\ReadPho.ASM (2423, 2007-07-30)
915\func_tab.asm (2645, 2007-07-30)
915\ucs2uni.asm (5176, 2007-07-30)
915\UCS2UNI.lst (16593, 2007-07-24)
915\WritePho.asm (1857, 2007-07-30)
915\Transp.asm (6923, 2007-07-30)
915\SelDir.ASM (1578, 2007-07-30)
915\define.h (1169, 2007-07-25)
915\SysInit.asm (1108, 2007-07-30)
915\SimMacro.h (423, 2007-07-30)
915\Common.asm (1244, 2007-07-30)
915\Hardware.asm (2903, 2007-07-30)
915\ATR.ASM (2664, 2007-07-30)
915\sim_def.h (3043, 2007-07-30)
915\SIM_INIT.asm (2423, 2007-07-30)
915\SIM_MCU.H (2103, 2007-07-28)
915\SIM_UART.asm (7134, 2007-07-30)
915\main.asm (6717, 2007-07-30)
915\MAIN.lst (117816, 2007-07-30)
915\MAIN.bbj (24539, 2007-07-30)
915\sim_915.map (173, 2007-07-30)
915\sim_915.cds (65559, 2007-07-30)
915\sim_915.deg (20866, 2007-07-30)
915\backup_sim_uart_2m372.dt (0, 2007-07-30)
915\backup_sim_uart_fm372.dt (8196, 2007-07-30)
915\EMCMacro.H.bak (439, 2007-07-30)
... ...
说明文档
**************************************************************************************
概述:
支持ISO7816-1,2,3,4和GSM07.07,GSM11.11,GSM11.12和GSM11.14
支持智能卡正向和反向T=0协议;
优化的智能卡硬件接口时序;
支持电话簿记录在小内存MCU中的处理;
定长电话簿记录转换,便于数据处理;
完成姓名进行UCS2到Unicode的转换;
**************************************************************************************
文件说明:
-------------------------------
共用头文件
EM78468N.h EM78468N寄存器定义,不同MCU包含不同定义文件
Define.h 用户头文件
-------------------------------
SIM卡头文件
sim_def.h SIM卡协议相关定义
SimMacro.h SIM卡协议相关宏
-------------------------------
用户代码
SysInit.asm 系统初始化
main.asm 主程序
-------------------------------
SIM卡协议代码
Hardware.asm SIM卡接口底层硬件接口
SIM_UART.asm ISO7816串行接口程序
Transp.asm 数据传输控制代码
ATR.asm 复位应答处理函数
SIM_PTS.asm 智能卡协商模式处理
SelDir.asm 选择电信目录
SelPho.asm 选择电话簿
ReadPho.asm 读取电话簿中的一条记录
WritePho.asm 向电话簿写入一条记录
PIN.asm PIN码校验
--------------------------------
公共函数库,注意参数传递接口
Common.asm
**************************************************************************************
调用关系:
----------------------------->调用顺序
可能不需要 循环
----------> <-------------------------------------------------------------
SIM卡初始化 选择电信目录 | 校验PIN | 选择电话簿 | 读取或写入电话簿记录 姓名解析 | 关闭SIM卡
应用层 | 上电初始化------------->SIM_INIT----------->SIM_SEL_DIR----------->PIN----------->SIM_SEL_PHO----------->SIM_RAED_PHO/SIM_WRITE_PHO----------->UCS2_TO_UNICODE----------->CLOSESIM
| | | | | | | |
| | ----------------- | | | | |
| | | | | | | | | |
协 | | | SIM_ATR SIM_PTS | | | | |
议 | | | | | | | | | |
层 | | | ------------------------------------------------------------------------------------------ |
| | | | |
| | | 数据传输控制协议 |
| | | | |
物理层 | SIM_INIT_PORT RSTSIM ISO7816串行接口(虚拟) CLOSESIM
说明:
系统上电初始化时调用SIM_INIT_PORT初始化SIM卡接口
然后当要进行SIM卡操作时,调用SIM_INIT进行SIM卡初始化,调用后判断出口GR0是否正常
然后调用SIM_SEL_DIR选择电信目录,要判断返回值,如果正常跳过PIN
如果有PIN而没有锁死就调用PIN校验程序,判断返回值
调用SIM_SEL_DIR选择电信目录,此时会得到记录的信息,如记录长度和记录容量,写入全局变量;调用后判断返回值
调用SIM_RAED_PHO或SIM_WRITE_PHO记录操作程序,每次判断返回值(在此也可判断PIN码去解PIN)
根据需求调用UCS2_TO_UNICODE将姓名转换为标准Unicode码,根据返回值判断是否合法
操作完毕调用CLOSESIM关闭SIM卡
除了返回有PIN码保护外,其他异常均要结束正常操作或重试(注意PIN码校验的重试次数!!)
**************************************************************************************
常量说明
GSM_PHONE_L GSM11.11 规定的电话号码区的长度,2个标示字节+10个号码字节+2个扩展字节;一定不要改动
BAK_PHONE_L 要保存的每条记录的电话号码长度,可自定义,但不能超出GSM_PHONE_L,建议选取12字节,不必保存扩展字节
BAK_NAME_L 每条记录保存的姓名长度,可自定义,建议14~16字节。
BAK_REC_L 每条记录存储长度,即BAK_NAME_L + BAK_PHONE_L
BUFF_SIZE 缓冲区大小,大于等于BAK_REC_L,但也要大于选择电话本文件时的取响应数据长度15个字节。
也要大于ATR接收时的缓冲大小,在此用了18字节(丢弃了历史字符)。 推荐28~30字节
原姓名格式
----------------------------------------------------------------------------------------------------------------------
|<---------------姓名变长0~242字节--------------->|<----2字节号码标识 + 10字节压缩BCD码电话号码 + 2字节扩展字节----->|
----------------------------------------------------------------------------------------------------------------------
| |
| |
----------- ------------------------------------------ 调用读写函数,定长变成互转功能内部处理
| | 外部接口只认为读到一个定长数据,写出时也要是一个定长数据
高层的格式 | |
----------------------------------------------------------
|<-- 转换成定长BAK_NAME_L-->|<--电话号码定长BAK_PHONE_-->| 转换为定长,姓名和号码都截取前面部分
----------------------------------------------------------
|
|
----------- 调用UCS2_TO_UNICODE,注意这是单向的,不可逆转回到原始UCS2编码
|
|
--------------------------------------------------------
|<--------------- 转换成Unicode码---------------------->|
--------------------------------------------------------
;------------------------------------------------------------
命令返回值定义
NOERR 正常
NOSIM 没有SIM卡
TMOUT 操作超时
PINERR PIN码保护
SIMERR 未知错误
注意以上GR0出口数值 0x80 ~ 0xff 程序内部使用,不要自定义在高128编码
;------------------------------------------------------------
**************************************************************************************
变量说明
为了便于局部变量的使用,统一定义了8个虚拟的通用寄存器GR0~GR7,也便于不同指令系统MCU的移植
在EMC单片机中,这8个变量放在未分页的寄存器BANK中;
SIM卡协议使用的全局变量尽量使用未分页的寄存器,修改时注意BANK切换
SCON 控制寄存器
sim_rec_l SIM卡电话本一条记录的长度
sim_rec_n SIM卡电话本记录总数
sim_ept1 字符发送间隔时间
sim_ept2 由收到发间隔保护时间
IOBUFF 数据首地址,容量大小定义为上面的BUFF_SIZE,
注意在EMC中末地址最好不要达到每个bank的0x3f,因为内部最后一次循环间址寄存器加一可能会修改寄存器BANK
UNIBUFF 姓名转换成Unicode码后存放的缓冲区
**************************************************************************************
近期下载者:
相关文件:
收藏者: