OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4312|回复: 10

关于Flash等脱机下载问题,小弟跪求

[复制链接]

6

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2018-5-15
在线时间
86 小时
发表于 2018-5-15 13:50:26 | 显示全部楼层 |阅读模式
14金钱
硬件环境是一个STM32407的芯片的NXP的KL03的两个芯片,芯片之间的通信方式采用的是串口通信。目标是这样的:我想实现一个脱机下载的程序,把STM32flash里面的数据读出来,然后通过串口的方式发送给NXP芯片flash上进行烧写。
在这个过程中,小弟遇见点问题,第一:我把407flash的数据读出来应该以怎么样的形式存放比较合适,数组吗?我可能有30K的数据,这样的数据会不会有问题,我现在只是问题把现象演示出来,具体的优化我可以后期。不知道大牛们有什么好的方法。
                                             第二:我如果是要把数据写到407芯片的flash上我还是知道怎么做的,但是现在绕了个弯(举一反三的能力差),我不太清楚想怎么可以把我读到的这部分数据写到NXP的flash里面,感觉不只是知道NXP flash的地址就可以操作的吧?
                                             现在自己真的没什么好的方法了,想请有经验的,有思路的大牛对小弟进行下点播,感激不尽。悬赏价格不多了,这是我的全部。希望能得到一个完美的知道,谢谢谢谢~~~~~~~~~~~~~~~~~~~~~






最佳答案

