OpenEdv-开源电子网

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

SWD脱机烧写器,编程过程中遇到问题?求教!

[复制链接]

95

主题

550

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3299
金钱
3299
注册时间
2016-1-7
在线时间
541 小时
发表于 2018-3-8 16:37:32 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 challenger 于 2018-3-8 16:52 编辑

因公司要设计一个SWD脱机烧写器,后期能满足STM32,芯唐,航晶等各种型号单片机程序的脱机烧写。因没做过SWD协议,在网上查资料。及参考部份少量例程。底层类似用spi口的MOSI,MISO引脚模拟SWD信号。SWD协议有讲,连接SWD口,主机向目标板要先发8个写数据包请求,然后目标板给3个应答信号回复,最后,主机写33位数据给目标板。我是用STM32F407单片机做的。以下程序:
uint32_t SW_CONNECT( void )
{
        uint8_t i;
        uint32_t c;
        
        //__DS_IRQ();
///////////////////////////////////////////////////////////////

        SIO_SWDAT(OU);
        SET_SWDAT();
        CLR_SWCLK();
        for(i=0;i<56;i++)                                                                                                //ê&#228;3&#246;3&#172;1y50&#184;&#246;TCK&#214;ü&#198;úμ&#196;TMS(SWDIO)£&#189; 1D&#197;o&#197;
        {
                SET_SWCLK();
                CLR_SWCLK();
        }
        for(i=0;i<16;i++)                                                                                                //ê&#228;3&#246;16&#184;&#246;TMS(SWDIO)D&#197;o&#197; 0111100111100111 (MSB)
        {
                if(BITTST(TMS_DATA,i)) SET_SWDAT();
                else                   CLR_SWDAT();
                SET_SWCLK();
                CLR_SWCLK();
        }
        for(i=0;i<56;i++)                                                                                                //ê&#228;3&#246;3&#172;1y50&#184;&#246;TCK&#214;ü&#198;úμ&#196;TMS(SWDIO)£&#189; 1D&#197;o&#197;
        {
                SET_SWCLK();
                CLR_SWCLK();
        }
//&#214;áéù2&#184;&#246;&#214;ü&#198;úμ&#196;μíμ&#231;&#198;&#189;£&#172;×′ì&#172;&#187;ú&#189;&#171;&#199;D&#187;&#187;μ&#189;IDLE×′ì&#172;
        CLR_SWDAT();
        for(i=0;i<3;i++)
        {
                SET_SWCLK();
                CLR_SWCLK();
        }
///////////////////////////////////////////////////////////////
        c=Read_APDP(REG_IDCODE);                                                        //&#182;áID
        
        //__EN_IRQ();
        
        return c;
}


但在示波器上监测的波形如下:
webwxgetmsgimg (1).jpg

webwxgetmsgimg (2).jpg

以上监测SW波形,和手册上的波形不一样,怎么回事?哪位大神做过,指导一下。
Cortex-M3 Swd中文协议文档P165页.pdf (1.65 MB, 下载次数: 396)

最佳答案

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

搞定了,stm32f0,获得ID为0x0BB11477,F1为0x1BA01477,F2,F3,F4所对应的为0x2BA01477。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

95

主题

550

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3299
金钱
3299
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2018-3-8 16:37:33 | 显示全部楼层
搞定了,stm32f0,获得ID为0x0BB11477,F1为0x1BA01477,F2,F3,F4所对应的为0x2BA01477。
回复

使用道具 举报

95

主题

550

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3299
金钱
3299
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2018-3-8 18:05:58 | 显示全部楼层
本帖最后由 challenger 于 2018-3-8 18:07 编辑

是不是最终,如果我从retuern C中得出一个读取返回的ID号码,说明目标板ID已经被读取到了。说明主机板连接目标板,已经连接成功。接下来,就是对目标板Flash进行操作。。。
回复

使用道具 举报

95

主题

550

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3299
金钱
3299
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2018-3-9 14:40:44 | 显示全部楼层
今天,读出一个ID号码为:0x1BA01477 ,正常吗?好像看网上有说ID为0x2BA01477。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2018-3-10 01:42:31 | 显示全部楼层
基本都是0X1B开头吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

95

主题

550

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3299
金钱
3299
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2018-3-14 10:13:27 | 显示全部楼层
正点原子 发表于 2018-3-10 01:42
基本都是0X1B开头吧

在F4中文参考手册上,IDCODE:注释中有写道:制造商代码未设置为ST代码。0x2BA01477(标识SW-DP), 原子哥,是否就是说是0x2BA01477
回复

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2016-12-21
在线时间
26 小时
发表于 2018-4-8 14:58:20 | 显示全部楼层
我最近也在做脱机烧录的方案,楼主做到哪一步了?我目前是读到romtable后不知道怎么读写flash,楼主可以加我qq:760628944一起讨论?
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-6-18
在线时间
3 小时
发表于 2018-6-18 09:12:27 | 显示全部楼层
楼主好,我也在弄脱机烧录器,我QQ672683358,邮箱672683358@qq.com
回复

使用道具 举报

20

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2012-8-21
在线时间
27 小时
发表于 2018-12-11 11:15:46 | 显示全部楼层
你 好,我也在弄脱机烧录的,QQ 541623073,能一起交流下不
回复

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2019-1-3 11:52:53 | 显示全部楼层
lxj19901115 发表于 2018-12-11 11:15
你 好,我也在弄脱机烧录的,QQ 541623073,能一起交流下不

我有现成的你需要不
1-1
回复

使用道具 举报

2

主题

56

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1394
金钱
1394
注册时间
2014-12-31
在线时间
187 小时
发表于 2019-1-3 14:09:30 | 显示全部楼层
SWD很简单,找个手册做协议就行了。。。。不过IO模拟速度有限,烧大容量的MCU的时候就郁闷了。。。要快就用FPGA做。
回复

使用道具 举报

2

主题

474

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6418
金钱
6418
注册时间
2018-6-27
在线时间
544 小时
发表于 2019-7-5 14:28:21 | 显示全部楼层
支持,支持。
回复

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-1-18
在线时间
26 小时
发表于 2020-5-3 01:02:18 | 显示全部楼层
mygod 发表于 2019-1-3 11:52
我有现成的你需要不

我自己按照协议写的读不到ACK,郁闷啊,求资料
回复

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-1-18
在线时间
26 小时
发表于 2020-5-3 01:05:58 | 显示全部楼层
noreply.png

按文档写的为啥读不出来ACK,求资料
回复

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2019-5-22
在线时间
24 小时
发表于 2020-5-7 15:01:09 | 显示全部楼层
让睫毛载来爱 发表于 2020-5-3 01:05
按文档写的为啥读不出来ACK,求资料

SWD搞定了吗  我QQ952351564
回复

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-1-18
在线时间
26 小时
发表于 2020-5-10 02:57:13 | 显示全部楼层
天行健liu 发表于 2020-5-7 15:01
SWD搞定了吗  我QQ952351564

抄官网的代码可以了,知道喔当时啥问题了
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2020-5-25
在线时间
1 小时
发表于 2020-5-25 17:35:49 | 显示全部楼层
challenger 发表于 2018-3-14 10:13
在F4中文参考手册上,IDCODE:注释中有写道:制造商代码未设置为ST代码。0x2BA01477(标识SW-DP), 原子 ...

这个问题后面你是怎么解决的呢?我也读到了两个id
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-1 19:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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