税务UKey技术规范.doc
税务 UKey 技术规范 国家税务总局 目 次 目 次 .............................................................................1 前 言 .............................................................................2 1 范围 ...............................................................................3 2 规范性引用文件 .....................................................................3 3 术语和定义 .........................................................................3 4 缩略语 .............................................................................4 5 技术要求 ...........................................................................5 6 试验方法 ...........................................................................8 7 标志、包装、运输、贮存 ............................................................10 附 录 A (规范性附录) 接口函数-定义BSP支持库 ....................................12 A.1 结构模型 ........................................................................12 A.2 片内存储划分区 ..................................................................12 A.3 出厂数据定义 ....................................................................13 A.4 数据类型定义 ....................................................................13 A.5 复合数据类型 ....................................................................13 A.6 接口函数 ........................................................................16 A.7 返回代码定义和说明 ..............................................................25 附 录 B (规范性附录) 命令规范-描述出厂固件支持的指令 ...........................26 B.1 连接 ............................................................................26 B.2 通信接口与协议 ..................................................................26 B.3 通信命令 ........................................................................26 B.4 返回代码定义和说明 ..............................................................30 附 录 C (规范性附录) 数据格式 ..................................................31 C.1 产品编号 ........................................................................31 C.2 产品版本号 ......................................................................31 1 前 言 请注意,本规范的某些内容可能涉及专利,发布机构不承担识别这些专利的责任。 本规范由国家税务总局提出。 本规范规定税务UKey产品硬件及硬件驱动层的生产,后续还需取得国家密码管理局密码产品型 号认证并通过应用环境中的相关测试。 2 税务UKey技术规范 1 范围 税务UKey是税务逻辑内核和税务数字证书的安全载体和运行环境。税务UKey应为税务逻辑内 核提供安全运行环境。 为规范税务UKey硬件、BSP支持库和出厂固件设计生产,特制定本规范供各设计生产厂商使用。 各厂商需根据本规范进行设计和生产。 本规范规定了税务UKey的技术要求、BSP支持库、出厂固件、数据格式等内容。 2 规范性引用文件 下列文件对于本规范的应用是必不可少的。凡是注有日期的引用文件,仅注有日期的版本适用 于本规范。凡是不注有日期的引用文件,其最新版本(包括所有的修改单)适用于本规范。 GB/T 25000.51-2016 《系统与软件工程 系统与软件质量要求和评价(SQuaRE) 第51部分:就绪 可用软件产品(RUSP)的质量要求和测试细则》 GB/T 2422 电工电子产品基本环境试验规程 术语 GB/T 2423.1 电工电子产品环境试验 第2部分:试验方法 试验A:低温 GB/T 2423.2 电工电子产品环境试验 第2部分:试验方法 试验B:高温 GB/T 2423.3 电工电子产品环境试验 第2部分:试验方法 试验Cab:恒定湿热试验 GB/T 2423.8 电工电子产品环境试验 第2部分:试验方法 试验Ed:自由跌落 GB/T2423.10 电工电子产品环境试验 第2部分:试验方法试验Fc:振动(正弦) GB/T 4857.2-2005 运输包装件基本试验 第2部分:温湿度调节处理 GB/T 4857.5-1992 包装 运输包装件跌落试验方法 GB/T 5271.14 信息技术 词汇 第14部分:可靠性、可维护性与可用性 GB/T 9969 工业产品使用说明书 总则 GB/T 17618-2015 信息技术设备 抗扰度 限值和测量方法 GB 9254 信息设备的无线电骚扰限制和测量方法 SJ/T 11364 电子信息产品污染控制标识要求 3 术语和定义 下列术语和定义适用于本规范。 3.1 税务 UKey 税务UKey,一种在计算机(或其他类同电子设备)的配合下实现税务功能的电子装置,属于税 务数字证书介质的一种,在写入应用固件(实现税务逻辑内核)和税务数字证书后,能保证税务应 用执行的正确性、完整性,同时保证税务业务数据的可靠存储和安全传输。 3.2 宿主 通过发送控制命令的方式,配合税务UKey实现税务功能的计算机或其他电子设备。 3.3 BSP 支持库 3 税务UKey的硬件驱动函数库,由税务UKey厂商按照本规范附录A的要求进行设计开发。 3.4 出厂固件 由税务UKey生产厂商按照本规范附录B实现的嵌入式应用软件,在税务UKey生产环节由生产厂 商写入税务UKey。 3.5 应用固件 利用BSP支持库,实现税务逻辑内核和税务数字证书的嵌入式应用软件,无需税务UKey生产厂 商开发。 3.6 片内存储 税务UKey主控MCU内部提供的数据和程序存储空间。 3.7 安全写存储空间 税务UKey片内存储空间中,实现掉电保护并提供数据完整性校验功能的部分。 3.8 物理块 片内存储空间上的物理页。 3.9 逻辑块 安全写存储空间中的逻辑存储空间页,由BSP支持库实现的。 4 缩略语 下列缩略语适用于本规范。 b 比特位(bit) B 字节(Byte) BCD 二进制编码的十进制代码(Binary-Coded Decimal) BOT Bulk-Only传输 BSP 板级支持包(Board Support Package) CBC 密文分组链接模式(Cipher Block Chaining) CCYYMMDD 世纪,年,月,日(Century,Year,Month,Day) CCYYMMDDHHMMSS 世纪,年,月,日,时,分,秒(Century,Year,Month,Day, Hour,Minute,Second) CRC 循环冗余校验(Cyclic Redundancy Check) ECB 电子密码本模式Electronic Codebook) HEX 十六进制(Hexadecimal) HHMMSS 时,分,秒(Hour,Minute,Second) IC 集成电路(Integrated Circuit) LED 发光二极管(light-emitting diode) MAC 报文鉴别代码(Message Authentication Code) MCU 微控制单元(Micro Control Unit) PID 产品识别码(Product ID) PKI 公开密钥基础设施(Public Key Infrastructure) 4 RAM 随机存取存储器(Random-Access Memory) RTC 实时时钟(Real-Time Clock) STR 字符串(String) TAG 标签(Tag) TLV 标签,长度, 值(Tag,Length,Value) USB 通用串行总线(Universal Serial Bus) VID 供应商识别码(Vender ID) YYMMDD 年,月,日(Year,Month,Day) 5 技术要求 5.1 功能要求 5.1.1 总则 税务UKey(以下简称:产品)应根据安全性、便捷性和经济性的原则进行设计。产品应提供可靠 的数据存储功能,支持通过USB接口和宿主进行数据交互。 5.1.2 数据要求 出厂数据包括硬件版本号、生产时间、税务UKey编号等,详见附录B、C。 生产厂商在产品出厂前将出厂数据写入税务UKey中。其中写入的税务UKey编号应与产品壳体 上的编号相同。 出厂数据不限制存储位置,出厂后不能被删除或篡改。 5.1.3 硬件要求 5.1.3.1 产品的硬件功能包括:主控 MCU 模块、实时时钟模块、电源模块、存储模块、状态指示电 路、接口电路等。 5.1.3.2 接口电路应至少具有一个 USB 标准接口。 5.1.3.3 在突然断电情况下,产品应保证数据的正确性和完整性。 5.1.3.4 存储模块应采用非易失性存储媒体,容量不得少于 2MB,擦写次数不得少于 10 万次。 5.1.3.5 产品的实时时钟模块要求走时准确,日误差不大于 10s。产品发行使用后,电池使用寿命 不少于 3 年。 5.1.4 软件要求 5.1.4.1 厂商需要按照附录 A 的要求实现 BSP 支持库。 5.1.4.2 厂商需要按照附录 B 的要求实现出厂固件。 5.1.4.3 BSP 支持库、出厂固件中的数据格式,应符合附录 C 的要求。 5 5.1.4.4 厂商提供给应用固件使用的 RAM 空间减去厂商 BSP 的堆栈不小于 21KB。 5.1.4.5 产品主控 MCU 中,需提供安全写存储空间,即满足安全写操作要求的存储空间,保证数据 的正确完整。安全写存储空间采用逻辑地址的方式进行读写。安全写存储空间中,逻辑块数量需不 少于 8 块,总容量需不小于 16KB(逻辑大小),应用固件最大写入长度为 4000 字节(从 4096 字节 中预留 96 字节给 BSP,供可能的校验值使用,方便实现校验功能),要求支持跨逻辑块读写。 5.1.4.6 产品主控 MCU 中,提供应用固件使用的存储不小于 160KB(不含 BSP 支持库)。 5.1.4.7 产品应能响应宿主的控制命令,宿主通过发送控制命令来实现对产品的操作。 5.1.4.8 产品应具有一个 BSP 接口(详见附录 A)可控的绿色 LED 指示灯。 5.1.4.9 BSP 支持库、出厂固件应具有良好的容错能力,具有较好的健壮性。 5.2 外观和结构 5.2.1 产品外形为矩形,产品外观尺寸不大于长 85 毫米×宽 30 毫米×高 15 毫米。 产品正面应包括“税务UKey”字样,背面应包括产品编号,字体为宋体。 长度 宽度 产品名称(税务UKey) 图1:税务UKey正面样式 长度 宽度 产品编号 6 图2:税务UKey背面样式 5.2.2 产品表面不应有明显的凹痕、划伤、裂缝、变形和污染等。 5.2.3 产品的零部件应紧固无松动。 5.3 安全 产品必须采用具有国家密码管理局商用密码安全芯片类产品型号证书的MCU。 5.4 电源适应能力 电源适应能力需符合USB技术规范,工作电流要求不高于100mA。 5.5 电磁兼容性 5.5.1 无线电骚扰限值 产品的无线电骚扰限值应符合GB 9254中B级规定的要求。 5.5.2 抗扰度限值 产品的抗扰度限值应符合GB/T 17618—2015规定的要求。 5.6 环境条件 5.6.1 气候环境适应性 表1 气候环境适应性 气候条件 温度 相对湿度 5.6.2 工作 工作 参数 -10℃~55℃ 0%~90%(40℃) 机械环境适应性 表2 项 目 初始和最后振动响应检查 分 项 频率范围 扫频速度 驱动振幅 驱动振幅 持续时间 频率范围 位移幅值 扫频速率 循环次数 初始和最后振动响应检查 定频耐久试验 扫频耐久试验 表3 峰值加速度 m/s2 150 振动试验 冲击试验 波形持续时间 ms 11 表4 参 数 5Hz~35Hz ≤1 oct/min 0.15mm 0.15mm 10min 5Hz~35Hz~5Hz 0.15mm ≤1 oct/min 2 冲击波形 半正弦波 碰撞试验 7 峰值加速度 m/s2 100 波形持续时间 ms 16 表5 碰撞次数 碰撞波形 1000 半正弦波 运输包装件跌落试验 包装件质量 kg ≤15 15~30 30~40 跌落高度 mm 1000 800 600 单体跌落试验应符合标准:GB/T2423.8“实验Ed”中的规定。 5.7 使用说明书 使用说明书的编写应符合GB/T 9969的规定。 5.8 检测要求 产品需通过国家密码管理局的测试,取得密码产品型号证书,安全等级应在第二级及以上。 6 试验方法 6.1 试验环境条件 本规范中除可靠性试验以外,其它试验均可在下述正常大气条件下进行。 温 度:15℃~35℃; 相对湿度:25%~75%; 6.2 功能要求试验 厂商或检测机构,根据5.1及附录A、B、C的要求,开展测试工作。测试过程中使用的测试固件 及测试工具自行开发。 6.3 外观和结构检查 用目测法进行外观和结构检查。 6.4 使用说明书及有关文件检查 用目测法检查使用说明书及有关文件。 6.5 电磁兼容性试验 6.5.1 无线电骚扰限值的测量方法 按GB 9254规定的方法进行。 6.5.2 抗扰度限值测量方法 按GB/T 17618—2015规定的方法进行。试验过程中产品运行检查程序,工作应正常。 6.5.2.1 静电放电抗扰度 8 按GB/T 17618—2015中4.2.1的规定进行。 6.5.2.2 电快速瞬变脉冲群抗扰度 按GB/T 17618—2015中4.2.2的规定进行。 6.5.2.3 射频电磁场辐射抗扰度 按GB/T 17618—2015中4.2.3.1的规定进行。试验等级为3级。 6.5.2.4 传导骚扰抗扰度 按GB/T 17618—2015中4.2.3.2的规定进行。试验等级为3级。 6.5.2.5 工频磁场抗扰度 按GB/T 17618—2015中4.2.4的规定进行。 6.6 可靠性试验 6.6.1 6.6.1.1 环境试验 一般要求 环境试验方法的总则和名词术语应符合GB/T 2421.1、GB/T 2422的有关规定。 以下各项试验应按6.2的要求进行检测,产品应工作正常。 6.6.1.2 工作温度下限试验 按GB/T 2423.1“试验Ad”进行。严酷度应符合5.6.1对工作温度下限值的要求。产品须进行初 始检测,加电运行2h,产品工作应正常。恢复时间为2h。 6.6.1.3 工作温度上限试验 按GB/T 2423.2“试验Bd”进行。严酷度应符合5.6.1对工作温度上限值的要求。产品须进行初 始检测,加电运行2h,产品工作应正常。恢复时间为2h。 6.6.1.4 工作条件下恒定湿热试验 参照GB/T 2423.3“试验Cab”进行,严酷度应符合5.6.1对工作的湿热上限值要求。产品须进行 初始检测。试验时间为2h。在此期间加电运行,工作应正常。恢复时间为2h。 6.6.2 6.6.2.1 振动试验 基本要求 按GB/T 2423.10“试验Fc”进行,产品按工作位置固定在振动台上,进行初始检测,产品在不 工作状态下,按5.6.2表2规定值,分别对三个互相垂直轴线方向进行振动。 工作状态下的振动试验应加电运行自检程序,产品应工作正常。试验结束后应进行外观和结构 的检查。 6.6.2.2 初始振动响应检查 9 试验在给定频率范围内,在一个扫频循环上完成。试验过程中记录危险频率,包括机械共振频 率和导致故障及影响性能的频率(后者仅在工作状态下产生)。产品应进行一次附加的不工作状态 下的振动响应检查,并记录共振频率。 6.6.2.3 定频耐久试验 用初始振动响应检查中记录的危险频率进行定频试验,如果两种危险频率同时存在,则不得只 选其中一种。若在试验规定频率范围内无明显共振频率或无影响性能的频率,或危险频率超过四个 则不做定频耐久试验,仅做扫频耐久试验。 6.6.2.4 扫频耐久试验 按5.6.2表2给定频率范围由低到高,再由高到低,作为一次循环。按5.6.2表2规定的循环次数 进行,已做过定频耐久试验的样品不再做扫频耐久试验。 6.6.2.5 最后振动响应检查 此项试验在不工作状态下进行,对于已做过定频耐久试验的产品应做此项试验。对于需做扫频 耐久试验的样品,可将最后一次扫频试验作为最后振动响应检查。本试验须将记录的共振频率与初 始振动响应检查记录的共振频率相比较,若有明显变化,应对产品进行修整,重新进行该项试验。 而这种修整必须在该批所有产品上进行。 试验结束后,进行最后检测。 6.6.3 冲击试验 按GB/T 2423.5“试验Ea”进行。产品应进行初始检测。安装时要注意重力影响,按5.6.2表3规 定值,在不工作状态下,分别对三个互相垂直轴线方向进行冲击,冲击次数各为三次,试验后进行 最后检测。 6.6.4 碰撞试验 按GB/T 2423.6“试验Eb”进行。产品应进行初始检测,安装时要注意重力影响,按5.6.2表4规 定值,在不工作状态下,分别对三个互相垂直轴线方向各进行一次碰撞。试验后进行最后检测。 6.6.5 运输包装件跌落试验 对产品进行初始检测,将运输包装件处于准备运输状态,按GB/T 4857.2-2005中3.1的表中条件 6规定进行预处理4h。将运输包装件按GB/T 4857.5-1992的5.6.2中a的要求和表5的规定值进行跌落, 任选四面,每面跌落一次。试验后检查包装件的损坏情况,并对产品进行外观和结构的检查及检测。 6.6.6 单体跌落试验 单体跌落试验应按照标准:GB/T2423.8“试验Ed”进行。 7 7.1 标志、包装、运输、贮存 包装标志 包装箱外应注明产品型号、数量、重量、制造单位名称、起止产品编号。 包装箱外应印刷或贴有“易碎物品”、“向上”、“怕雨”、“堆码层数”或“堆码重量极限” 等储运标志。储运标志应符合GB/T 191的规定。 10 产品中有毒有害物质的含量的标识应符合SJ/T 11364的规定。 7.2 包装 包装箱应符合防潮、防尘、防震的要求,包装箱内应有装箱清单、检验合格证及有关的文件。 7.3 运输 产品在运输过程中不允许雨雪或液体直接淋袭和机械损伤。 7.4 贮存 产品贮存时应放在原包装箱内,存放产品的仓库环境温度为0℃~40℃,相对湿度为30%~85%。 仓库内不允许有各种有害气体、易燃和易爆物品及有腐蚀性的化学物品,并且应无强烈的机械震动、 冲击和强磁场作用。包装箱应垫离地面至少15cm,距离墙壁、热源、冷源、窗口或空气入口至少 50cm。 11 附 录 A (规范性附录) 接口函数-定义BSP支持库 A.1 结构模型 A.1.1 层次关系 本附录定义的接口位于主板硬件与应用引导区和应用区之间,如下图所示。 A.2 片内存储划分区 产品的片内存储分为程序区和数据区。程序区包括芯片启动固件、出厂固件、应用引导固件和 应用固件。数据区包括应用数据区和出厂数据(出厂数据也可存储于片外,要求保证数据不被篡改 和删除)。 芯片启动固件由芯片厂商预置,不能被擦除,但在加载应用后可以被限制是否允许重新运行。 产品在出厂时,厂商通过调用芯片启动固件下载出厂固件,同时将出厂数据写入到出厂数据区。 应用固件开发商通过调用出厂固件,重新运行芯片启动固件,在擦除出厂固件后下载应用引导 固件和应用固件。应用固件可将应用数据存储到应用数据区,通过BSP支持库对应用数据进行安全读 写。 片内存储在生产和应用环节的区域划分如下图所示。 生产环节 芯片启动区 应用环节 芯片启动区 出厂程序区 应用引导区 出厂数据区 应用程序区 出厂数据区 应用数据区 12 A.3 出厂数据定义 出厂数据包括:产品编号、生产日期、硬件版本号,由生产厂商在生产环节写入税务UKey的出 厂数据区。出厂数据一旦写入不可擦除和修改。 数据项 产品编号 6B BCD 示例:017123456789 生产日期 7B BCD(CCYYMMDDHHMMSS) 示例:20190615235959 硬件版本号 7B BCD 示例:01010001190610 A.4 长度 格式 备注 数据类型定义 A.4.1 基本数据类型 本规范中的字节数组均为高位字节在前(Big-Endian)方式交换。 基本数据类型定义见表A.1。 表A.1 类型名称 int8_t int16_t int32_t uint8_t uint16_t uint32_t bool A.4.2 描述 有符号8位整数 有符号16位整数 有符号32位整数 无符号8位整数 无符号16位整数 无符号32位整数 布尔类型,取值为TRUE或FALSE 数据类型 定义 typedef signed char int8_t typedef signed short int16_t typedef signed int int32_t typedef unsigned char uint8_t typedef unsigned short uint16_t typedef unsigned int uint32_t typedef int bool 常量定义 数据常量标识定义了在规范中用到的常量的取值。 数据常量标识的定义如表A.2。 表A.2 常量名 TRUE FALSE S8_MAX S8_MIN S16_MAX S16_MIN S32_MAX S32_MIN U8_MAX U16_MAX U32_MAX A.5 常量定义 取值 0x00000001 0x00000000 127 -128 32767 -32768 2147483647 -2147483648uL 255 65535u 4294967295uL 描述 布尔值为真 布尔值为假 #define S8_MAX #define S8_MIN #define S16_MAX #define S16_MIN #define S32_MAX #define S32_MIN #define U8_MAX #define U16_MAX #define U32_MAX (127) (-128) (32767) (-32768) (2147483647) (-2147483648uL) (255) (65535u) (4294967295uL) A.5.1 复合数据类型 USB枚举信息 13 A.5.1.1 类型定义 struct ST_USB_PARA { uint8_t *m_pui8StrDescProduct; }; A.5.1.2 数据描述项 数据项描述见表A.3。 表A.3 数据项 m_pui8StrDescProduct A.5.2 USB运行信息 A.5.2.1 类型定义 类型 uint8_t 设置USB信息 意义 产品描述符 备注 36字节,以空格0x20补位,出厂值: “SWUKEY” struct ST_USB_INFO { uint16_t m_ui16PacketLen; uint8_tm_ui8SpeedMode; }; A.5.2.2 数据描述项 数据项描述见表A.4。 表A.4 获取USB信息 数据项 m_ui16PacketLen 类型 uint16_t 意义 收发包大小 m_ui8SpeedMode uint8_t 速度类型 备注 0x00:低速 0x01:全速 0x02:高速 A.5.3 A.5.3.1 厂商信息 类型定义 struct ST_VENDOR_INFO { uint8_t m_aui8TaxDevID[6]; uint8_t m_aui8HWVersion[7]; uint8_t m_aui8ProductTime[7]; }; A.5.3.2 数据描述项 14 数据项描述见表A.5。 表A.5 获取厂商信息 数据项 m_aui8TaxDevID 类型 uint8_t 意义 税务UKey编号(6B,BCD) m_acHWVersion uint8_t 硬件版本号信息(7B,BCD) m_aui8ProductTime uint8_t 生产时间(7B,BCD) A.5.4 A.5.4.1 备注 CCYYMMDDHHMMSS 片内存储 类型定义 struct ST_INF_INFO { uint32_t m_ui32LogicBlockSize; uint32_t m_ui32LogicBlockCnt; uint32_t m_ui32RawBlockSize; uint32_t m_ui32RawBlockCnt; uint32_t m_ui32RawBaseAddr; }; A.5.4.2 数据描述项 数据描述项见表A.6 表A.6 片内存储信息 数据项 m_ui32LogicBlockSize 类型 uint32_t 逻辑块大小 m_ui32LogicBlockCnt uint32_t 逻辑块数量 安全写存储空间的逻辑块数量 m_ui32RawBlockSize uint32_t 物理块大小 芯片物理块大小(单位字节) m_ui32RawBlockCnt uint32_t 物理块数量 芯片物理块数量 m_ui32RawBaseAddr uint32_t 物理块起始地址 芯片物理块起始地址 A.5.5 A.5.5.1 意义 备注 安全写存储空间的逻辑块大小(单 位字节),该大小值为逻辑块的实 际可用值 文件系统 类型定义 文件数据结构、目录数据结构由厂商文件系统内部设计,数据项由厂商自定义,应用固件可根 据数据结构做文件操作即可。该结构体的空间由应用固件申请和释放。 文件数据结构: struct TC_FILE { 厂商自定义,不得大于128B(该数值根据各厂家采用的文件系统确定,文件数据结构过大 会严重占用应用内存空间,故做此限制)。 }; 目录数据结构: 15 struct TC_DIR { 厂商自定义,不得大于128B(该数值根据各厂家采用的文件系统确定,限制原因同上)。 }; 文件信息数据结构: struct TC_FILINFO { uint32_t m_ui32FileSize; uint32_t m_ui32FileAttrib; uint16_tm_acFileName[13]; }; A.5.5.2 数据项描述 数据描述项见A.7 表A.7 文件信息结构 数据项 m_ui32FileSize 类型 uint32_t 意义 文件大小 m_ui32FileAttrib uint32_t 文件属性 备注 Bit从低到高排序。 Bit0:为1时属性为目录。 其他Bit值:保留。 m_acFileName[13] A.6 uint16_t 文件名称 与Windows标准文件名格式一致, 采用“8.3格式短文件名”。 接口函数 A.6.1 设备管理 A.6.1.1 概述 设备管理接口函数名称见表A.8。 表A.8 接口函数列表 16 模块 函数名称 TC_CHIP_Init 芯片初始化 TC_CHIP_Reset 芯片复位 TC_CHIP_EnterBoot 恢复芯片Bootloader模式 TC_CHIP_Sleep 延时毫秒 TC_LED_Operate LED操作 TC_RTC_Init RTC初始化 TC_RTC_Set 设置RTC时间 TC_RTC_Get 读取RTC时间 TC_USB_Init USB初始化 TC_USB_Send USB发送数据 TC_USB_Recv USB接收数据 TC_USB_GetInfo 获取USB信息 TC_UART_Open 打开串口 TC_UART_Send 串口发送数据 TC_UART_Recv 串口接收数据 TC_INF_Init 片内存储初始化 TC_INF_Create 片内存储安全运行环境创建 TC_INF_WriteAntiTear 片内存储安全写 TC_INF_ReadAntiTear 片内存储安全读 TC_INF_WriteRaw 片内存储直接写 TC_INF_ReadRaw 片内存储直接读 芯片 通信 存储 A.6.1.2 功能 其他说明 调试接口,发布版本 固件不可调用该函数。 芯片初始化 原型 int32_t TC_CHIP_Init(struct ST_VENDOR_INFO *pstVendorInfo,uint8_t *pui8BspVersion ); 功能描述 芯片初始化,建立芯片运行环境。 参数 pstVendorInfo [OUT]厂商信息 pui8BspVersion [OUT]BSP版本号,长度7字节 返回值 TC_OK: 成功。 其他: 错误码。 A.6.1.3 芯片复位 原型 voidTC_CHIP_Reset(void); 功能描述 芯片复位(软复位)。 参数 返回值 无返回 A.6.1.4 恢复芯片Bootloader模式 原型 void TC_CHIP_ EnterBoot(void); 功能描述 该函数将设备恢复到芯片BOOT状态,需要对芯片进行软复位。出厂数据必须保留,不允许 擦除和修改。 17 参数 返回值 无返回 A.6.1.5 延时操作 原型 int32_t TC_CHIP_Sleep(uint32_t ui32Ms); 功能描述 该函数将目前动作延迟一段时间,延迟时长可以不设上限。 参数 ui32Ms [IN]延时毫秒时长。 返回值 TC_OK: 成功。 其他: 错误码。 A.6.1.6 LED操作 原型 int32_t TC_LED_Operate(uint32_t ui32Value); 功能描述 该函数操作LED闪烁状态。 参数 ui32Value [IN]LED操作标志。0x00000000:长灭(指示灯保持熄灭,直至有后续 操作点亮);0xFFFFFFFE:亮灭切换;0xFFFFFFFF:常亮;其他:按 数值*10ms为周期亮灭闪烁,周期最长10s。 返回值 TC_OK: 成功。 其他: 错误码。 A.6.1.7 RTC初始化 原型 int32_t TC_RTC_Init(void); 功能描述 该函数初始化与RTC通信。 参数 返回值 TC_OK: 成功,仅表示与RTC通信成功,不代表RTC时钟有效。 其他: 错误码。 A.6.1.8 设置RTC时间 原型 int32_t TC_RTC_Set(uint8_t *pui8Value); 功能描述 该函数设置RTC到指定时间。 参数 pui8Value [IN]待设置时间,BCD码,CCYYMMDDHHMMSS。 返回值 TC_OK: 成功。 其他: 错误码。 A.6.1.9 读取RTC时间 原型 int32_t TC_RTC_Get(uint8_t *pui8Value); 功能描述 该函数读取RTC时间。 参数 pui8Value [OUT]读取的RTC当前时间,BCD码,CCYYMMDDHHMMSS。 返回值 TC_OK: 成功。 其他: 错误码。 A.6.1.10 USB初始化 原型 int32_t TC_USB_Init(struct ST_USB_PARA *pstUsbPara); 功能描述 该函数将USB复位。 18 说明:BSP支持库实现USB中断管理,实现USB枚举,将设备枚举为一个MASS STORAGE设备(通过将接 口描述符中的class sub-class protocol 设为 0x08 0x06 0x50 实现)。BSP支持库负责端点0的数据收 发。枚举完成后,BOT协议由应用固件负责实现,BSP支持库只提供收发函数。 参数 pstUsbPara [IN] USB信息初始化,参见A.5.1。 返回值 TC_OK: 成功。 其他: 错误码。 A.6.1.11 USB接收数据 原型 int32_t TC_USB_Recv(void *pvDesBuf, uint32_t ui32RecvLen); 功能描述 该函数通过USB接口接收数据,阻塞模式接收,如USB控制接收到busreset,则返回相应错 误码,错误码详见A.7。 参数 pvDesBuf [OUT]接收数据缓冲区。 ui32RecvLen [IN]接收数据缓冲区长度。 返回值 TC_OK: 成功。 其他: 错误码。 A.6.1.12 USB发送数据 原型 int32_t TC_USB_Send(void *pvSrcBuf, uint32_t ui32SendLen); 功能描述 该函数通过USB接口发送数据。 参数 pvSrcBuf[IN]发送数据缓冲区。 ui32SendLen [IN]发送数据长度。 返回值 TC_OK: 成功。 其他: 错误码。 A.6.1.13 获取USB信息 原型 int32_t TC_USB_GetInfo (struct ST_USB_INFO *pstUsbInfo ); 功能描述 该函数获取USB信息。 参数 pstUsbInfo [OUT]USB信息。 返回值 TC_OK: 成功。 其他: 错误码。 A.6.1.14 串口初始化 原型 int32_t TC_UART_Open (uint32_t ui32BaudRate); 功能描述 该函数将串口初始化,用于debug调试。除波特率需设置外,其余参数默认为8n1无流控。 参数 ui32BaudRate [IN]波特率。 返回值 TC_OK: 成功。 其他: 错误码。 A.6.1.15 串口接收数据 原型 int32_t TC_COMM_Recv(void *pvDesBuf, uint32_t ui32RecvLen); 功能描述 该函数通过串口接口接收数据。 参数 pvDesBuf [OUT]接收数据缓冲区。 ui32RecvLen [IN]接收数据缓冲区长度。 返回值 TC_OK: 成功。 19 其他: A.6.1.16 错误码。 串口发送数据 原型 int32_t TC_COMM_Send(void *pvSrcBuf, uint32_t ui32SendLen); 功能描述 该函数通过串口接口发送数据。 参数 pui8Buf[IN]发送数据缓冲区。 ui32SendLen [IN]发送数据长度。 返回值 TC_OK: 成功。 其他: 错误码。 A.6.1.17 片内存储初始化 原型 int32_t TC_INF_Init (struct ST_INF_INFO *pstInfInfo); 功能描述 该函数创建片内存储运行环境。厂商可以在该接口中实现断电保护恢复。 参数 pstInfInfo [OUT]获取片内存储信息。 返回值 TC_OK: 成功。 其他: 错误码。 A.6.1.18 片内存储安全运行环境创建 原型 int32_t TC_INF_Create(void); 功能描述 清除安全写存储空间内的所有数据,创建片内安全写存储空间。 参数 返回值 TC_OK: 成功。 其他: 错误码。 A.6.1.19 片内存储安全写 原型 int32_t TC_INF_WriteAntiTear( uint32_t ui32LBA, void *pvSrcBuf, uint32_t ui32WriteLen ); 功能描述 该函数对片内存储逻辑块进行安全写操作。 参数 ui32LBA [IN]逻辑块地址,从0开始。 pvSrcBuf [IN]写入缓冲区。 ui32WriteLen [IN]写入长度,最大写入长度为4000字节。 返回值 TC_OK: 成功。 其他: 错误码。 A.6.1.20 片内存储安全读 原型 int32_t TC_INF_ReadAntiTear( uint32_t ui32LBA, void *pvDesBuf, uint32_t ui32ReadLen ); 功能描述 该函数对片内存储逻辑块进行安全读操作。 参数 ui32LBA [IN]逻辑块地址,相对地址从0开始。 pvDesBuf [OUT]读出缓冲区。 ui32ReadLen [IN]读出长度。 返回值 TC_OK: 成功。 其他: 错误码。 A.6.1.21 片内存储直接写 20 原型 int32_t TC_INF_WriteRaw( uint32_t ui32PBA, void *pvSrcBuf, uint32_t ui32ReadLen ); 功能描述 该函数对片内存储物理块进行写操作。 参数 ui32PBA [IN]物理块地址,用于应用程序升级。 pvSrcBuf [IN]写入缓冲区。 ui32WriteLen [IN]写入长度。 返回值 TC_OK: 成功。 其他: 错误码。 A.6.1.22 片内存储直接读 原型 TC_INF_ReadRaw( uint32_t ui32PBA, void *pvDesBuf, uint32_t ui32ReadLen ); 功能描述 该函数对片内存储物理块进行读操作。 参数 ui32PBA [IN]物理块地址,用于应用程序升级。 pvDesBuf [OUT]读出缓冲区。 ui32ReadLen [IN]读出长度。 返回值 TC_OK: 成功。 其他: 错误码。 A.6.2 文件管理 A.6.2.1 概述 文件系统至少支持5级目录深度,文件命名与Windows标准文件名格式一致,采用“8.3格式短文 件名”,文件读写公用一个指针。文件管理系统文件写入需实现掉电保护。执行任何具有写功能的 函数遭遇掉电,再次上电后,如果之前执行成功,则为新数据;如果不成功则为原数据。不能为中 间状态,例如一半新数据一半原数据。在扇区对齐的情况下,最小掉电保护空间为2048字节。 文件管理接口函数名称见表A.9。 表A.9 模块 文件管理 文件管理接口函数列表 函数名称 TC_FILE_Init 功能 文件系统初始化 TC_FILE_Mkfs 文件系统格式化 TC_FILE_Getfree 获取文件系统剩余空间 TC_FILE_Open 打开文件 TC_FILE_Close 关闭文件 TC_FILE_Rename 重命名文件 TC_FILE_Seek 设置文件读写指针 TC_FILE_Tell 获取文件读写指针 TC_FILE_Size 获取文件大小 TC_FILE_Write 文件写入 TC_FILE_Read 文件读取 TC_FILE_Truncate 截取文件 TC_FILE_Unlink 删除文件或空目录 TC_FILE_Mkdir 创建目录 TC_FILE_OpenDir 打开目录 其它说明 21 TC_FILE_ReadDir A.6.2.2 读取目录 文件系统初始化 原型 int32_t TC_FILE_Init ( void ); 功能描述 文件系统初始化,完成挂载。厂商可以在该接口中实现断电保护恢复。 参数 返回值 TC_OK: 成功。 其他: 错误码。 A.6.2.3 文件系统格式化 原型 int32_t TC_FILE_Mkfs ( void ); 功能描述 文件系统格式化(清空文件系统,将文件系统设置为可使用)。 参数 返回值 TC_OK: 成功。 其他: 错误码。 A.6.2.4 获取文件管理剩余空间 原型 int32_t TC_FILE_Getfree ( uint32_t *pui32FreeSpace ); 功能描述 获取文件管理剩余空间。 参数 pui32FreeSpace [OUT]剩余空间(字节)。 返回值 TC_OK: 成功。 其他: 错误码。 A.6.2.5 打开文件 原型 int32_t TC_FILE_Open ( TC_FILE *pstFileObject, const char *pcPathName, uint32_t ui32ModeFlags ); 功能描述 打开文件。 参数 pstFileObject [IN]文件句柄结构体。 pcPathName [IN]文件路径和名称。 ui32ModeFlags [IN]文件打开选项,见表A.10。 返回值 TC_OK: 成功。 其他: 错误码。 表A.10 打开选项 宏定义 TC_FILE_OPENMODE_READ 参数 0x01 说明 只读模式打开文件 TC_FILE_OPENMODE_WRITE 0x02 只写模式打开文件 TC_FILE_OPENMODE_OPEN_EXISTING 0x00 打开已存在文件,不存在返回错误 TC_FILE_OPENMODE_OPEN_ALWAYS 0x10 打开文件,若不存在则创建新的文件 TC_FILE_OPENMODE_CREATE_NEW 0x04 创建新的文件,若文件存在返回错误 TC_FILE_OPENMODE_CREATE_ALWAYS 0x08 创建新的文件,若文件存在则被清空 A.6.2.6 关闭文件 22 原型 int32_t TC_FILE_Close ( TC_FILE *pstFileObject ); 功能描述 关闭文件。 参数 pstFileObject [IN]文件句柄结构体。 返回值 TC_OK: 成功。 其他: 错误码。 A.6.2.7 重命名文件 原型 功能描述 参数 int32_t TC_FILE_Rename ( char *pcOldPathName, char *pcNewPathName ); 重命名文件。 pcOldPathName [IN]原路径和名称。 pcNewPathName [IN]新路径和名称。 TC_OK: 成功。 其他: 错误码。 返回值 A.6.2.8 设置文件读写指针 原型 功能描述 参数 int32_t TC_FILE_Seek ( TC_FILE *pstFileObject, uint32_t ui32Offset ); 设置文件读写指针。 pstFileObject [IN]文件句柄结构体。 ui32Offset [IN]偏移值。 TC_OK: 成功。 其他: 错误码。 返回值 A.6.2.9 获取文件读写指针 原型 功能描述 参数 返回值 uint32_t TC_FILE_Tell ( TC_FILE *pstFileObject ); 获取文件读写指针。 pstFileObject [IN]文件句柄结构体。 当前文件指针的位置,该位置是当前文件指针相对于文件开头的偏移量。 A.6.2.10 获取文件大小 原型 功能描述 参数 返回值 uint32_t TC_FILE_Size ( TC_FILE *pstFileObject ); 获取文件大小。 pstFileObject [IN]文件句柄结构体。 文件大小。 A.6.2.11 文件写入 原型 int32_t TC_FILE_Write ( TC_FILE *pstFileObject, ui32ByteToWrite, uint32_t *pui32ByteWritten ); 文件写入。 pstFileObject [IN]文件句柄结构体。 pvSrcBuf [IN]写入数据缓冲区。 ui32ByteToWrite [IN]需要写入长度。 pui32ByteWritten [OUT]实际写入长度。 TC_OK: 成功。 其他: 错误码。 功能描述 参数 返回值 void *pvSrcBuf, uint32_t 23 A.6.2.12 文件读取 原型 int32_t TC_FILE_Read ( TC_FILE *pstFileObject, ui32ByteToRead, uint32_t *pui32ByteRead ); 文件读取。 pstFileObject [IN]文件句柄结构体。 pvDesBuf [IN]读出数据缓冲区。 ui32ByteToRead [IN]需要读出长度。 pui32ByteRead [OUT]实际读出长度 。 TC_OK: 成功。 其他: 错误码。 功能描述 参数 返回值 A.6.2.13 void *pvDesBuf, uint32_t 截取文件 原型 int32_t TC_FILE_Truncate( TC_FILE *pstFileObject ); 功能描述 截取当前文件从零地址到文件读写指针之间的内容,文件读写指针之后的内容抛弃。当前 文件的文件读写指针之后的空间应被系统回收利用。文件读写指针未设置时,指向零地址。不限制 具体实现方法。 参数 pstFileObject [IN]文件句柄结构体。 返回值 TC_OK: 成功。 其他: 错误码 A.6.2.14 删除文件或空目录 原型 int32_t TC_FILE_Unlink ( char *pcPathName ); 功能描述 删除文件或空目录。 参数 pcPathName [IN]目标路径和名称。 返回值 TC_OK: 成功。 其他: 错误码 A.6.2.15 创建目录 原型 int32_t TC_FILE_Mkdir ( char *pcPathName ); 功能描述 创建目录。 参数 pcPathName [IN]目标路径和名称。 返回值 TC_OK: 成功。 其他: 错误码。 A.6.2.16 打开目录 原型 int32_t TC_FILE_OpenDir ( TC_DIR *pstDirObject, char *pcPathName ); 功能描述 打开目录。 参数 pstDirObject [IN]目录句柄结构体。 pcPathName [IN]目标路径和名称。 返回值 TC_OK: 成功。 其他: 错误码。 A.6.2.17 读取目录 原型 int32_t TC_FILE_ReadDir ( TC_DIR *pstDirObject, TC_FILINFO *pstFileInfo ); 24 功能描述 参数 返回值 A.7 读取目录。 pstDirObject pstFileInfo TC_OK: 成功。 其他: 错误码 [IN]目录句柄结构体。 [OUT]读出数据 。 返回代码定义和说明 返回代码见表A.11,生产厂商也可以根据实际需求增加其他返回代码。 表A.11 宏描述 TC_OK TC_PARA_ERROR TC_UNKNOW_ERROR TC_CHIP_INITFAIL TC_RTC_HWFAIL TC_RTC_TIMEERR TC_USB_INITFAIL TC_USB_BUSSRESET TC_INF_INITFAIL TC_INF_MEDIAERR TC_FILE_DISK_ERR TC_FILE_NO_FILE TC_FILE_NO_PATH TC_FILE_INVALID_NAME TC_FILE_EXIST TC_FILE_INVALID_OBJECT TC_FILE_NO_FILESYSTEM 预定义值 0x00000000 0x07000001 0x07000002 0x07000010 0x07000011 0x07000012 0x07000020 0x07000021 0x07000030 0x07000031 0x07000040 0x07000041 0x07000042 0x07000043 0x07000044 0x07000045 0x07000046 返回代码表 说明 成功 参数错 未知数错 芯片初始化失败 RTC硬件操作失败 RTC计时错误 USB初始化失败 检测到usb bus reset 内部储存初始化失败 内部储存媒体错误 磁盘错误 没有文件 没有路径 无效名称 文件已经存在 无效句柄 无文件系统 25 附 录 B (规范性附录) 命令规范-描述出厂固件支持的指令 B.1 连接 宿主与税务UKey采用USB连接,将税务UKey连接宿主上,宿主能自动识别税务UKey,无需安 装驱动程序。 B.2 通信接口与协议 B.2.1 通信接口 宿主与税务UKey采用USB连接,税务UKey做为USB设备,宿主做为USB主机。 USB接口符合《USB 2.0 Specification》规范。 为确保厂商固件下,USB设备识别名称统一,定义USB Inquiry内容如下: uint8_t Inquiry[36] = { 0x00, //Direct Access Device 0x80, //RMB 80 0x02, //ISO/ECMA/ANSI 0x02, //Response Data Format 0x1f, //Additional Length 0x00, //Reserved 0x00, //Reserved 0x00, //Reserved 'S', 'W', 'U', 'K', 'E', 'Y', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }; B.2.2 通信协议 宿主与税务UKey之间进行数据通信采用“命令-应答”的方式,其中宿主作为主动方,税务UKey 为被动方,由宿主发送命令,税务UKey应答。 税务UKey与终端的传输协议符合USB大容量存储类产品批量传输协议(MSC和BOT)。 税务UKey使用默认管道(端点0)枚举为USB大容量存储类设备后,只通过批量传输端点接收 终端发送的命令、数据,回送状态、数据,且一条命令中不提供双向数据传输。 税务UKey支持USB2.0协议。 B.3 通信命令 26 B.3.1 命令格式 命令格式见表B.1。 表B.1 命令格式 命令报文(长度为16B) 0xFE+命令代码(长度为1B)+命令参数(长度为14B,不足补0x00) 数据报文 报文数据包 正确执行请求的应答 应答数据包 不能执行请求的应答 0x09+错误代码 请求 应答 本规范所有没有在相关产品标准中定义的数据除了特别声明外,所有数据应遵循以下规则: a) BCD、HEX数据均右对齐,以0x00(或半字节的0)左补足;STR数据均左对齐,以0x20右补足。 b) 命令代码0x00~0x7F作为应用固件命令;0xFE作为出厂固件命令;0xFF作为引导固件命令;0xE0~0xEF作 为厂商自定义命令代码;其他保留。 c) 不能执行请求时,宿主再次调用USB标准指令获取“0x09+错误代码”。 B.3.2 出厂固件命令代码 出厂固件命令代码见表B.2。 表B.2 命令名 查询固件版本号 命令代码 命令代码 0xFE 参数代码 0x01 外部认证 不需要 设置出厂信息 0xFE 0x02 不需要 查询出厂信息 0xFE 0x03 不需要 检测硬件模块 0xFE 0x04 不需要 内部认证 0xFE 0x05 不需要 读取内部认证密文 0xFE 0x06 不需要 读取随机数 0xFE 0x07 不需要 外部认证 0xFE 0x08 不需要 进入芯片启动区 0xFE 0x09 需要 重新启动 0xFE 0x0A 不需要 B.3.3 出厂固件命令详解 B.3.3.1 查询固件版本号 备注 命令报文: 偏移 数据域 长度 数据值 0 bCmdCode 1 0xFE 1 bCmdSubCode 1 0xFE 2 bCmdTypeCode 1 0x01 描述 功能描述:税务UKey向宿主返回出厂固件版本号信息(7B,BCD)。 B.3.3.2 设置出厂信息 27 命令报文: 偏移 数据域 长度 数据值 0 bCmdCode 1 0xFE 1 bCmdSubCode 1 0xFE 2 bCmdTypeCode 1 0x02 3 bCmdIden 1 描述 0x01:硬件版本号信息(7B,BCD) 0x02:生产时间(7B,BCD) 0x03:税务UKey编号(6B,BCD) 0x04:当前时钟时间(7B,BCD) 其他:保留 功能描述:宿主向税务UKey发送出厂信息,税务UKey保存到对应的厂商信息数据区。 B.3.3.3 查询出厂信息 命令报文: 偏移 数据域 长度 数据值 0 bCmdCode 1 0xFE 1 bCmdSubCode 1 0xFE 2 bCmdTypeCode 1 0x03 3 bCmdIden 1 描述 0x01:硬件版本号信息(7B,BCD) 0x02:生产时间(7B,BCD) 0x03:税务UKey编号(6B,BCD) 0x04:当前时钟时间(7B,BCD) 其他:保留 功能描述:税务UKey向宿主返回查询到的出厂信息。 B.3.3.4 检测硬件模块 命令报文: 偏移 数据域 长度 数据值 0 bCmdCode 1 0xFE 1 bCmdSubCode 1 0xFE 2 bCmdTypeCode 1 0x04 3 bCmdIden 1 描述 0x01:主控芯片RAM(厂商自行设计方法验证RAM无 坏点,不做统一要求) 0x02:片外存储芯片 0x03:RTC 其他:保留 功能描述:税务UKey向宿主返回检测结果(1B,HEX),0x00-通过,0x01-不通过。 B.3.3.5 内部认证 命令报文: 偏移 数据域 长度 数据值 0 bCmdCode 1 0xFE 描述 28 1 bCmdSubCode 1 0xFE 2 bCmdTypeCode 1 0x05 功能描述:税务UKey接收16B数据明文,使用厂商传输密钥,加密后生成16字节数据密文,通 过“读取内部认证密文”命令获取密文数据结果。每个税务UKey的厂商传输密钥都不相同,厂商传 输密钥由税局提供,由厂商自行写入产品中,厂商需保证传输密钥安全,本规范不做详细要求。 B.3.3.6 读取内部认证密文 命令报文: 偏移 数据域 长度 数据值 0 bCmdCode 1 0xFE 1 bCmdSubCode 1 0xFE 2 bCmdTypeCode 1 0x06 描述 功能描述:税务UKey向宿主返回16字节数据密文,用于内部认证。 B.3.3.7 生成随机数 命令报文: 偏移 数据域 长度 数据值 0 bCmdCode 1 0xFE 1 bCmdSubCode 1 0xFE 2 bCmdTypeCode 1 0x07 描述 功能描述:税务UKey向宿主返回16字节随机数。 B.3.3.8 外部认证 命令报文: 偏移 数据域 长度 数据值 0 bCmdCode 1 0xFE 1 bCmdSubCode 1 0xFE 2 bCmdTypeCode 1 0x08 描述 功能描述:宿主需先调用税务UKey“生成随机数”命令得到16字节随机数,使用厂商传输密钥, 将该随机数加密后通过“外部认证”命令写入税务UKey,税务UKey验证数据密文的合法性。 B.3.3.9 进入芯片启动区 命令报文: 偏移 数据域 长度 数据值 0 bCmdCode 1 0xFE 1 bCmdSubCode 1 0xFE 2 bCmdTypeCode 1 0x09 描述 功能描述:宿主向税务UKey发送进入芯片启动区指令,税务UKey执行擦除固件代码区,并自 动执行重启操作。 B.3.3.10 重新启动 29 命令报文: 偏移 数据域 长度 数据值 0 bCmdCode 1 0xFE 1 bCmdSubCode 1 0xFE 2 bCmdTypeCode 1 0x0A 描述 功能描述:对税务UKey进行软复位。 B.4 返回代码定义和说明 返回代码见表B.3 厂商也可以根据实际需求增加其他返回代码。 表B.3 错误类型代码 0x0 0x1000 0x1001 0x1002 0x1003 0x1004 0x101X 返回代码表 说明 成功 未知错误 非法命令 参数有误 无法执行该命令,安全条件不满足 存储操作失败 认证失败,还剩下X次重试机会,最大次数为8次。 30 附 录 C (规范性附录) 数据格式 C.1 产品编号 C.1.1 税务UKey编号 税务UKey编号由本体码和校验码组成,共12位十进制数字,从左至右共4部分。前3部分为本体 码,第4部分为校验码。 第1部分税务UKey厂商编号:2位数字; 第2部分产品代号:1位数字,税务UKey为7; 第3部分序列号:8位数字; 第4部分校验码:1位数字。 举例:例如税务UKey本体码为01712345678; 第一步,计算本体码数字值与对应位置上加权因子的乘积: I 1 2 3 4 5 6 7 8 9 10 11 Wi 2 1 6 3 7 9 10 5 8 4 2 Ci 0 1 7 1 2 3 4 5 6 7 8 Ci×Wi 0 1 42 3 14 27 40 25 48 28 16 第二步,计算级数和为244; 第三步,使用求余函数,先模11求余为2,用11与2的差9,再模10求余结果为9,数字9即为校验 码。 该税务UKey编号为017123456789 C.2 C.2.1 产品版本号 概述 版本号总体规则由:生产厂商代码(2位数字,可选)+主版本号(2位数字)+副版本号(4位 数字)+定版时间(6位数字,YYMMDD)组成,共14位十进制数字。 根据应用场景进行裁剪及固定定义。 工具类可以将主版本号和副版本号高位‘0’省略,采用‘.’间隔显示。 固件类直接采用字节显示。具体见示例。 C.2.2 硬件版本号 31 固定为:生产厂商代码(2位数字)+主版本号(2位数字)+副版本号(4位数字)+定版时间 (6位数字,YYMMDD),要求丝印在电路板上。 生成厂商代码(2位数字):固定为税务UKey入围的生产厂商代码。 主版本号(2位数字):由税局统一定义。 副版本号(4位数字):厂商定义。 PCBA版本号可通过工厂生产工具写入到税务UKey厂商信息文件前。 示例:“01010001190610”。 C.2.3 BSP支持库版本号 固定为:生成厂商代码(2位数字)+主版本号(2位数字)+副版本号(4位数字)+定版时间 (6位数字,YYMMDD) 生成厂商代码(2位数字):固定为税务UKey入围的生产厂商代码。 主版本号(2位数字):由税局统一定义。 副版本号(4位数字):厂商定义。 示例:“01010001190610”。 C.2.4 出厂固件版本号 固定为:生成厂商代码(2位数字)+主版本号(2位数字)+副版本号(4位数字)+定版时间 (6位数字,YYMMDD) 生成厂商代码(2位数字):固定为税务UKey入围的生产厂商代码。 主版本号(2位数字):由税局统一定义。 副版本号(4位数字):厂商定义。 示例:“01010001190610”。 32 国家税务总局电子税务管理中心承办 办公厅2019年7月16日印发