打印
[STM32F1]

SWD协议是如何把程序烧录进去的

[复制链接]
11661|42
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wenfen|  楼主 | 2021-6-17 23:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过SWD协议,我们可以访问所有的寄存器地址,但是它是怎么把hex文件写入flash呢,地址是如何访问写入的呢???

使用特权

评论回复
沙发
supernan| | 2021-6-17 23:43 | 只看该作者
这个问题好深奥。。

使用特权

评论回复
板凳
houcs| | 2021-6-17 23:45 | 只看该作者
你需要看看 ARM Debug Interface

使用特权

评论回复
地板
jlyuan| | 2021-6-17 23:47 | 只看该作者
你去ARM官网看看吧,这个肯定是他们规定的协议。每家也可能在此基础修改一下。

使用特权

评论回复
5
liuzaiy| | 2021-6-17 23:48 | 只看该作者

SWD协议是ARM内核调试器的一种通信协议。ST的单片机stm32103系列的调试端口可以是jtag或者是SWD的端口。今天主要说一下用一个单片机的IO口模拟swd协议来烧录另一片单片机。主要参考文档<<ARM®Debug Interface Architecture Specification ADIv5.0 to ADIv5.2 >>

           SWD协议简单来说可以说是另一种方式来配置单片机内部寄存器,通过它可以配置单片机内部几乎所有的寄存器(不太严谨)。想用SWD协议和单片机进行通信首先必须了解DP,AP所相关寄存器。关于DP,AP所包含的寄存器的具体意义就自己慢慢看文档理解。我说的主要是其中可能会出问题的地方:1.当用SWD协议进行通信的时候首先是发送jtag转SWD接口的命令。2.就是关于协议的读写,我理解的是数据会在时钟的下降沿的时候进行采样(我这样写的程序没有任何问题)。在上升沿的时候进行数据的翻转。

使用特权

评论回复
6
huangchui| | 2021-6-17 23:50 | 只看该作者
这个不是有下载器吗

使用特权

评论回复
7
jlyuan| | 2021-6-17 23:51 | 只看该作者
使用Jlink flash
ob-SWD仿真器?

使用特权

评论回复
8
stly| | 2021-6-17 23:53 | 只看该作者

直接keil下载。

使用特权

评论回复
9
wuhany| | 2021-6-17 23:55 | 只看该作者
或者使用串口下载。

使用特权

评论回复
10
wuhany| | 2021-6-17 23:56 | 只看该作者
楼主的意思要自己做软件吗?

使用特权

评论回复
11
zhaoxqi| | 2021-6-17 23:58 | 只看该作者
SWD是JTAG的一个简化版本,程序是不能通过JTAG直接下载到FLASH的

使用特权

评论回复
12
walton1226| | 2021-6-19 14:39 | 只看该作者
u8 SWJ_WriteMem32(u32 addr, u32 val)
{
    u8 err;

    if(SWJ_WriteAP(AP_CSW, CSW_VALUE | CSW_SIZE32))return 1;
    err = SWJ_WriteData(addr, val);
    return err;
}

使用特权

评论回复
13
walton1226| | 2021-6-19 14:40 | 只看该作者
static u8 SWJ_WriteData(u32 addr, u32 data)
{
    u8 req, ack, err;

    if(SWJ_WriteAP(AP_TAR, addr))return 1;

    /* write data */
    req = SWD_REG_AP | SWD_REG_W | AP_DRW;
    ack = SWD_Transfer(req, &data);

    /* read DP buff */
    req = SWD_REG_DP | SWD_REG_R | SWD_REG_ADR(DP_RDBUFF);
    ack = SWD_Transfer(req, NULL);

    (ack == DAP_TRANSFER_OK) ? (err = 0) : (err = 1);
    return err;
}

使用特权

评论回复
14
sadicy| | 2021-6-30 13:11 | 只看该作者
没研究过,都不知道指的哪个点
就是插上JLINK,然后download

使用特权

评论回复
15
菜鸟的第一步| | 2021-6-30 16:45 | 只看该作者
这个是要做啥大事吗,做烧录器?

使用特权

评论回复
16
wyjie| | 2021-7-3 08:12 | 只看该作者
用SWD协议和单片机进行通信首先必须了解DP,AP所相关寄存器  

使用特权

评论回复
17
llljh| | 2021-7-3 08:19 | 只看该作者

SWD数据一级一级的进行传递?

使用特权

评论回复
18
xxrs| | 2021-7-3 08:34 | 只看该作者
可能设计到内部的架构了     

使用特权

评论回复
19
jiajs| | 2021-7-3 08:37 | 只看该作者
需要3根线与目标MCU相连,SWDIO,SWDCLK和GND。  

使用特权

评论回复
20
yszong| | 2021-7-3 08:43 | 只看该作者
参考《ARM Debug Interface V5》   

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

737

主题

8940

帖子

8

粉丝