STM32:程序下载系列概览

1 下载协议

  1.1 JTAG协议

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

  1.2 SWD协议

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

2 SWJ-DP

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

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

  2.1 stm32f1系列引脚分配 

    

  2.2 SWJ-DP功能框图

    功能如图332所示:通过AHB-AP访问cm3的总线矩阵,除cm3核心外的所有范围都可以访问读取;

    

3 下载器

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

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

  3.1 ULINK2下载器

    生产公司:英国ARM-Keil公司

    适用芯片:8051,Cortex-M,ARM7,ARM9,C166内核系列芯片

    适用MDK:KEIL MDK

    适用协议:JTAG协议,SWD协议

    特点:目前为止没有用过

  3.2 JLINK下载器

    生产公司:德国SEGGER(大约叫赛格)公司

    适用芯片:8051,Cortex-Mxxx,Cortex-Axxx,ARM7/ARM9/ARM11,Cortex-R4/R5内核系列芯片

    适用MDK:几乎全部MDK,实在太多了就不写了;

    适用协议:JTAG协议,SWD协议,SPI协议

    特点:目前功能最全,性能最稳定的JTAG下载器;支持好几种pins的标准JTAG接口;

    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

   3.3 STLINK下载器

    生产公司:意法半导体公司

    适用芯片:STM8,STM32系列

    适用MDK:KEIL,STM32CubeIDE,IAR等,没有JLINK兼容的多;

    适用协议:STM8使用SWIM(single wire interface module)协议,STM32使用JTAG协议、SWD协议

    特点:下载器分别引出了两个接口,SWIM接口给STM8使用,SWJ-DP接口给STM32使用;

4  不使用下载器下载

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

  4.1 IAP

    IAP全称 in-applicatin programing,在线应用编程下载;没有接触的机会也就没有了解的兴趣了;

  4.2 ISP

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

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

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

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

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

  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  caesura_k  阅读(2277)  评论(2编辑  收藏  举报