ESP32 flash地址如何重映射到ram(以实现ECU参数在线标定)

chenkejin
Posts: 11
Joined: Sun Aug 14, 2022 3:38 pm

ESP32 flash地址如何重映射到ram(以实现ECU参数在线标定)

Postby chenkejin » Sun Aug 14, 2022 3:42 pm

在汽车ECU开发中,需要发动机/整车参数在线标定,通常用CCP/XCP协议。
问题:标定参数通常定义在flash一片内存中,同时会划分相同大小的一片ram内存。
ECU初始化时,会把Flash中的值拷贝到对应ram内存中,当在线标定时,会直接操作ram中相应的地址,以实现参数在线修改。
请问ESP32如何实现Flash到ram重映射这种功能呢?

通常的做法是使用重映射,或者使用mmu。
但是esp32的mmu无法将flash地址重映射到指定的ram区域里。

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: ESP32 flash地址如何重映射到ram(以实现ECU参数在线标定)

Postby ESP_Gargamel » Mon Aug 15, 2022 11:59 am

看上去,这句话:
ECU初始化时,会把Flash中的值拷贝到对应ram内存中,当在线标定时,会直接操作ram中相应的地址,以实现参数在线修改。
就 OK 了。为什么还要映射?而且就算映射过去,也没法直接改写 flash 里的内容。你是希望把在线修改完的数据再回写到 flash?

chenkejin
Posts: 11
Joined: Sun Aug 14, 2022 3:38 pm

Re: ESP32 flash地址如何重映射到ram(以实现ECU参数在线标定)

Postby chenkejin » Tue Aug 16, 2022 2:03 am

你是希望把在线修改完的数据再回写到 flash? 答:是的。

chenkejin
Posts: 11
Joined: Sun Aug 14, 2022 3:38 pm

Re: ESP32 flash地址如何重映射到ram(以实现ECU参数在线标定)

Postby chenkejin » Tue Aug 16, 2022 2:04 am

这个功能主要是

chenkejin
Posts: 11
Joined: Sun Aug 14, 2022 3:38 pm

Re: ESP32 flash地址如何重映射到ram(以实现ECU参数在线标定)

Postby chenkejin » Tue Aug 16, 2022 2:11 am

抱歉,不知道论坛的规矩。我习惯性按了ctrl+enter导致信息没写完就被发送了。这个功能主要是实现在线优化调参,然后再烧写入ecu。通常在汽车里,通过can总线使用xcp协议在线修改单片机里指定地址的变量的值,实现在线修改变量的值。可修改的标定量被写成const,但是const的变量无法在线修改,所以需要把被写成const的变量映射到ram里进行修改。在线调试得到最优参数后,我将重新烧写。
Attachments
2022-08-16_101101.jpg
2022-08-16_101101.jpg (878.21 KiB) Viewed 5711 times

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: ESP32 flash地址如何重映射到ram(以实现ECU参数在线标定)

Postby ESP_Gargamel » Tue Aug 16, 2022 4:12 am

你需要处理的参数是否有一定的结构?比如包含参数 A 及对应值 a,参数 B 及对应值 b,。。。
参数总共多长?

当前你的参数定义成 const,是直接编译到目标二进制里面,就算能映射,能修改,也会导致修改后启动因为校验不过起不来。

建议你新建一个 NVS 分区来存你的参数,可以按参数名来保存,在线修改后也可以直接写入。具体请看 IDF 的 NVS 相关文档和使用手册。
https://docs.espressif.com/projects/esp ... flash.html
https://docs.espressif.com/projects/esp ... n_gen.html

Who is online

Users browsing this forum: No registered users and 82 guests