本帖最后由 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++) //êä3ö3¬1y50¸öTCKÖüÆúμÄTMS(SWDIO)£½ 1DÅoÅ
{
SET_SWCLK();
CLR_SWCLK();
}
for(i=0;i<16;i++) //êä3ö16¸öTMS(SWDIO)DÅoÅ 0111100111100111 (MSB)
{
if(BITTST(TMS_DATA,i)) SET_SWDAT();
else CLR_SWDAT();
SET_SWCLK();
CLR_SWCLK();
}
for(i=0;i<56;i++) //êä3ö3¬1y50¸öTCKÖüÆúμÄTMS(SWDIO)£½ 1DÅoÅ
{
SET_SWCLK();
CLR_SWCLK();
}
//Öáéù2¸öÖüÆúμÄμíμçƽ£¬×′쬻ú½«ÇD»»μ½IDLE×′ì¬
CLR_SWDAT();
for(i=0;i<3;i++)
{
SET_SWCLK();
CLR_SWCLK();
}
///////////////////////////////////////////////////////////////
c=Read_APDP(REG_IDCODE); //¶áID
//__EN_IRQ();
return c;
}
但在示波器上监测的波形如下:
以上监测SW波形,和手册上的波形不一样,怎么回事?哪位大神做过,指导一下。
Cortex-M3 Swd中文协议文档P165页.pdf
(1.65 MB, 下载次数: 319)
2018-3-8 16:33 上传
点击文件名下载附件
是不是最终,如果我从retuern C中得出一个读取返回的ID号码,说明目标板ID已经被读取到了。说明主机板连接目标板,已经连接成功。接下来,就是对目标板Flash进行操作。。。
在F4中文参考手册上,IDCODE:注释中有写道:制造商代码未设置为ST代码。0x2BA01477(标识SW-DP), 原子哥,是否就是说是0x2BA01477
一周热门 更多>