查看: 59302|回复: 49

[原创] 【我要创作】初试SWD协议

  [复制链接]
  • TA的每日心情

    2021-4-20 18:38
  • 签到天数: 341 天

    连续签到: 1 天

    [LV.8]以坛为家I

    8

    主题

    1193

    帖子

    2

    金牌会员

    Rank: 6Rank: 6

    积分
    2370
    最后登录
    2022-4-29
    发表于 2017-3-8 15:43:23 | 显示全部楼层 |阅读模式
    本帖最后由 boboo-23776 于 2017-3-8 16:07 编辑

    学习SWD协议中,刚入门,用的FRDM-KE02板子,读写寄存器等已正常,写出来与大家交流 5.PNG
    SWD其实就2根线的协议,SWDCLK控制时钟,SWDIO控制数据,通过对寄存器的读写来完成于MCU的通信
    首先,需要进入SWD模式。发至少50个1 和一个0xE79E 强制切换到SWD模式即可。
    J-link切换时通常还会发一个0x6DB7,据说是兼容老版本ARM的强制切换
    1.PNG
    uint8_t SWJ_JTAG2SWD(void)
    {
        uint32_t i;
        SWDIO_SET();
        for(i = 0; i < 56; i++)
        {
            SW_CLOCK_CYCLE();
        }
        SWJ_SendData(0xE79E);//SWJ_SendData(0xB76D);以后遇到再加
        for(i = 0; i < 56; i++)
        {
            SW_CLOCK_CYCLE();
        }
        SWDIO_CLR();
        for(i = 0; i < 16; i++)
        {
            SW_CLOCK_CYCLE();
        }
        return 0;
    }

    然后就是读写DP/AP寄存器
    3.PNG
    -Start     起始位,始终为1
    -APnDP  选择访问DP寄存器还是AP寄存器。
    - Rnw    选择读还是写。
    -A[2:3]   DP或者AP寄存器的地址,低位在前。
    -Praity   校验位,APnDP、RnW和A[2:3]共4个bit的校验位。
    -Stop    停止位。始终为0
    -Park     始终为1


    DP寄存器
    Address     Read              Write
    0x00        IDCODE           ABORT
    0x04        CTRL/STAT      CTRL/STAT
    0x08        RESEND           SELECT
    0x0C        RDBUFF           N/A

    Address     Read              Write
    0x00         CSW               CSW
    0x04         TAR               TAR
    0x08         N/A                N/A
    0x0C         DRW              DRW
    0xFC         IDR                N/A

    2.PNG
    读IDCODE正常图
    uint8_t SWJ_ReadDP(uint8_t adr, uint32_t *val)
    {
        uint32_t tmp_in;
        uint8_t ack;
        uint8_t err;


        tmp_in = SWD_REG_DP | SWD_REG_R | SWD_REG_ADR(adr);
        ack = SWD_Transfer(tmp_in, val);


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


    uint8_t SWJ_ReadAP(uint32_t adr, uint32_t *val)
    {
        uint8_t tmp_in, ack, err;


        uint32_t apsel = adr & APSEL;
        uint32_t bank_sel = adr & APBANKSEL;


        if(SWJ_WriteDP(DP_SELECT, apsel | bank_sel))
        {
            return 1;
        }


        tmp_in = SWD_REG_AP | SWD_REG_R | SWD_REG_ADR(adr);


        /* first dummy read */
        ack = SWD_Transfer(tmp_in, val);
        ack = SWD_Transfer(tmp_in, val);


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



    然后就可以对目标读写了
    uint8_t SWJ_WriteMem32(uint32_t addr, uint32_t val)
    {
        uint8_t err;


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

    static uint8_t SWJ_ReadMem32(uint32_t addr, uint32_t *val)
    {
        uint8_t err;
        SWJ_WriteAP(AP_CSW, CSW_VALUE | CSW_SIZE32);
        err = SWJ_ReadData(addr, val);
        return err;
    }





    SWD.rar (9.24 KB, 下载次数: 1275)
    梵蒂冈
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    帖子

    0

    新手上路

    Rank: 1

    积分
    4
    最后登录
    2018-8-22
    发表于 2018-8-22 18:25:34 | 显示全部楼层
    参考楼主的文写的代码,访问STM32L071x系列。走了一些弯路,这里补充几点,但愿有所帮助。
    × 数据是下降沿放出,上升沿锁存(输入输出都一样)
    × 复位之后必须首先读取DP ID,之后向DP的0x4寄存器写0x54000000,使能debug
    × 向DP的0x8寄存器写0xF0设定AP bank值,然后读取AP的0xC寄存器,可以得到AP ID
    × 注意AP是POST属性,所以需要读取2次才能得到正确的值
    × 读出AP的0x0寄存器(CSW),将最后三个比特改为b010,使能32位访问(注意要先将DP的0x8写为0)
    × 然后向AP的0x4地址写0x40015800,从AP的0xC读取device ID
    以上如果能正确读到device ID,说明mem-AP通道打通了,就可以随意访问任何地址的内容。
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-11-30 16:16
  • 签到天数: 206 天

    连续签到: 1 天

    [LV.7]常住居民III

    74

    主题

    2793

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    7878
    最后登录
    2025-4-11
    发表于 2017-3-8 16:27:16 | 显示全部楼层
    这个很666
    来根华子
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2021-1-9 21:21
  • 签到天数: 56 天

    连续签到: 1 天

    [LV.5]常住居民I

    52

    主题

    677

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    1470
    最后登录
    2021-1-9
    发表于 2017-3-8 18:43:34 | 显示全部楼层
    很好,顶... ...
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-9-9 22:51
  • 签到天数: 415 天

    连续签到: 1 天

    [LV.9]以坛为家II

    79

    主题

    3088

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    5181
    最后登录
    2022-5-23
    发表于 2017-3-8 20:18:38 | 显示全部楼层
      这是做 OB的节奏啊
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-5-29 08:54
  • 签到天数: 2992 天

    连续签到: 8 天

    [LV.Master]伴坛终老

    45

    主题

    5548

    帖子

    22

    金牌会员

    Rank: 6Rank: 6

    积分
    12035
    最后登录
    2025-5-29
    发表于 2017-3-8 20:58:44 | 显示全部楼层
    赞一个,这个不错。
    签到签到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2021-4-20 18:38
  • 签到天数: 341 天

    连续签到: 1 天

    [LV.8]以坛为家I

    8

    主题

    1193

    帖子

    2

    金牌会员

    Rank: 6Rank: 6

    积分
    2370
    最后登录
    2022-4-29
     楼主| 发表于 2017-3-8 21:01:50 | 显示全部楼层
    谢楼上几位称赞
    梵蒂冈
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-3 11:19
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    50

    主题

    1万

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    14090
    最后登录
    2024-4-19
    发表于 2017-3-9 09:30:16 | 显示全部楼层
    6很好,收藏。 0.png 1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-6-2 13:32
  • 签到天数: 272 天

    连续签到: 1 天

    [LV.8]以坛为家I

    44

    主题

    995

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    4411
    最后登录
    2023-6-2
    发表于 2017-3-9 10:37:38 | 显示全部楼层
    很厉害~SWD以后可以自己做了.
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-5-7 09:07
  • 签到天数: 353 天

    连续签到: 1 天

    [LV.8]以坛为家I

    141

    主题

    8056

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5785
    最后登录
    2025-5-7
    发表于 2017-3-9 10:43:35 | 显示全部楼层
    666,这是要自制调试器
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2022-6-3 10:27
  • 签到天数: 131 天

    连续签到: 1 天

    [LV.7]常住居民III

    19

    主题

    519

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1611
    最后登录
    2022-6-26
    发表于 2017-3-10 07:33:35 来自手机 | 显示全部楼层
    这通讯协议浓浓的iic既视感
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-19 00:14 , Processed in 0.108447 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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