硬汉嵌入式论坛

 找回密码
 立即注册
查看: 9787|回复: 12
收起左侧

[辅助工具] 分享一个Cortex M 的FLASH算法提取器,用来解析FLM或FLX文件,使用H7-TOOL中的算法代码

  [复制链接]

1

主题

74

回帖

77

积分

初级会员

积分
77
发表于 2021-3-22 11:53:02 | 显示全部楼层 |阅读模式
本帖最后由 JIAYU 于 2021-3-23 09:49 编辑

感谢H7-TOOL的开源,我把其中FLM中提取FLASH下载算法的代码移植到了PC上,由原来的C 转成了C#
由于C#没有指针,移植的过程相当痛苦

特意来分享一下

软件界面:
1.jpg

点击保存:
2.jpg

.c文件里面的内容

  1. #include "S29JL032H_BOT.h"

  2. static const uint8_t  flash_code[] = {
  3.     0x00, 0xBE, 0x0A, 0xE0, 0x0D, 0x78, 0x2D, 0x06, 0x68, 0x40, 0x08, 0x24, 0x40, 0x00, 0x00, 0xD3,
  4.     0x58, 0x40, 0x64, 0x1E, 0xFA, 0xD1, 0x49, 0x1C, 0x52, 0x1E, 0x00, 0x2A, 0xF2, 0xD1, 0x70, 0x47,
  5.     0x10, 0xB5, 0x01, 0x88, 0x4E, 0x4C, 0xC1, 0xF3, 0x80, 0x13, 0x4C, 0x44, 0x21, 0x60, 0x01, 0x88,
  6.     0x21, 0x60, 0xC1, 0xF3, 0x80, 0x12, 0x9A, 0x42, 0x0C, 0xD0, 0x13, 0x46, 0x89, 0x06, 0xF6, 0xD5,
  7.     0x01, 0x88, 0x21, 0x60, 0xC1, 0xF3, 0x80, 0x12, 0x01, 0x88, 0x21, 0x60, 0xC1, 0xF3, 0x80, 0x11,
  8.     0x91, 0x42, 0x01, 0xD1, 0x00, 0x20, 0x10, 0xBD, 0xF0, 0x21, 0x01, 0x80, 0x01, 0x20, 0x10, 0xBD,
  9.     0x3F, 0x49, 0x49, 0x44, 0x48, 0x60, 0x00, 0x20, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, 0x30, 0xB5,
  10.     0x3B, 0x4C, 0xAA, 0x21, 0x4C, 0x44, 0x60, 0x68, 0xA0, 0xF8, 0xAA, 0x1A, 0x55, 0x22, 0xA0, 0xF8,
  11.     0x54, 0x25, 0x80, 0x23, 0xA0, 0xF8, 0xAA, 0x3A, 0xA0, 0xF8, 0xAA, 0x1A, 0xA0, 0xF8, 0x54, 0x25,
  12.     0x10, 0x21, 0xA0, 0xF8, 0xAA, 0x1A, 0x4F, 0xF6, 0xFF, 0x75, 0x60, 0x68, 0xFF, 0xF7, 0xC0, 0xFF,
  13.     0x08, 0xB1, 0x01, 0x20, 0x30, 0xBD, 0x60, 0x68, 0x00, 0x88, 0xA8, 0x42, 0xF5, 0xD1, 0x00, 0x20,
  14.     0x30, 0xBD, 0x30, 0xB5, 0x04, 0x46, 0x2A, 0x48, 0xAA, 0x21, 0x48, 0x44, 0x40, 0x68, 0xA0, 0xF8,
  15.     0xAA, 0x1A, 0x55, 0x22, 0xA0, 0xF8, 0x54, 0x25, 0x80, 0x23, 0xA0, 0xF8, 0xAA, 0x3A, 0xA0, 0xF8,
  16.     0xAA, 0x1A, 0xA0, 0xF8, 0x54, 0x25, 0x30, 0x20, 0x20, 0x80, 0x21, 0x49, 0x49, 0x44, 0x20, 0x88,
  17.     0x08, 0x60, 0x00, 0x07, 0xFB, 0xD5, 0x4F, 0xF6, 0xFF, 0x75, 0x20, 0x46, 0xFF, 0xF7, 0x98, 0xFF,
  18.     0x08, 0xB1, 0x01, 0x20, 0x30, 0xBD, 0x20, 0x88, 0xA8, 0x42, 0xF6, 0xD1, 0x00, 0x20, 0x30, 0xBD,
  19.     0x2D, 0xE9, 0xF0, 0x4D, 0x04, 0x46, 0xF0, 0x20, 0x15, 0x46, 0x20, 0x80, 0xDF, 0xF8, 0x50, 0x80,
  20.     0x00, 0x26, 0x4F, 0xF0, 0xAA, 0x0A, 0xC8, 0x44, 0x4F, 0xF0, 0x55, 0x0B, 0x01, 0xF1, 0x01, 0x0C,
  21.     0x18, 0xE0, 0xD8, 0xF8, 0x04, 0x00, 0xA0, 0xF8, 0xAA, 0xAA, 0xA0, 0xF8, 0x54, 0xB5, 0xA0, 0x21,
  22.     0xA0, 0xF8, 0xAA, 0x1A, 0x28, 0x88, 0x20, 0x80, 0x2F, 0x88, 0x20, 0x46, 0xFF, 0xF7, 0x70, 0xFF,
  23.     0x10, 0xB1, 0x01, 0x20, 0xBD, 0xE8, 0xF0, 0x8D, 0x20, 0x88, 0xB8, 0x42, 0xF5, 0xD1, 0xAD, 0x1C,
  24.     0xA4, 0x1C, 0x76, 0x1C, 0xB6, 0xEB, 0x5C, 0x0F, 0xE3, 0xD3, 0x00, 0x20, 0xF2, 0xE7, 0x00, 0x00,
  25.     0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  26. };


  27. const program_target_t flash_algo = {
  28.     0x20000061,         // Init
  29.     0x2000006B,         // UnInit
  30.     0x2000006F,         // EraseChip
  31.     0x200000B3,         // EraseSector
  32.     0x20000101,         // ProgramPage
  33.     //0x00000000,         // CheckBlank
  34.     //0x00000000,         // Verify

  35.     // BKPT : start of blob + 1
  36.     // RSB  : address to access global/static data
  37.     // RSP  : stack pointer
  38.     {
  39.     0x20000001,
  40.     0x20000570,
  41.     0x20002000
  42.     },

  43.     0x20000170,         // mem buffer location
  44.     0x20000000,         // location to write prog_blob in target RAM
  45.     sizeof(flash_code), // prog_blob size
  46.     flash_code,         // address of prog_blob
  47.     0x00000400,         // ram_to_flash_bytes_to_be_written
  48. };
