编译好的程序是从Flash的哪个地址开始写入Flash的? 以后的每个地址是按照怎样的规律变化的? 下面是我监控的STM32一次下载过程,使用的是串口下载,得到的上位机软件通过串口发送给STM32的待写入程序的Flash地址, 感觉不是特别有规律,那上位机软件是如何计算Flash地址的。每次下载的地址都一样吗? 不同型号的芯片会有差别吗? 每一组数据的前四个是Flash地址,第五个个校验 0X08,0X00,0X00,0X00,0X08 0X08,0X00,0X00,0X40,0X48 0X08,0X00,0X00,0X80,0X88 0X08,0X00,0X00,0XC0,0XC8 0X08,0X00,0X01,0X00,0X09 0X08,0X00,0X01,0X40,0X49 0X08,0X00,0X01,0X80,0X89 0X08,0X00,0X04,0X40,0X4C 0X08,0X00,0X04,0X80,0X8C 0X08,0X00,0X04,0XC0,0XCC 0X08,0X00,0X05,0X00,0X0D 0X08,0X00,0X05,0X40,0X4D 0X08,0X00,0X05,0X80,0X8D 0X08,0X00,0X08,0X40,0X40 0X08,0X00,0X08,0X80,0X80 0X08,0X00,0X08,0XC0,0XC0 0X08,0X00,0X09,0X00,0X01 0X08,0X00,0X09,0X40,0X41 0X08,0X00,0X09,0X80,0X81 0X08,0X00,0X0C,0X40,0X44 0X08,0X00,0X0C,0X80,0X84 0X08,0X00,0X0C,0XC0,0XC4 0X08,0X00,0X0D,0X00,0X05 0X08,0X00,0X0D,0X40,0X45 0X08,0X00,0X0D,0X80,0X85 0X08,0X00,0X10,0X40,0X58 0X08,0X00,0X10,0X80,0X98 0X08,0X00,0X10,0XC0,0XD8 0X08,0X00,0X11,0X00,0X19 0X08,0X00,0X11,0X40,0X59 0X08,0X00,0X11,0X80,0X99 |
程序是分批下载的,每一次下载的数据大小不能超过256个字节。如果你有1K的数据,那么应该分成4次下载。第一次的下载是0X0800_0000,下载0-256个字节。然后下载的程序没传送一个字节会将地址偏移一次。当第二次下载的时候,地址就会变成0X0800_0000+256。再次下载,以此类推。
我也认为是这样,但是上图是我抓取的一次串口下载过程里的 下载地址 感觉和想象的不一样
我试验了一下,地址确实如你所说的,感谢
但是我一次写入64个,最后一次只有20个 我就加上44个0XFF,凑成64个,做最后一次发送,
之后再把这64个读了出来,和写入的比较,发现前20个一样
后边44个应该是0XFF的,但是读出来的却不是, 这是为什么
但是程序跑起来了,会不会有什么问题?
这个没有试过,不过,有多少数据发送多少,别多写,估计会出问题。如果写0XFF的话可能会没事,因为芯片擦除之后全是0XFF。
你在写之前有没有擦除必要的页?
多加的数据后面的字节和和checkSum加上了吗?
问题解决了,我多哈了一帧数据,
也就是说在最后一个地址里写了两次, 非常感谢