选中内容(绿色)时除了会搜索文章名,还会搜索文章内容
点击结果中的文章名进入文章界面后可以按Ctrl+F在页面内搜索
  • 版权:CC BY-SA 4.0
  • 创建:2020-09-09
  • 更新:2020-09-15
K210详细的的程序下载流程,包括芯片侧和kflash侧


术语

  • 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, 那么这个otpboot就需要写到之前,比如倒数32k到倒数16k位置, 然后跳转执行这个新的boot
  • || boot 程序判断boot引脚是否被拉低, 没被拉低则进入 正常启动模式, 读取整个固件到内存,然后启动, 否则进入ISP模式

  • 上位机打开串口

  • 上位机通过串口的 dtr rts 来设置bootreset引脚, 保持拉低 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程序的大小只要小于前面的boototp的新boot的大小和就好了, boot里面做这些事可能面临boot程序过大或者有bug后期更新的问题. 但是代价就是每次下载程序都要花费几秒钟下载新的ISP程序, 这样用户每次下载的时间会变长, 所以最好的肯定是一次性把boot程序写完美,没有bug哈哈哈. 其实也可以在boot的ISP程序中加入写如程序到flash的命令,这样是否使用新的ISP就可选

  • 向芯片发送启动 ramrum 命令

  • 如果是想在ram中运行程序,到这一步为止即可,程序已经在ram中运行了,否则往下一步

  • 接下来就是运行发送过去的新ISP程序了

  • 上位机和ISP程序握手
  • isp程序默认波特率115200, 如果需要更高,这里发送更改命令让isp程序修改串口波特率
  • 通过串口发送程序文件到isp程序,isp程序写入到 flash
  • 通过串口的 dtrrts控制芯片的resetboot引脚来正常启动,不进入ramrum模式,而是正常从flash加载程序启动
文章有误?有想法想讨论?查看或者发起勘误/讨论 主题
(发起评论需要先登录 github)

/wallpaper/wallhaven-pk9kve.jpg