基于stm32的uds Boot调试成功--Apple的学习笔记

一,前言

之前说找个周末调试下boot中移植过来的uds协议。那么我用原来单片机代码配对的上位机来进行调试。还是比较顺利的,3个小时调试完成。

二,遇到的问题

  1. 外部flash下载不成功。
    原因我外部flash制作错误,生成hex的地址应该是ram地址,因为外部flash用来copy到内容ram区域来用的。链接存放地址修改为ram地址了。
LR_IROM1 0x20001000 0x1000  {    ; load region size_region
  ER_IROM1 0x20001000 0x1000  {  ; load address = execution address
   *.o (.flashVar, +First)
   .ANY (.flashFunction)
   .ANY (+RO)
  }
  RW_IRAM1 0x20002000 0x0001E000  {  ; RW data
   .ANY (+RW +ZI)
  }
}
  1. 34传入的长度后返回NRC
    原因是PC端boot工具中填写的地址不能加上首地址,反正需要配对,哪里有负响应码,就去哪个DID函数中调试即可。问题瞬间解决。

  2. flash擦除成功,但是crc检查错误
    直接查flash区间的内容,发现没有写入,区间内容都是0xff。原因是我自己写的flash驱动write函数没有添加解锁,导致无法写入。

  3. 刷新完成后没有复位
    原因是我一开始注释掉了最后11复位功能,而且初始化上电检查有效性后直接跳转到app也被我注释掉了,添加上这部分的stm32的驱动代码即可。

三,效果

顺利跳转到app,哈哈~用canalzyer录制了报文。刷新流程的step2的头部及尾部的一些命令如下


image.png

四,小结

boot UDS的单片机端通过先移植协议及框架然后修改驱动,很快就完成了。

你可能感兴趣的:(基于stm32的uds Boot调试成功--Apple的学习笔记)