代码拉取完成,页面将自动刷新
目前,下载速度约 4K/s,太慢了,希望提升。
J-Link 6.52
我的J-Link居然不支持 RISC-V 要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,所以它更快。。
登录 后才可以发表评论