复制代码







CortexM FLASH算法提取器.rar (37.95 KB, 下载次数: 362)
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2021-5-15 13:30:47 | 显示全部楼层
牛逼啊.....!
回复

使用道具 举报

2

主题

15

回帖

26

积分

新手上路

积分
26
发表于 2022-9-9 13:44:35 | 显示全部楼层
请问这个地方的地址是如何能直接从文件中获取的呢?
const program_target_t flash_algo = {
    0x20000061,         // Init
    0x2000006B,         // UnInit
    0x2000006F,         // EraseChip
    0x200000B3,         // EraseSector
    0x20000101,         // ProgramPage
    //0x00000000,         // CheckBlank
    //0x00000000,         // Verify
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115455
QQ
发表于 2022-9-9 14:35:47 | 显示全部楼层
yinjinzhong 发表于 2022-9-9 13:44
请问这个地方的地址是如何能直接从文件中获取的呢?
const program_target_t flash_algo = {
    0x20000 ...

对. FLM里面可以提取出来。
回复

使用道具 举报

2

主题

15

回帖

26

积分

新手上路

积分
26
发表于 2022-9-9 16:06:20 | 显示全部楼层
如果我需要将上面的这个文件,打包为一个bin文件,然后通过ota穿到ram中,后面烧录其他程序的时候使用。
这个bin文件,应该如何生成呢?
回复

使用道具 举报

2

主题

15

回帖

26

积分

新手上路

积分
26
发表于 2022-9-9 17:24:46 | 显示全部楼层
已经想到办法了,可以直接在工程文件中做单独位置加载。
然后通过mdk的fromelf 命令,分为2个文件,应该是可以的。
类似原来的字库的做法。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2023-3-24 17:33:32 | 显示全部楼层
非常好,感谢感谢
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2023-6-20 10:28:25 | 显示全部楼层
大佬 有没有源码分享一下
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-6-11 21:27:55 | 显示全部楼层
为啥不同的算法转换软件转出来的 函数入口地址会有差异?而且有些函数转换不全呢?

函数不全嘛,还好理解。但入口地址不一样,这个不会出错吗?
回复

使用道具 举报

1

主题

74

回帖

77

积分

初级会员

积分
77
 楼主| 发表于 2024-6-17 09:10:46 | 显示全部楼层
Armoric 发表于 2024-6-11 21:27
为啥不同的算法转换软件转出来的 函数入口地址会有差异?而且有些函数转换不全呢?

函数不全嘛,还好理 ...

还有这种事情?肯定是识别错了
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2025-1-20 15:05:30 | 显示全部楼层
XXFXXXXXXX
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2025-1-20 15:05:59 | 显示全部楼层
非常好,感谢感谢
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2025-1-22 17:18:50 | 显示全部楼层
非常好,感谢感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-26 17:33 , Processed in 0.344076 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表