OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 17659|回复: 45

我想利用STM32F4做一个SWD离线,一烧多的烧录器,请教如何实现?

[复制链接]

95

主题

550

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3299
金钱
3299
注册时间
2016-1-7
在线时间
541 小时
发表于 2018-1-31 16:42:27 | 显示全部楼层 |阅读模式
10金钱
我想利用STM32F4做一个SWD离线一个烧多个板子的烧录器,请教如何实现?是先用电脑把hex文件,通过JFlash软件,下载到离线烧录器中,但离线烧录器中的,SWD协议怎么弄呢?SWD一般只有VCC,CLK,SWD,GND,是要向被烧的多个板子,统一发数据指令吗?具体如何实现?请教!!!

最佳答案

查看完整内容[请看2#楼]

https://item.taobao.com/item.htm?spm=a230r.1.14.102.64e5555cAPOj2T&id=528403517685&ns=1&abbucket=13#detail
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2018-1-31 16:42:28 | 显示全部楼层
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

6

主题

462

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2017-12-15
在线时间
111 小时
发表于 2018-1-31 16:55:26 | 显示全部楼层
SWD协议在Cortex M4相关文档中详细进行了叙述。具体我没有操作过,但是这个SWDIO线是一条双向通讯线,中间可能涉及两片之间的识别过程,一对多可能不太实际。

为何不用bootloader里的UART进行批量生产呢?
回复

使用道具 举报

95

主题

550

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3299
金钱
3299
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2018-1-31 17:04:57 | 显示全部楼层
a496298685 发表于 2018-1-31 16:55
SWD协议在Cortex M4相关文档中详细进行了叙述。具体我没有操作过,但是这个SWDIO线是一条双向通讯线,中间 ...

公司想做这个东西,拿生产线操作。百度很久,没找到实质性的东西,好象应用不多。不知有没人做过?
回复

使用道具 举报

6

主题

462

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2017-12-15
在线时间
111 小时
发表于 2018-1-31 17:07:30 | 显示全部楼层
challenger 发表于 2018-1-31 17:04
公司想做这个东西,拿生产线操作。百度很久,没找到实质性的东西,好象应用不多。不知有没人做过?

为什么不选择进bootloader用uart下载
回复

使用道具 举报

95

主题

550

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3299
金钱
3299
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2018-1-31 17:17:54 | 显示全部楼层
a496298685 发表于 2018-1-31 17:07
为什么不选择进bootloader用uart下载

好像产品板子是F0的芯片,串口比较少,可能串口有其它应用。
回复

使用道具 举报

11

主题

1044

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3718
金钱
3718
注册时间
2011-5-23
在线时间
2012 小时
发表于 2018-1-31 19:40:06 | 显示全部楼层
自己产线用,淘宝买几个就是了。
RT-Thread RTOS 音频,WIFI,蓝牙
回复

使用道具 举报

95

主题

550

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3299
金钱
3299
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2018-2-1 08:51:43 | 显示全部楼层
aozima 发表于 2018-1-31 19:40
自己产线用,淘宝买几个就是了。

淘宝没有,淘宝都是一托一的,没有一托多的。
回复

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2018-2-1 09:24:28 | 显示全部楼层
首先要实现SWD协议通信,可参考<ARM Debug Interface v5>这篇文章,对SWD接口有详尽的描述.STM32的参考手册也对SWD接口作了一些介绍,可作了解.
然后,假设你的烧写工装上可以接入20个目标板,那你可以在工装模拟出20路SWD接口,同时对20个目标编程.工装的编程芯片性能要好,可选STM32F2及以上,最好用STM32F4.
最后注意,每一路SWD口应独立管理,可考虑面向对象的思想.
回复

使用道具 举报

95

主题

550

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3299
金钱
3299
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2018-2-1 10:11:26 | 显示全部楼层
八度空间 发表于 2018-2-1 08:56
https://item.taobao.com/item.htm?spm=a230r.1.14.102.64e5555cAPOj2T&id=528403517685&ns=1&abbucket=1 ...

这个好像不是同时烧录,像是分时烧录的。一个被烧录的板子一个按键控制烧录.
回复

使用道具 举报

95

主题

550

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3299
金钱
3299
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2018-2-1 10:23:31 | 显示全部楼层
zmingwang 发表于 2018-2-1 09:24
首先要实现SWD协议通信,可参考这篇文章,对SWD接口有详尽的描述.STM32的参考手册也对SWD接口作了一些介绍,可 ...

是不是要做的烧录器主板,从SWD口,接出接在被烧录的板子SWD接口上,然后像485一样,都一对多,接在被烧录的产品板子上?还是烧录器主板自身扩展出20路SWD,并且互不影响,每路可以独立工作。
回复

使用道具 举报

0

主题

416

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1002
金钱
1002
注册时间
2016-11-25
在线时间
181 小时
发表于 2018-2-1 18:51:09 | 显示全部楼层
8楼链接的编程器还是不错的,正在使用中。按任意一个按钮,4路同时开始烧写,挺稳的。
回复

使用道具 举报

0

主题

425

帖子

0

精华

高级会员

Rank: 4

积分
999
金钱
999
注册时间
2016-12-9
在线时间
174 小时
发表于 2018-2-2 08:54:09 | 显示全部楼层
mark            
回复

使用道具 举报

0

主题

409

帖子

0

精华

高级会员

Rank: 4

积分
854
金钱
854
注册时间
2017-2-25
在线时间
145 小时
发表于 2018-2-28 14:14:51 | 显示全部楼层
了解一下               
回复

使用道具 举报

95

主题

550

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3299
金钱
3299
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2018-3-2 10:05:09 | 显示全部楼层
zmingwang 发表于 2018-2-1 09:24
首先要实现SWD协议通信,可参考这篇文章,对SWD接口有详尽的描述.STM32的参考手册也对SWD接口作了一些介绍,可 ...

此贴,还需盖楼,请大家探讨一下。收集好资料,回头选一种最简捷的方案,我就着手开始干了。。。
回复

使用道具 举报

95

主题

550

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3299
金钱
3299
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2018-3-2 10:15:36 | 显示全部楼层
a496298685 发表于 2018-1-31 16:55
SWD协议在Cortex M4相关文档中详细进行了叙述。具体我没有操作过,但是这个SWDIO线是一条双向通讯线,中间 ...

为何不用bootloader里的UART进行批量生产呢?
---------------------------------------------------
回复迟了,请谅解。用bootloader里的UART进行批量生产,这个具体如何操作,还请指教一下?弄清楚思路,好知道往哪方面走。
回复

使用道具 举报

95

主题

550

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3299
金钱
3299
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2018-3-2 10:51:23 | 显示全部楼层
刚才无意逛论坛发现一位坛友用stm32的ISP做的离线的。好贴收录参考一下:http://www.openedv.com/posts/list/51870.htm 另外cndzz论坛上也发现一个另一种做法:http://www.cndzz.com/diagram/4234_4243/194268.html
回复

使用道具 举报

6

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2018-1-27
在线时间
4 小时
发表于 2018-3-4 12:37:26 | 显示全部楼层
想学习MM32的call群 676021505
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4031
金钱
4031
注册时间
2015-11-14
在线时间
545 小时
发表于 2018-3-5 10:19:13 | 显示全部楼层
淘宝搜索阿mo的脱机,可以最多拖16个,可以只买一路,也可以16路全买,我们买了一个,挺好用的,支持自动识别目标板,烧录速度也非常快
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4031
金钱
4031
注册时间
2015-11-14
在线时间
545 小时
发表于 2018-3-5 10:27:19 | 显示全部楼层
回复

使用道具 举报

95

主题

550

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3299
金钱
3299
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2018-3-5 14:44:11 | 显示全部楼层
Electronic 发表于 2018-3-5 10:27
这是淘宝网址https://item.taobao.com/item.htm?id=548202587948&qq-pf-to=pcqq.c2c

我公司要自己开发一个,支持stm32,支持芯唐,航晶等型号。。。你这个好像只支持stm32的吧!
回复

使用道具 举报

95

主题

550

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3299
金钱
3299
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2018-3-5 14:44:52 | 显示全部楼层
关键是SWD协议,具体如何弄?我还没整明白。
回复

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2018-3-6 10:34:41 | 显示全部楼层
本帖最后由 mygod 于 2018-3-9 18:25 编辑

我做过SWD的,协议是相通的,关键是不同MCU 的FLASH 烧写算法不一样; 如果能把KEIL内部的FLASH 算法 破解出来 直接用 xx.FLM 就爽了,
1-1
回复

使用道具 举报

95

主题

550

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3299
金钱
3299
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2018-3-6 13:40:49 | 显示全部楼层
mygod 发表于 2018-3-6 10:34
我做过SWD的,协议是相通的,关键是不同MCU 的FLASH 烧写算法不一样; 如果能把KEIL内部的FLASH 算法 破解出 ...

楼主,你做过我请教一下.在网上看到:

如果,切换为SWD模式连接上后,下一步是做什么操作呢?是对目标板,是读取目标板FLash,还是干嘛!请指导一下具体步骤,让我对它有一个大概了解.
回复

使用道具 举报

95

主题

550

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3299
金钱
3299
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2018-3-6 16:19:39 | 显示全部楼层
LineReset代码

static void SwdLineReset(void)
{
  u8 i;
  SWD_OUT;
  SWD_DIO_H;
  for(i=0;i<56;i++)
{
    SWD_Delay();
    SWD_CLK_H;
    SWD_Delay();
    SWD_CLK_L;
}
}



写命令头函数

static void SwdSendByte(u8 dat)
{
  u8 i;
  SWD_OUT;
  for(i=0;i<8;i++)
  {  
    if((dat&0x80)==0x80)
    {
      SWD_DIO_H;
    }
    else
    {
       SWD_DIO_L;
    }
    dat<<=1;
    SWD_CLK_H;
    SWD_Delay();
    SWD_CLK_L;
    SWD_Delay();
  }
}



读取一个data函数

static u32 SeqRead(u8 cmd)
{
  u32 dat=0;
  u8 i=0;
  SwdSendByte(cmd);
  SWD_IN;
  for(i=0;i<3;i++)//ack 此处需要处理判断
  {
   SWD_CLK_H;
    SWD_Delay();
    SWD_CLK_L;
    SWD_Delay();
  }
dat=0;
  for(i=0;i<32;i++)
  {
    dat=dat>>1;
    SWD_CLK_H;
    SWD_Delay();
    SWD_CLK_L;
    if(SWD_DII)
    {
      dat|=0x80000000;
    }
    SWD_Delay();
  }
  //parity
  SWD_IN; //trn
        for(i=0;i<2;i++)
  {
        SWD_CLK_H;
        SWD_Delay();
        SWD_CLK_L;
        SWD_Delay();
        }
        SWD_DIO_L;
        SWD_OUT;
        for(i=0;i<5;i++)
  {
        SWD_CLK_H;
        SWD_Delay();
        SWD_CLK_L;
        SWD_Delay();
        SWD_CLK_H;
        SWD_Delay();
        SWD_CLK_L;
        SWD_Delay();
        }
  SWD_IN; //trn
  return dat;
}

回复

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2018-3-9 18:23:15 | 显示全部楼层
先读ID ,ID正确 说明协议对了。

配置 上电请求,使能Debug 并进入停止模式。

DP 是 调试端口组件,AP 是访问内存,外设的。

要写FLASH,是通过AP写入的。
先写地址,然后再写这地址数据。
1-1
回复

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2018-3-9 18:35:19 | 显示全部楼层
再补充下,单纯用SW 访问 FLASH  一个个写是很慢的。KEIL是有专门的FLASH 算法的,就是XX.FLM,

要想速度快,先通过 SW 向目标板 RAM ,烧写个FLASH 下载程序。然后让这程序在MCU中运行。

最后 主控板 和 目标板之间 传输数据就行了。
1-1
回复

使用道具 举报

0

主题

249

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
481
金钱
481
注册时间
2017-9-7
在线时间
88 小时
发表于 2018-3-12 13:33:23 | 显示全部楼层
mygod 发表于 2018-3-9 18:35
再补充下,单纯用SW 访问 FLASH  一个个写是很慢的。KEIL是有专门的FLASH 算法的,就是XX.FLM,

要想速度 ...

好主意。     
回复

使用道具 举报

4

主题

368

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1100
金钱
1100
注册时间
2012-11-20
在线时间
95 小时
发表于 2018-3-20 18:55:57 | 显示全部楼层
zmingwang 发表于 2018-2-1 09:24
首先要实现SWD协议通信,可参考这篇文章,对SWD接口有详尽的描述.STM32的参考手册也对SWD接口作了一些介绍,可 ...

高手        
回复

使用道具 举报

19

主题

195

帖子

1

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2017-9-7
在线时间
82 小时
发表于 2018-3-26 21:02:09 | 显示全部楼层
学习了           
回复

使用道具 举报

4

主题

368

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1100
金钱
1100
注册时间
2012-11-20
在线时间
95 小时
发表于 2018-3-29 09:45:39 | 显示全部楼层
八度空间 发表于 2018-1-31 16:42
https://item.taobao.com/item.htm?spm=a230r.1.14.102.64e5555cAPOj2T&id=528403517685&ns=1&abbucket=1 ...

很好很强大。
回复

使用道具 举报

0

主题

416

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1002
金钱
1002
注册时间
2016-11-25
在线时间
181 小时
发表于 2018-4-2 10:27:07 | 显示全部楼层

有相关资料吗?
回复

使用道具 举报

0

主题

425

帖子

0

精华

高级会员

Rank: 4

积分
999
金钱
999
注册时间
2016-12-9
在线时间
174 小时
发表于 2018-4-16 22:24:43 | 显示全部楼层
STM32YZ 发表于 2018-2-1 18:51
8楼链接的编程器还是不错的,正在使用中。按任意一个按钮,4路同时开始烧写,挺稳的。

MARK              
回复

使用道具 举报

0

主题

409

帖子

0

精华

高级会员

Rank: 4

积分
854
金钱
854
注册时间
2017-2-25
在线时间
145 小时
发表于 2018-5-3 09:49:09 | 显示全部楼层
STM32YZ 发表于 2018-2-1 18:51
8楼链接的编程器还是不错的,正在使用中。按任意一个按钮,4路同时开始烧写,挺稳的。

mark               
回复

使用道具 举报

0

主题

416

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1002
金钱
1002
注册时间
2016-11-25
在线时间
181 小时
发表于 2018-5-8 15:54:36 | 显示全部楼层
求资料           
回复

使用道具 举报

0

主题

425

帖子

0

精华

高级会员

Rank: 4

积分
999
金钱
999
注册时间
2016-12-9
在线时间
174 小时
发表于 2018-5-24 06:49:43 | 显示全部楼层

很好很强大。
回复

使用道具 举报

0

主题

249

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
481
金钱
481
注册时间
2017-9-7
在线时间
88 小时
发表于 2018-6-12 09:11:10 | 显示全部楼层
求资料        
回复

使用道具 举报

0

主题

416

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1002
金钱
1002
注册时间
2016-11-25
在线时间
181 小时
发表于 2018-7-16 09:30:01 | 显示全部楼层
mygod 发表于 2018-3-9 18:23
先读ID ,ID正确 说明协议对了。

配置 上电请求,使能Debug 并进入停止模式。

很专业的回复。佩服了
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2018-7-20
在线时间
8 小时
发表于 2018-7-20 09:22:52 | 显示全部楼层
您好,我想请教您一下,我在使用SWD访问flash的时候,向flash写入KEY后,flash_cr显示没解锁,我在访问前需要怎么配置?
回复

使用道具 举报

95

主题

550

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3299
金钱
3299
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2018-7-25 12:19:33 | 显示全部楼层
wayne001 发表于 2018-7-20 09:22
您好,我想请教您一下,我在使用SWD访问flash的时候,向flash写入KEY后,flash_cr显示没解锁,我在访问前需 ...

写之前,先读取Flash,看是否有数据。若已经擦除,解锁Flash,写flash...
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2019-7-1
在线时间
7 小时
发表于 2019-7-4 15:59:32 | 显示全部楼层
mygod 发表于 2018-3-6 10:34
我做过SWD的,协议是相通的,关键是不同MCU 的FLASH 烧写算法不一样; 如果能把KEIL内部的FLASH 算法 破解出 ...

我也要用STM32做一个烧录器给其它STM32板子烧录程序,用SWD模式。一点思路都没有,层主能不能指导下原理是什么,应该怎么实现?
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2019-7-1
在线时间
7 小时
发表于 2019-7-4 16:02:53 | 显示全部楼层
楼主东西做出来没?我也要用STM32做一个烧录器给其它STM32板子烧录程序,用SWD模式,就跟淘宝上卖的那种烧录器一样。我也不清楚什么原理,楼主能不能指导下思路。
回复

使用道具 举报

2

主题

474

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6418
金钱
6418
注册时间
2018-6-27
在线时间
544 小时
发表于 2019-7-5 13:07:15 | 显示全部楼层
https://www.veryarm.com/35394.html   ARM调试原理【调试接口框图】【SWD时序】【SWD主机】 可能对大家有点帮助。
回复

使用道具 举报

0

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2019-7-3
在线时间
19 小时
发表于 2019-8-1 07:58:30 | 显示全部楼层
太棒了,我也要试试
回复

使用道具 举报

0

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2019-7-3
在线时间
19 小时
发表于 2019-8-1 07:59:12 | 显示全部楼层
太棒了,我也来试试
回复

使用道具 举报

0

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2019-7-3
在线时间
19 小时
发表于 2019-8-1 08:04:33 | 显示全部楼层
好东西,学习一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-1 11:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表