- 作者:
- 分类:知识&开发->MCU SOC->K210
- 阅读:3647
- 点赞:13
- 版权:CC BY-SA 4.0
- 创建:2020-09-09
- 更新:2020-09-15
K210详细的的程序下载流程,包括芯片侧和kflash侧
版权声明:本文为 neucrack 的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接(持续更新):https://neucrack.com/p/312
原文链接(持续更新):https://neucrack.com/p/312
术语
- ISP: In-System Programming, 在线编程
kflash 下载流程
带 || 开头的是芯片侧的流程
- || 芯片拷贝
boot rom(特定的硬件,一次性写入)中的boot程序到内存末尾1(), 并调用运行这个boot程序 - ||
boot程序启动后, 从otp读取信息,是否需要从top中读取新的boot, 因为boot rom区域是一次性写入的, 如果boot写出了bug,可以用otp中写入新的boot来挽救,相当于芯片出厂有两次写入boot的机会. 而事实是k210真用上了这个功能 - || 如果需要使用
otp中的新boot, 则读取到内存末尾,但是需要在现在正在运行的boot前面,比如之前的末尾1是倒数16k, 那么这个otp的boot就需要写到之前,比如倒数32k到倒数16k位置, 然后跳转执行这个新的boot ||
boot程序判断boot引脚是否被拉低, 没被拉低则进入 正常启动模式, 读取整个固件到内存,然后启动, 否则进入ISP模式上位机打开串口
- 上位机通过串口的
dtrrts来设置boot和reset引脚, 保持拉低boot引脚,然后拉低reset引脚再拉高reset引脚, 即让芯片重启的时候保持boot引脚为低电平 - || 芯片
boot程序检测, 如果boot引脚被拉低了, 则进入ISP模式(输入boot程序的一部分) - 上位机向芯片发送
握手信号(b'\xc0\xc2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0'), 然后等待响应信号 - 默认芯片是
115200波特率,如果需要更高波特率,发送修改波特率命令给芯片,芯片程序(boot)修改通信波特率 向芯片发送写 ramrum 程序的命令,并将需要
RAMRUM的程序或者新的ISP程序发过去, 写到芯片内存的起始地址注意到,这里没有直接发送要写入到flash的程序过去让
boot里面的ISP程序去写入到Flash, 而是重新发送了一份ISP程序过去,后面会运行这份新的ISP程序来从串口获取固件并烧录少flash, 这可以说是为了更灵活,可以自定义ISP程序, 而且ISP程序的大小只要小于前面的boot和otp的新boot的大小和就好了,boot里面做这些事可能面临boot程序过大或者有bug后期更新的问题. 但是代价就是每次下载程序都要花费几秒钟下载新的ISP程序, 这样用户每次下载的时间会变长, 所以最好的肯定是一次性把boot程序写完美,没有bug哈哈哈. 其实也可以在boot的ISP程序中加入写如程序到flash的命令,这样是否使用新的ISP就可选向芯片发送启动 ramrum 命令
如果是想在ram中运行程序,到这一步为止即可,程序已经在ram中运行了,否则往下一步
接下来就是运行发送过去的新
ISP程序了- 上位机和
ISP程序握手 - isp程序默认波特率115200, 如果需要更高,这里发送更改命令让isp程序修改串口波特率
- 通过串口发送程序文件到isp程序,isp程序写入到 flash
- 通过串口的
dtr和rts控制芯片的reset和boot引脚来正常启动,不进入ramrum模式,而是正常从flash加载程序启动

