野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11738|回复: 3

用其他芯片通过SWD协议给STM32F103RET6下载程序遇到的问题

[复制链接]
发表于 2020-4-13 13:29:50 | 显示全部楼层 |阅读模式
现在在做一个下载器,就是用STM32F405芯片模拟SWD协议给STM32F103RET6芯片下载程序,通过规格书发现F103系列芯片的闪存编程使能是半字的形式,但是SWD协议是4字节的,通过什么方式能给flash按照半字的形式下载程序。有谁研究过这个的,能不能给个DEMO程序看看。
这是我的一部分程序:
uint8_t swd_write_block(uint32_t address, uint8_t *data, uint32_t size)
{
     uint8_t tmp_in[4], req;
     uint32_t size_in_words,size_send;
     uint32_t i, ack,tmp;

     if (size==0)
         return 0;

     size_in_words = size/4;          
     if (!swd_write_ap(AP_CSW, CSW_VALUE | CSW_SIZE16))
         {
         return 0;
     }  
    // TAR write     
     req = SWD_REG_AP | SWD_REG_W | (1 << 2);
     int2array(tmp_in, address, 4);
     if (swd_transfer_retry(req, (uint32_t *)tmp_in) != 0x01)
                 {
         return 0;
             }
     // DRW write
     req = SWD_REG_AP | SWD_REG_W | (3 << 2);
     for (i = 0; i < size_in_words; i++)
     {
     if (swd_transfer_retry(req,  (uint32_t *)data) != 0x01)
            {
             return 0;
         }
        data+=4;
   }  
     // dummy read
     req = SWD_REG_DP | SWD_REG_R | SWD_REG_ADR(DP_RDBUFF);
     ack = swd_transfer_retry(req, NULL);
     return (ack == 0x01);          
}

回复

使用道具 举报

 楼主| 发表于 2020-4-13 13:39:01 | 显示全部楼层
QQ群是不是已经满员了,链接里的群找不到954049022
回复 支持 反对

使用道具 举报

发表于 2020-4-13 18:52:14 | 显示全部楼层
需要修改AP寄存器组的CSW寄存器SIZE位
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-13 19:02:19 | 显示全部楼层
像上面贴的代码写的,SIZE位已经修改成SIZE_16了,但是还是不行,SWD返回错误是0x07,但是查资料没有查到这个错误码。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-17 13:40 , Processed in 0.049048 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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