那有没有小伙伴遇到过ISP失败的情况,失败的原因是什么呢?
我们就以GD32F30x系列为例,来看下用户手册:
通过将BOOT0拉高,BOOT1拉低,上电后,MCU则工作在ISP模式,此时可以通过ALL-IN-ONE软件(或用户自行开发的上位机软件)对MCU进行编程、操作选项字节、flash数据回读等操作,使用的是以下口:
如果用的是容量不超过512K的GD32F303系列(HD产品),则使用USART0(PA9 PA10)进行ISP交互,如果是超过512K的GD32F303系列(XD产品),则除了USART0,还有USART1(PA2 PA3),如果是F305/307系列(CL产品),则还增加了一个USB接口(DFU模式)。
当进入ISP后,实际上MCU是不知道自己该用哪个口进行ISP的,此时需要MCU和上位机(All-IN-ONE等)进行通讯握手,握手信号由上位机发出,也就是说哪个口先接收到上位机的握手信号,则该口被自动设置为ISP口,而其他通讯口则不会再处理ISP过程。
比如使用GD32F303ZKT6(XD产品),当上位机通过PA10(MCU的RX接收脚)向MCU发出握手信号后,则USART0被识别为ISP口,且此时USART0的波特率会根据握手信号进行自适应设置。
那么如果一个板子上,预设的是USART0(PA9 PA10)作为ISP口的,但同时PA3接了另外的芯片,当MCU上电的时候,有芯片往PA3上发了一些脉冲,则MCU会将USART1(PA2 PA3)设置为ISP口,此时,用户再使用USART0的话,则会失败。
根据上述原理,还有一种失败的可能性,就是刚上电时,ISP口上接收到了一些干扰信号,此时USART被设置为异常的波特率,那么在正式进行ISP时,也会失败。
以上就是GD32 MCU ISP失败的两个可能原因,小伙伴知道其他原因的也欢迎在评论区互动哦。
发表评论 取消回复