libero ProASIC3 A3P250 JTAG-DirectC 烧录文件格式解析
文档参考: .dat 文件格式 DirectC P26 页面



文件头部信息 共计 69字节, 解析如下:
版本 24字节 → Designer 11.10.0.4
header 长度 0x45 = 69个字节
image size 0x0003A7AF = 239535 字节, 这里 我看了 一下 jtag_top.dat 整个文件大小 正好是 239535 个 字节 !
数据压缩标志 0x00
M1/P1/M7 标志 0x00
目标ID 0x03A141CF
工具版本号: 00.01
主版本号:00.01
Core Support Flag:01
FORM Support Flag : 00; A3P250 有 1Kbits 的 FLASH ROM 存储, 但是 此固件 没有 初始化 FLASH ROM 的相关信息!, FLAG 为 0
NVM Support Flag:00 此固件不包含 NVM 存储信息, 因为 A3P250 没有 NVM , smartfusion2 有 NVM。
中间 加密 NVM 等 都不支持!
Device Exception Flag : 设备异常标志, 0x0001. 这里为啥是 1 , 不理解!有异常?
SD titles : 应该是 Scan Domain 扫描域 = 4 !
Mapped rows = 0x08FC = 2300 行! 干啥用的 暂时不理解!
BSR length = 0x02C4 = 708 , BSR 是 啥 未知!
data block 数量 6个!
Look-up Table Description , 数了下 共计 6个表!和 头文件 中 data block 保持一致!

第6个块 数完, 第一个字节地址 0x7B 正好对应 第一个块 数据地址!

最后一个块编号 0x06 数据地址: 0x0003A745 , 数据长度 0x68 , 计算 两者之和 = 0x3A7AD 在加 2个 校验 = 0x3A7AF 正好 等于 整个文件大小!

DirectC dpG3alg.h 文件里 ,6个数据块 对应 含义 如下,
这里 的 每行 104字节 ,分成 4个 SDNumber , 每次 104/4 = 26 字节 ,与程序中 ARRAY_ROW_LENGTH = 26相等;
DirectC 文件 dpcore.c / 579 / dp_load_row_data 函数/

整个文件 的 最后 两个 字节 是 CRC 校验值!
校验方法:
void dp_compute_crc(void) { for (global_uchar2 = 0u; global_uchar2 < 8u; global_uchar2++) { global_uint2 = (global_uchar1 ^ global_uint1) & 0x01u; global_uint1 >>= 1u; if (global_uint2) { global_uint1 ^= 0x8408u; } global_uchar1 >>= 1u; } return; }
DirectC dpG3alg.h 文件里 :
浙公网安备 33010602011771号