查看完整内容[请看2#楼]

虽然没有做过,但是我还是想提出一些自己的看法。 第一个问题:首先把STMF407中Flash中的数据全部读取出来时放入到一个数组当中肯定是可以的,如果是一个局部数组,那么必须得保证栈足够大,如果是全局数组,那么就必须保证SRAM中除过堆和栈之后剩余空间足够大。因为全局变量是存储在data段或者是ZI段。 其次,其实没有必要把所有数据全部读取出来之后在烧写到NXP中,可以以1KB为单位进行,每次读取1KB数据,然后烧录到NXP当中 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2016-10-3
在线时间
15 小时
发表于 2018-5-15 13:50:27 | 显示全部楼层
虽然没有做过,但是我还是想提出一些自己的看法。
第一个问题:首先把STMF407中Flash中的数据全部读取出来时放入到一个数组当中肯定是可以的,如果是一个局部数组,那么必须得保证栈足够大,如果是全局数组,那么就必须保证SRAM中除过堆和栈之后剩余空间足够大。因为全局变量是存储在data段或者是ZI段。    其次,其实没有必要把所有数据全部读取出来之后在烧写到NXP中,可以以1KB为单位进行,每次读取1KB数据,然后烧录到NXP当中,直到所有数据。
      具体怎么把数据烧录到NXP flash中我也不是很清楚,没有搞过,肯定也是对flash的操作。但是,又与读写板载flash又不一样,因为你这个是给NXP flash烧录程序,所以肯定和BOOT0和BOOT1有关,可以模仿串口烧录软件,通过串口给NXP flash烧录程序。
回复

使用道具 举报

6

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2018-5-15
在线时间
86 小时
 楼主| 发表于 2018-5-15 14:30:32 | 显示全部楼层
别沉了啊,堵上了身家性命,有没有大牛帮着给看看呀
回复

使用道具 举报

6

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2018-5-15
在线时间
86 小时
 楼主| 发表于 2018-5-15 14:30:46 | 显示全部楼层
莫非我要人工置顶了~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
回复

使用道具 举报

6

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2018-5-15
在线时间
86 小时
 楼主| 发表于 2018-5-15 15:27:48 | 显示全部楼层
晨曦的love 发表于 2018-5-15 14:48
虽然没有做过,但是我还是想提出一些自己的看法。
第一个问题:首先把STMF407中Flash中的数据全部读取出来 ...

谢谢谢谢,感谢你的回答,您说的堆栈的问题我也有考虑,硬件资源的空间还是比较多的。您说的1KB的单位我觉得这个想法我去实现一下,因为代码敲的比较少,在成长阶段所以代码逻辑上有时候还很渣。我现在想先把对Flash的操作写好,然后在考虑与NXP通讯上的问题。在读数据调试的过程中我遇到点问题,您可以帮我看一下吗?我把代码和现象粘到下面,您方便的话帮我看一下。再次感谢
回复

使用道具 举报

6

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2018-5-15
在线时间
86 小时
 楼主| 发表于 2018-5-15 15:40:12 | 显示全部楼层
晨曦的love 发表于 2018-5-15 14:48
虽然没有做过,但是我还是想提出一些自己的看法。
第一个问题:首先把STMF407中Flash中的数据全部读取出来 ...

这是我调试的现象,我现在不明白为什么他只打印了flash中一部分的数据,二后面的却不打印了,希望帮助分析一下。 1.png 2.png 4.png 现象.png
回复

使用道具 举报

4

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2016-10-3
在线时间
15 小时
发表于 2018-5-17 10:56:56 | 显示全部楼层
串口不打印数据只有两种情况:一种是发送了没有收到,这就和你的串口调试助手有关了,一种是根本就没有发送。你这个猜测应该是属于第二种,也就是根本就没有发送数据。那么你应该弄清楚程序的执行流程,到底是什么原因导致没有执行后面的程序,其中有一种可能就是处理器进入了硬件异常而导致程序偏离了原来的执行流程,具体什么原因还需要楼主自己排查了。
回复

使用道具 举报

6

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2018-5-15
在线时间
86 小时
 楼主| 发表于 2018-5-17 14:47:16 | 显示全部楼层
晨曦的love 发表于 2018-5-17 10:56
串口不打印数据只有两种情况:一种是发送了没有收到,这就和你的串口调试助手有关了,一种是根本就没有发送 ...

原因已经找到了,我是ADC采集用的DMA,在DMA设置模式的时候选择的轮训模式,更改DMA模式了以后得到了解决,但是不知道为什么不能设置轮询,因为想研究一下HAL库,用的不是标准库,所以设置标准模式才能正常运行的原因还在查看,谢谢您的回答,如果您对DMA模式这面有调试经验的话,您分析是为什么设置了Normal才能正常运行,circular模式不可以呢?
回复

使用道具 举报

4

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
金钱
294
注册时间
2018-1-31
在线时间
46 小时
发表于 2018-5-18 09:59:07 | 显示全部楼层
第二点,有两种选择:
1 ISP,通过IO控制KL03进入ISP,STM32模拟KL03的ISP协议,通过串口将程序更新到KL03。
2 IAP,写一段KL03的BOOT。自己定通信协议,STM32通过这个协议将程序发送到KL03,KL03将数据写到自己的FLASH。

不是一两天就能做好。
回复

使用道具 举报

6

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2018-5-15
在线时间
86 小时
 楼主| 发表于 2018-5-22 13:55:41 | 显示全部楼层
屋脊雀 发表于 2018-5-18 09:59
第二点,有两种选择:
1 ISP,通过IO控制KL03进入ISP,STM32模拟KL03的ISP协议,通过串口将程序更新到KL03 ...

谢谢您的思路,但是我现在感觉我是有两种的结合一样,也可能是我的想法还不太对。我现在在看Kinetis Bootloader v2.0.0的一个说明文档,我想按照他对bootloader的描述进行通讯。
回复

使用道具 举报

4

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
金钱
294
注册时间
2018-1-31
在线时间
46 小时
发表于 2018-5-22 21:47:15 | 显示全部楼层
刘书源 发表于 2018-5-22 13:55
谢谢您的思路,但是我现在感觉我是有两种的结合一样,也可能是我的想法还不太对。我现在在看Kinetis Boot ...

Kinetis Bootloader v2.0.0
如果你用芯片自己的BOOTLOADER,其实就是ISP吧。
我以前就做过类似的东西,只是芯片是STM32。主芯片使用串口跟STM32通信,用STM32自己的BOOT更新程序到STM32,其实就相当你的主芯片就是一台电脑。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 10:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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