ST意法半导体
直播中

贾飞小

7年用户 1766经验值
私信 关注
[问答]

怎样通过USART1上的引导加载程序对FLASH进行编程呢?

我正在尝试通过 STM32L431RBT6 的 USART1 上的引导加载程序对 FLASH 进行编程。
我可以使用 boot0=1 和重置成功访问引导加载程序。
引导加载程序正确确认以下所有命令,并返回正确的信息:
0x7F
0x00(获取)
0x01(德语版)
0x02(获取 ID)
0x63(写保护)
0x73(写解除保护)
0x82(读出保护)
0x92(读出解除保护)
然而,当我尝试读取或擦除闪存时,处理器似乎在内部重置(NRST 变低)。
下面的序列就是一个例子:
发送:0x7F(连接)
接收:0x79 (ACK)
发送:0x73 0x8C(写解除保护)
接收:0x79(ACK)
发送:0x44 0xBB(扩展擦除)
接收:0x79(ACK)
发送:0xFF 0xFF 0x00(整体擦除)
接收:(无响应且处理器重置)
如果我尝试执行 bank 1 擦除 (0xFFFE) 或 bank 2 擦除 (0xFFFD) 等,问题是一样的……
我也会注意到,如果我在闪存擦除之前不执行“write unprotect”命令,那么处理器会以 NAK 响应,即
发送:0x7F(连接)
接收:0x79 (ACK)
发送:0x44 0xBB(扩展擦除)
接收:0x79(ACK)
发送:0xFF 0xFF 0x00(整体擦除)
接收:0x1F (NACK)(无复位)
我不确定发生了什么或我做错了什么。这些重置似乎不是来自任何外部源,而是处理器的内部重置。
有什么建议吗?谢谢!
更多信息:
引导程序:3.1
处理器 ID:4.35 (53d)
选项:










回帖(1)

刘涛

2023-1-12 15:45:50
我正在尝试通过 STM32L431RBT6 的 USART1 上的引导加载程序对 FLASH 进行编程。
我可以使用 boot0=1 和重置成功访问引导加载程序。
引导加载程序正确确认以下所有命令,并返回正确的信息:
0x7F
0x00(获取)
0x01(德语版)
0x02(获取 ID)
0x63(写保护)
0x73(写解除保护)
0x82(读出保护)
0x92(读出解除保护)
然而,当我尝试读取或擦除闪存时,处理器似乎在内部重置(NRST 变低)。
下面的序列就是一个例子:
发送:0x7F(连接)
接收:0x79 (ACK)
发送:0x73 0x8C(写解除保护)
接收:0x79(ACK)
发送:0x44 0xBB(扩展擦除)
接收:0x79(ACK)
发送:0xFF 0xFF 0x00(整体擦除)
接收:(无响应且处理器重置)
如果我尝试执行 bank 1 擦除 (0xFFFE) 或 bank 2 擦除 (0xFFFD) 等,问题是一样的……
我也会注意到,如果我在闪存擦除之前不执行“write unprotect”命令,那么处理器会以 NAK 响应,即
发送:0x7F(连接)
接收:0x79 (ACK)
发送:0x44 0xBB(扩展擦除)
接收:0x79(ACK)
发送:0xFF 0xFF 0x00(整体擦除)
接收:0x1F (NACK)(无复位)
我不确定发生了什么或我做错了什么。这些重置似乎不是来自任何外部源,而是处理器的内部重置。
有什么建议吗?谢谢!
更多信息:
引导程序:3.1
处理器 ID:4.35 (53d)
选项:










举报

更多回帖

发帖
×
20
完善资料,
赚取积分