打印

请香主、MCUISP 等等帮忙解决STM32对STM32进行ISP问题

[复制链接]
3803|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 xixihaha0 于 2011-8-29 20:05 编辑

通过在官方下载到AN3155可知,stm32 内部的bootloader协议是开放的,现想通过stm32去对另一片STM32进行ISP编程,首先监控FlashLoader如下图:

先发送的是同步码0x7F,内部bootload由此码进行同步,获取相对应的串口参数,之后就发送的是命令 0x00 0xFF,返回版本及支持的命令。

为了验证此问题,我用串口调试助手来进行一个手工操作,如下图:attachimg]75740[/attachimg]
进入内部bootloader后,先发送0x7F,然后得到ACK(0x79),再发送命令 0x00 0xFF,无响应,再发送一次,直接回复了NAk(0x1F),之后的过程与此一样,换命令也不行.
请教香帅,是不是内部bootloader在同步码确认回复ACK后,是不是有个超时处理,必须在一定时间内发送命令给它,还是有其它原因?

QQ截图未命名1.png (25.3 KB )

QQ截图未命名1.png
沙发
香水城| | 2011-8-29 16:03 | 只看该作者
这个我不太清楚,但为安全起见,可以有超时处理。

使用特权

评论回复
板凳
xixihaha0|  楼主 | 2011-8-30 11:36 | 只看该作者
MCUISP这个高手呢,你做的手持编程器应该会对这个很熟悉的

使用特权

评论回复
地板
guet_new_man| | 2011-8-30 12:36 | 只看该作者
很可能是超时了, 你可以自己写一串代码与之通信来进行确认。

使用特权

评论回复
5
xixihaha0|  楼主 | 2011-8-30 14:03 | 只看该作者
确认不是超时问题,自己用MCU来处理照样是这个问题

使用特权

评论回复
6
mcuisp| | 2011-8-30 17:23 | 只看该作者
不好意思,今天同傻文同学去深圳音乐厅约会去了:)

考虑一定的超时是有必要的。毕竟stm32再快,也是要时间执行的。

以前贴过stm32 Bootloader的反汇编程序,里面是没有采用buffer机制的。也就是说,处理命令时,是暂时不接收的。

使用特权

评论回复
7
guet_new_man| | 2011-8-30 17:58 | 只看该作者
00 FF的发送顺序没问题吧?  有没有调换一下顺序试试?    对于你发的截图中的数据序列,一帧单个字节时无所谓先后顺序,但是一帧为多个字节时,就要看一下这一帧数据在时间上的先后顺序了。我有那么一点点怀疑,你的串口监视软件上面显示的数据可能是左边为最晚接到的,右边是最早接到的。当然,我没用过这款监视软件,也不知道是不是这样的, 麻烦LZ验证一下 呵呵

使用特权

评论回复
8
xixihaha0|  楼主 | 2011-8-31 08:33 | 只看该作者
谢谢quet_new_man,不是那个问题,我换了几个串口调试软件都是一样,同时验证的内部的bootloader也并没有超时处理,而且带有几个字节的缓冲,内部装载bootloader的代码空间只有2K,功能太多也确实够为难的了。
后发现虽然监控出来的数据是发送命令 0x00 0xFF(Get命令),后改为发送 0x00 0x00 0xFF则可以得到对应的正确的返回,谢谢各位

使用特权

评论回复
9
xixihaha0|  楼主 | 2011-8-31 14:26 | 只看该作者
9# guet_new_man 我也觉得这个太神奇了,AN3155上找到以下几点:
All communications from the programming tool (PC) to the device are verified by:
1. checksum: received blocks of data bytes are XORed. A byte containing the computed
XOR of all previous bytes is added to the end of each communication (checksum byte).
By XORing all received bytes, data + checksum, the result at the end of the packet
must be 0x00
2. for each command the host sends a byte and its complement (XOR = 0x00)
3. UART: parity check active (even parity)

Each packet is either accepted (ACK answer) or discarded (NACK answer):
● ACK = 0x79
● NACK = 0x1F

使用特权

评论回复
10
guet_new_man| | 2011-8-31 20:59 | 只看该作者
看了你发的英文部分,第一条不太懂; 第二条是讲每次PC机发命令时,发两个字节(一个是命令,另一个是命令的取反);   第三条是进行偶校验。 我发现你上面的截图中的串口没有选择偶校验,可能就是这个问题了。我也翻了一下AN3155,确实是需要偶校验。

使用特权

评论回复
11
logokfu| | 2012-5-3 19:36 | 只看该作者
:)

使用特权

评论回复
12
genius001| | 2012-7-8 16:44 | 只看该作者
不知道楼主问题最后解决了么。。我也在研究这个。。

使用特权

评论回复
13
genius001| | 2012-7-18 16:41 | 只看该作者
我知道你为什么发送00 ff 没反应,但是发送 00 00 ff有反应了。

使用特权

评论回复
14
gaoguanyi| | 2014-3-21 17:14 | 只看该作者
genius001 发表于 2012-7-18 16:41
我知道你为什么发送00 ff 没反应,但是发送 00 00 ff有反应了。

为什么呢?我也遇到这问题了。。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

164

帖子

1

粉丝