STM32:程序下载系列概览

1 下载协议

  JTAG全称 joint test action group,边界扫描系统协议;是调试芯片的通用标准协议;

  SWD全称 serial wire debug,串行调试协议;也是调试芯片的通用标准协议;

  在cortex内核中,SWD和JTAG可以通过内部的DP模块直接访问总线进行读写,不需要bootloader;

2 SWJ-DP

  SWJ-DP全称 serial wire/JTAG - debug port,串行和边界扫描系统调试端口;为stm32系列的程序下载端口;

  SWJ-DP可复用成JTAG调试接口、SW调试接口,分时复用JTAG协议、SWD协议进行下载;

  2.1 stm32f1系列引脚分配 

    

  2.2 SWJ-DP功能框图

    SW和JTAG协议都不需要通过bootloader;通过AHB/APB访问cm3的总线矩阵,直接访问读取cm3核心外的flash地址;

    SWJ-DP有自己的内部总线,它的时钟不来自AHB/APB,而是来自sw和jtag的外部时钟线;

    

    所以如果sw和jtag无法下载,和mcu的时钟配置、硬件晶振,程序跑飞 都没关系;

    所以sw和jtag无法下载大概率是因为芯片电压不稳定,引脚静电打坏了;至于软件原因则下:

      引脚在代码中被复用为gpio关闭了下载功能;

      代码进入低功耗模式 (STOP/STANDBY/SLEEPDEEP),关闭了 Debug;

      代码跑飞、堆栈损坏进入 HardFault/BusFault 后挂死;然后hardFault后反复复位开始闭环;

      看门狗疯狂重启(几毫秒内复位),调试器来不及附着;

3 下载器

  SWJ-DP需要使用下载器下载:通过约定好的引脚端口、使用约定好的通讯方式、把代码写入芯片内部的特定位置;

  STM32可以使用ULINK2下载器、JLINK下载器、STLINK下载器,以及各种抄板前三种下载器;

  ULINK2下载器    >> JTAG协议,SWD协议

  STLINK下载器    >> STM8使用SWIM协议,STM32使用JTAG协议、SWD协议

  JLINK下载器      >> JTAG协议,SWD协议,SPI协议

  3.2.1 最近遇到一个问题,一个14年初的jlink下载器,电脑安装了18年版本的V634 jlink驱动;jlink驱动不会兼容旧的jlink下载器;

    所以每次下载都会弹窗报错如下,我应该去下个旧的14年的jlink驱动就可以解决这个问题,先放着;

    “the connected J-LINK is defective.proper operation cannot be guaranteed.”

    https://www.segger.com/downloads/jlink

4  不使用下载器下载

  不使用下载器下载的话,则需要借助bootloader来将代码接收到特定的地址,然后再软件触发系统复位来运行程序;

  IAP >> IAP全称 in-applicatin programing,在线应用编程下载;

  ISP >>ISP全称 in-system programming,在线系统编程下载;

  4.1 ISP下载

    ISP下载时,不能直接通过MDK下载,需要借助flash_loader.exe / fly_mcu.exe下载;

    ISP下载时,下载软件通常通过usart1外设,与出厂bootloader程序直接通讯,bootloader将收到的代码搬运到flash内部的启动位置;

    下载软件不仅可以通过usart1下载,部分系列芯片还可以使用spi、can、iic等外设;其他外设估计大概率遇不到;

    bootloader程序怎么将代码搬运到flash内部并没有告诉我们,我也懒得找为什么了;

  4.2 如何触发软件复位

    NVIC_SystemReset()     >> 主流、标准、可靠

    配置芯片专用复位寄存器 >> ble芯片用 的

    看门狗超时复位      >>( backup 方案)

  4.3 ISP一键下载电路

    ch340电平转换芯片作用是直接将USB差分电平信号转换为TTL信号传递给单片机;

    大约是ch340厂家将RTS、DTR引脚控制封装进flymcu.exe并提供了电路接法;

    flymcu.exe软件关于RTS、DTR的配置选择为:"DTR的低电平复位,RTS高电平进bootloader",离谱妈妈快来开门;

    以下倒推一下那俩三极管的作用,为了方便推导,pnp三极管在此简写为n型管、npn三极管在此简写为p型管;

    手上只有正点的板子所以用他的电路图,电路boot[1:0]是通过跳线帽手动修改的,本节前提手动配置了[boot1]=0b;

    

    4.3.1 ISP下载

      (1) [x:boot0]= x1b,reset先拉低再拉高;此时单片机根据boot[1:0]=x1b 从地址0x1FFF F000启动,ISP下载;

      (2) [x:boot0]= x0b,reset先拉低后拉高,此时单片机根据boot[1:0]=x0b 从地址0x0800 0000启动,执行程序;

         注意,如果[boot0]=0b,意味着RTS通过R48拉到了vcc,那么p型管始终截止,还怎么控制reset值呢?保留疑问继续;

    4.3.2 ISP一键下载

      (1) RTS=1,DTR=1

        n型管截止断路boot0接地,boot0=0;p型管截止断路reset接vcc,reset=1;

        ch340上电初始化值;此时n型管不控制boot0状态,p型管不控制reset值;

      (2) RTS=0,DTR  \

        n型管导通10k和1k电阻串联后分压,boot0=1;p型管导通reset接RTS,reset=0;

        ISP地址启动;此时reset低电平有效,芯片复位;当前状态假设持续10ms,F1系列reset复位信号持续典型值为2.5ms;

      (3) RTS \ ,DTR=1

        n型管状态不变,boot0=1;p型管截止断路reset接vcc,reset=1;

        ISP地址启动;此时reset释放,执行程序;芯片读取boot[1:0]=01b,启动ISP下载,直到flymcu.exe下载完成;

      (4) RTS=1,DTR  \

        此时n型管截止断路boot0接地,boot0=0;p型管截止断路reset接vcc,reset=1;

        此时n型管不控制boot0状态,p型管不控制reset值;

      (5) isp下载完成后,从flash地址重新启动的reset信号不是ch340控制的

        可能是由于勾选了flymcu.exe的“编程后执行”提供的,可能是由内核电源模块提供的;

    4.3.3 ISP一键下载bug

      当usb转串口接电脑之后,再给单片机上电的瞬间DTR和RTS的电平变化导致竞争冒险,使得单片机可能反复重复复位;

      以上是野火说的,可以解释以下bug;

      当使用STLINK下载同时,同时使用ch340的usb转串口,直接拔掉电脑端stlink_usb,usb转串口会一直重复发送信息;

      usb转串口会一直重复发送信息,说明此时芯片在反复重启,反复复位;

      可能是因为stlink拔掉的时候reset信号出现了毛刺,可能通过电路板走线影响上了ch340的复位;

      然后导致ch340的DTR和RTS的竞争冒险所以单片机一直在复位;

      STM32 SWD下载口无法下载的原因和解决办法 - 创世界 - 博客园 (cnblogs.com)

5 小结

  感觉自己棒棒哒;

posted @ 2022-03-18 15:05  rls_v  阅读(2652)  评论(2)    收藏  举报