首页
开源
资讯
活动
开源许可证
软件工程云服务
软件代码质量检测云服务
持续集成与部署云服务
社区个性化内容推荐服务
贡献审阅人推荐服务
群体化学习服务
重睛鸟代码扫描工具
登录
注册
代码拉取完成,页面将自动刷新
Watch
26
Star
74
Fork
32
珠海杰理科技
/
fw-AD15N
Fork 仓库
加载中
取消
确认
代码
Issues
204
Pull Requests
0
Wiki
2
统计
更新失败,请稍后重试!
Issues
/
详情
移除标识
内容风险标识
本任务被
标识为内容中包含有代码安全 Bug 、隐私泄露等敏感信息,仓库外成员不可访问
FAQ:关于AC104 / AD14 / AD15 / AD17 / AD18芯片 如何在SDK里计算app.bin的crc值
待办的
#IAOL0V
啟名
创建于
2024-09-03 19:57
### 一、简介 本ISSUE为 AC104 / AD14 / AD15 / AD17 / AD18芯片 如何在SDK里计算app.bin的crc值 ### 二、涉及SDK版本 AD1x-4578_AC104-release_v1.8.0 各芯片各工程。 (若需要其他工程或者其他SDK版本,请在本issue下方或者开源群提出需求) ### 三、补丁链接 补丁链接为补丁文件 和 v1.8.0 SDK的修改demo。 链接: https://pan.baidu.com/s/17-3aJI3iXu71fPfCnjBT0w?pwd=ce5r 提取码: ce5r ### 四、计算app.bin文件crc值流程(以AD14为例) 1.替换cpu_lib.a 2.app.bin的组成可由download_bat.c里了解到。 app.bin = app_code区域 + data区域 + debug_data区域 其中 app_code区域 是放在了flash区域,而 data区域 和 debug_data区域的数据是放在了ram0里。 (其中app_code区域的数据已固化在flash当中) (当数据放在了ram0里,程序要运行的时候如果修改了该部分区域的数据,此时再去计算该区域的crc会导致最终crc值改变,所以在计算data区域和debug_data区域的crc值需要在main函数最前面执行) ![输入图片说明](https://foruda.gitee.com/images/1725364042261922557/f4033cac_10929185.png "屏幕截图") 3.在app_ld.c文件里添加需要计算app_code / data / debug_data 区域的起始符号。 (详细添加地方也可参考补丁文件里的demo SDK里的voice_toy工程的app_ld.c) ![输入图片说明](https://foruda.gitee.com/images/1725363965676552328/2cdfbd76_10929185.png "屏幕截图") 4.在main函数最前面获取到app_code / data / debug_data 区域的起始地址和大小,即可计算得到app.bin的crc值。 (注意:data / debug_data 区域的数据在程序运行时会被修改到,导致程序在每个阶段算出来的crc值不一样,所以需要在main函数就开始计算其crc值来确保和下载目录里的app.bin crc值一致) ![输入图片说明](https://foruda.gitee.com/images/1725363822923659524/16403126_10929185.png "屏幕截图") get_app_bin_crc()函数原型如下: ``` u32 get_app_bin_crc() { //把app_ld.c 的app_code / data / debug_data 区域的起始地址 和 末尾地址extern出来 extern const u8 app_code_real_begin[]; extern const u8 app_code_real_end[]; extern const u8 data_buf_start[]; extern const u8 data_buf_end[]; extern const u8 debug_buf_start[]; extern const u8 debug_buf_end[]; u32 app_code_begin = (u32)app_code_real_begin; u32 app_code_end = (u32)app_code_real_end; u32 data_begin = (u32)data_buf_start; u32 data_end = (u32)data_buf_end; u32 debug_data_begin = (u32)debug_buf_start; u32 debug_data_end = (u32)debug_buf_end; u32 app_code_len = app_code_end - app_code_begin; //app_code区域的大小 u32 data_len = data_end - data_begin; //data区域的大小 u32 debug_data_len = debug_data_end - debug_data_begin; //debug_data区域的大小 //计算 app_code 区域的CRC值 u32 app_code_crc = CRC16((void *)app_code_begin, app_code_len); //计算 app_code 和 data 区域的CRC值 u32 app_bin_crc1 = CRC16_with_initval((void *)data_begin, data_len, app_code_crc); //计算 app_code 和 data 和 debug_data 区域的CRC值(app_bin_crc2 即最终app.bin文件的crc值) u32 app_bin_crc2 = CRC16_with_initval((void *)debug_data_begin, debug_data_len, app_bin_crc1); return app_bin_crc2; } ```
### 一、简介 本ISSUE为 AC104 / AD14 / AD15 / AD17 / AD18芯片 如何在SDK里计算app.bin的crc值 ### 二、涉及SDK版本 AD1x-4578_AC104-release_v1.8.0 各芯片各工程。 (若需要其他工程或者其他SDK版本,请在本issue下方或者开源群提出需求) ### 三、补丁链接 补丁链接为补丁文件 和 v1.8.0 SDK的修改demo。 链接: https://pan.baidu.com/s/17-3aJI3iXu71fPfCnjBT0w?pwd=ce5r 提取码: ce5r ### 四、计算app.bin文件crc值流程(以AD14为例) 1.替换cpu_lib.a 2.app.bin的组成可由download_bat.c里了解到。 app.bin = app_code区域 + data区域 + debug_data区域 其中 app_code区域 是放在了flash区域,而 data区域 和 debug_data区域的数据是放在了ram0里。 (其中app_code区域的数据已固化在flash当中) (当数据放在了ram0里,程序要运行的时候如果修改了该部分区域的数据,此时再去计算该区域的crc会导致最终crc值改变,所以在计算data区域和debug_data区域的crc值需要在main函数最前面执行) ![输入图片说明](https://foruda.gitee.com/images/1725364042261922557/f4033cac_10929185.png "屏幕截图") 3.在app_ld.c文件里添加需要计算app_code / data / debug_data 区域的起始符号。 (详细添加地方也可参考补丁文件里的demo SDK里的voice_toy工程的app_ld.c) ![输入图片说明](https://foruda.gitee.com/images/1725363965676552328/2cdfbd76_10929185.png "屏幕截图") 4.在main函数最前面获取到app_code / data / debug_data 区域的起始地址和大小,即可计算得到app.bin的crc值。 (注意:data / debug_data 区域的数据在程序运行时会被修改到,导致程序在每个阶段算出来的crc值不一样,所以需要在main函数就开始计算其crc值来确保和下载目录里的app.bin crc值一致) ![输入图片说明](https://foruda.gitee.com/images/1725363822923659524/16403126_10929185.png "屏幕截图") get_app_bin_crc()函数原型如下: ``` u32 get_app_bin_crc() { //把app_ld.c 的app_code / data / debug_data 区域的起始地址 和 末尾地址extern出来 extern const u8 app_code_real_begin[]; extern const u8 app_code_real_end[]; extern const u8 data_buf_start[]; extern const u8 data_buf_end[]; extern const u8 debug_buf_start[]; extern const u8 debug_buf_end[]; u32 app_code_begin = (u32)app_code_real_begin; u32 app_code_end = (u32)app_code_real_end; u32 data_begin = (u32)data_buf_start; u32 data_end = (u32)data_buf_end; u32 debug_data_begin = (u32)debug_buf_start; u32 debug_data_end = (u32)debug_buf_end; u32 app_code_len = app_code_end - app_code_begin; //app_code区域的大小 u32 data_len = data_end - data_begin; //data区域的大小 u32 debug_data_len = debug_data_end - debug_data_begin; //debug_data区域的大小 //计算 app_code 区域的CRC值 u32 app_code_crc = CRC16((void *)app_code_begin, app_code_len); //计算 app_code 和 data 区域的CRC值 u32 app_bin_crc1 = CRC16_with_initval((void *)data_begin, data_len, app_code_crc); //计算 app_code 和 data 和 debug_data 区域的CRC值(app_bin_crc2 即最终app.bin文件的crc值) u32 app_bin_crc2 = CRC16_with_initval((void *)debug_data_begin, debug_data_len, app_bin_crc1); return app_bin_crc2; } ```
评论 (
0
)
啟名
创建了
任务
登录
后才可以发表评论
状态
待办的
待办的
进行中
已完成
已关闭
负责人
未设置
标签
未设置
标签管理
里程碑
未关联里程碑
未关联里程碑
Pull Requests
未关联
未关联
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
未关联
分支 (1)
标签 (10)
main
AD1x-4578_AC104-release_v1.8.0
AD1x-457_AC104-release_v1.7.0
ad14n_ad15n_ac104n-release_v1.6.0
ad14n-ad15n-release_V1.5.1
ad14n-ad15n-release_V1.5.0
ad14n-ad15n-release_V1.4.0
ad14n-ad15n-release_V1.3.0
ad14n-ad15n-release_V1.2.2
ad14n-ad15n-release_V1.1.0
ad150-release_V1.0.2
开始日期   -   截止日期
-
置顶选项
不置顶
置顶等级:高
置顶等级:中
置顶等级:低
优先级
不指定
严重
主要
次要
不重要
参与者(1)