19 Star 80 Fork 34

半斗米 / RV-LINK

 / 详情

提升 GD32VF103 的 Flash 下载速度

已完成
拥有者
创建于  
2019-10-05 22:14

目前,下载速度约 4K/s,太慢了,希望提升。

输入图片说明

J-Link 6.52

评论 (5)

半斗米 创建了任务
半斗米 修改了描述
半斗米 任务状态待办的 修改为进行中
展开全部操作日志

输入图片说明

我的J-Link居然不支持 RISC-V :unamused: 要V10才支持吗?我的V9。
借了个V 10,然后就可以了,Flash下载确实快,50K左右,算上擦除,3秒不到。

程序中执行擦除:

fmc_page_erase(0x0801FC00);

耗时约40ms

程序中执行写入:

fmc_word_program(0x0801FC00, 0x12345678);

耗时约60us

优化Flash写入,优化后可以达到 12KB/s:

PT_THREAD(rvl_target_flash_write(rvl_target_addr_t addr, size_t len, uint8_t* buffer, int* err))
{
    PT_BEGIN(&self.pt);

    self.reg_value = FMC_CTL_PG;
    PT_WAIT_THREAD(&self.pt, rvl_target_write_memory((uint8_t*)&self.reg_value, FMC_CTL, 4));

    PT_WAIT_THREAD(&self.pt, rvl_target_write_memory(buffer, addr, len));

    PT_WAIT_THREAD(&self.pt, rvl_target_read_memory((uint8_t*)&self.reg_value, FMC_STAT, 4));
    if(self.reg_value & FMC_STAT_BUSY) {
        *err = 2;
        PT_EXIT(&self.pt);
    }
    if(self.reg_value & FMC_STAT_PGERR) {
        self.reg_value = FMC_STAT_PGERR;
        PT_WAIT_THREAD(&self.pt, rvl_target_write_memory((uint8_t*)&self.reg_value, FMC_STAT, 4));
        *err = 3;
        PT_EXIT(&self.pt);
    }
    /*
     * 写完成后清除 PG 位
     */
    self.reg_value = 0;
    PT_WAIT_THREAD(&self.pt, rvl_target_write_memory((uint8_t*)&self.reg_value, FMC_CTL, 4));

    *err = 0;

    PT_END(&self.pt);
}

优化后的代码存在一个问题:硬复位后下载程序会引起错误,而且实际上并没有写入,硬复位后 CPU 使用内部 8M 晶振,没有PLL,因此主频是8MHz,复位后开启PLL将主频设置为108MHz,然后就正常了,在调试配置对话框 Initialization Commands 输入框内输入:

print /x *0x40021000
set *(uint32_t*)0x40021004 = (1 << 29) | (0xb << 18) | (4 << 8)
set *(uint32_t*)0x40021000 = (1 << 24) | 1
set *(uint32_t*)0x40021004 = (13 << 18) | 2
print /x *0x40021004
print /x *0x40021000

编入 RV-LINK 固件:3c318fb

TCK 为 1MHz 的情况下,12KB/s 已经是极限了,等待 TCK 的提高,还可以加快下载速度,J-Link 是 4MHz 的 TCK,所以它更快。。

半斗米 任务状态进行中 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(1)
428615 zoomdy 1578923524
C
1
https://gitee.com/zoomdy/RV-LINK.git
git@gitee.com:zoomdy/RV-LINK.git
zoomdy
RV-LINK
RV-LINK

搜索帮助