本帖最后由 香水城 于 2017-8-16 14:57 编辑
菊花链 JTAG STM32 前言
菊花链 JTAG STM32
一、简要说明
硬件:STM32F401C-DISCO *2,MCU :STM32F401VCT6 ;
软件:\STM32Cube_FW_F4_V1.8.0\Projects\STM32F401-Discovery\Demonstrations\EWARM
对于硬件的连接以及运行后的现象,readme.txt 中已经说明
程序运行的结果是 LD3~LD6 是跑马灯形式的闪烁。
参看 STM32F401 的参考手册,RM0368 Rev3. 里面在 Debug support(DBG)里面有描述
同样在 JTAG 本身的官网中,也有同样的描述:UM08001(User guide of JTAG emulators for ARM cores),
https://www.segger.com/admin/upl ... s/UM08001_JLink.pdf
这也也要注意一下,什么在菊花链中,哪一个是 Device0,即 TDO 接 JTAG 的那个设备,其他的 Device1,2,,,,依次往后排
二、环境搭建
按照上图,进行 JTAG 的环境的搭建;
参看 STM32F401VCT6,100pinTQFP 封装的数据手册,找出其引脚的分配;
在加上 JTAG 的接口的定义:
即需要 JTAG 的标准引脚的,第 9,7,3,5,13 这 5 个引脚;然后链接相应的引脚:
此外,对于正常链接目标芯片,还需要检测芯片的电源/地,两个引脚 1,20;
当线链接好后,
可以用 IAR 直接下载程序以判断接线是否正确,或者用 KEil 的上述功能,检查他是否检测到了相应的驱动。
对于多个板子的话,就是主要改变 TDI,TDO 即可;因为参照上面的描述,TCK,TMS,TRST 这三个脚都是公用的;
下图所示,KEIL 发现了两个驱动,即表明菊花链的硬件链接是对的了;
通过下拉条来看,这两个驱动的名字是一摸一样的,这也复合我们实际的电路,都是使用的同样的两块 STM32F401VCT6 ;
那需要怎样的设定来判断是菊花链中的哪一个设备呢?
这里简要的说明一个事情:
对于每一个 STM32 包含 2 个 TAPs(如下图):
TAP0: Cortex M4 TAP. (the nearest TAP).
TAP1: Boundary Scan TAP.
所以:
With 2 STM32 in a scan chain, we will have 4 TAPs:
TAP0: Cortex M4 TAP IC1.
TAP1: Boundary Scan TAP IC1.
TAP2: Cortex M4 TAP IC2.
TAP3: Boundary Scan TAP IC2
于是,对于 IAR
配置如下:
烧录 Device 0:
*TAP number = 0 (Cortex TAP, the nearest ==> #0)
*Preceeding bits= 0 (the very first device/TAP in the chain)
烧录 Device 1:
*TAP number = 2
*Preceeding bits= 9(5+4)
双开 IAR,下载调试,ok;
如果三个的话,也是如此,则
Device2 的配置:
*TAP number = 4
*Preceeding bits= 18;
大家可以试试看。
这是在 IAR 中的描述,那么在 KEIL 中呢?
驱动是找到了,但是哪个选项是能区分不同的芯片在菊花连中的位置呢?
一开始怀疑是否是自己的 JTAG 版本不够新? KEIL 版本不够新? KEIL 的正版权限不偶?
最终咨询后,发现,都不是我想的原因,如果换成 ULINK,则可以发现:
这时候发现能够手动的的修改了,Manual Configuration,不再是灰色的了。现在想想也正常,毕竟 ULINK 才是 Keil 自己的下
载工具,如果 Keil 对其他的下载工具的功能做一些限制或优化,也是正常的;
选中其中的一个,
要怎么修改呢?
试验后只需要修改一个参数 IR len 即可,那么 IAR len 的长度究竟怎么算呢?大家可以动手算一算。
对应PDF: 菊花链 JTAG STM32
更多实战经验请看:【ST MCU 实战经验汇总贴】
|
IR len应该如何计算,求教?每个设备加9吗?