8.1.2、写文件
在发送该命令前请先发送开始写文件命令,以判断是否有足够空间存储该文件。该命令用于发送文件数据到控制器,如果文件大小不超出控制器接收缓冲区(6代字库卡最大为1024Byte, 5代字库卡最大为 512Byte)的大小,可以单包发送。如果已经超出接收缓冲区大小,则必须分包发送,分包大小可以自行定义。
参数 | 数据长 度 | 默认 值 | 描述 |
CmdGroup | 1 | 0XA1 | 命令分组编号 |
Cmd | 1 | 0x06 | 命令编号 |
Response | 1 | 0x01 | 是否要求控制器回复: 0x01控制器必须回复 0x02控制器不必回复。 |
Reserved | 2 | 0 | 保留 |
FileName | 4 | 文件名,参考节目文件格式 | |
LastBlockFlag | 1 | 0x00 | 用于标志是否最后一包 0x00 不是最后一包 0x01 最后一包。 |
BlockNum | 2 | 包号,如果是单包发送,则默认为0x00。 | |
BlockLen | 2 | 包长,若是单包发送,此处为文件长度。 | |
BlockAddr | 4 | 本包数据在文件中的起始位置,如果是单包发送,此处默 认为 0。 | |
Data | N | 文件包数据,参考节目文件格式。 |
控制器接收完最后一个Block后,需对整个文件进行CRC16校验,如校验错误则返回ERR_FILE_CRC16错误。控制器接收完一个文件后,如校验出现错误(ERR_FILE_CRC16,ERR_FIRMWARE_TYPE),控制器会自动删除此文件。如BlockAddr出错,即BlockAddr不连续则返回ERR_FILE_BLOCK_NUM错误状态 和即将要写的块地址。返回值为:
参数 | 数据 长度 | 默认值 | 描述 |
CmdGroup | 1 | 0xA1 | 命令分组编号 |
Cmd | 1 | 0x06 | 命令编号 |
CmdError | 1 | 命令处理状态 | |
Reserved | 2 | 0 | 保留 |
BlockAddr | 4 | 包地址,如果当前包成功接收则返回下一包的文件地址,否则返回当前包的文件地址。 |
命令示例7:
A5 A5 A5 A5 A5 A5 A5 A5 FE FF 00 80 00 00 00 00 00 00 FE 02 59 00 A1 06 01 00 00 50 30 30 30 01 00 00 47 00 00 00 00 00 00 50 30 30 30 47 00 00 00 FF 00 00 01 FF FF FF FF FF FF FF FF 01 00 00 01 2C 00 00 00 00 00 80 00 00 80 80 20 00 FF 00 00 00 00 00 00 00 02 02 02 00 0A OA OD 00 00 00 BB B6 D3 AD B9 E2 C1 D9 4F 6E 62 6F 6E OF 18 EC FO 5A
相应写命令发送后,控制卡返回ACK后,发送命令7。命令7为发送的节目1的内容,节目名为P000。具 体分析见下表。
参数 | 数据 | 描述 |
命令分组 | A1 | 命令分组编号 |
命令编号 | 06 | 命令编号 |
控制器是否回复 | 01 | 需要回复 |
保留字节 | 00 00 | 2个保留字节 |
文件名 | 50303030 | 文件名 |
是否最后包 | 01 | 最后一包 |
包号 | 00 00 | 包号 |
包长 | 47 00 | 包长(低位 在前) |
包位置 | 00 00 00 00 | 包位置默认为0。 |
数 据 | 00 50 30 30 30 47 00 00 00 FF 00 00 01 FF FF FF FF FF FF FF FF 01 00 00 01 2C 00 00 00 00 00 80 00 00 80 80 20 00 FF 00 00 00 00 00 00 00 02 02 02 00 0A 0A 0D 00 00 00 BB B6 D3 AD B9 E2 C1 D9 4F 6E 62 6F 6E0F 18 | 文件包数据, 参考节目文件格式 |