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

2019-07-20 00:57发布

本帖最后由 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, 下载次数: 319) 2018-3-8 16:33 上传 点击文件名下载附件
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
challenger
1楼-- · 2019-07-20 01:14
 精彩回答 2  元偷偷看……
challenger
2楼-- · 2019-07-20 07:08
本帖最后由 challenger 于 2018-3-8 18:07 编辑

是不是最终,如果我从retuern C中得出一个读取返回的ID号码,说明目标板ID已经被读取到了。说明主机板连接目标板,已经连接成功。接下来,就是对目标板Flash进行操作。。。
challenger
3楼-- · 2019-07-20 10:05
今天,读出一个ID号码为:0x1BA01477 ,正常吗?好像看网上有说ID为0x2BA01477。
正点原子
4楼-- · 2019-07-20 12:41
 精彩回答 2  元偷偷看……
challenger
5楼-- · 2019-07-20 16:04
正点原子 发表于 2018-3-10 01:42
基本都是0X1B开头吧

在F4中文参考手册上,IDCODE:注释中有写道:制造商代码未设置为ST代码。0x2BA01477(标识SW-DP), 原子哥,是否就是说是0x2BA01477
菜鸟冷虎
6楼-- · 2019-07-20 18:41
我最近也在做脱机烧录的方案,楼主做到哪一步了?我目前是读到romtable后不知道怎么读写flash,楼主可以加我qq:760628944一起讨论?

一周热门 更多>