OpenOCD中flash编程算法的实现

news2024/10/7 16:27:18

OpenOCD中flash编程算法的实现

如何自己设计一个基于openocd调试架构的芯片下载算法,作为一个嵌入式er, 如果做MCU的开发是必须要了解的,因为各个芯片公司都有自己的芯片,而flash驱动各家有不同,所以往往需要自家的工程师去支持,今天就来介绍下基于OpenOCD的flash编程算法的设计方法~~

本文以riscv的flash算法为例,来说明flash编程算法在openocd中的实现,代码git路径:
https://gitee.com/riscv-mcu/riscv-openocd.git

openocd 源码中flash编程算法的实现是在src/flash下,openocd把编程算法称作flash dirver, 如下driver.c就是各个芯片的flash driver的汇总。
在这里插入图片描述
在driver.c中例化自己设计的driver对象, 本次介绍的是GD32VF的flash driver, 注册如下:
在这里插入图片描述

driver中的各个方法如下:
在这里插入图片描述
做flash driver其实就是要实现erase、protect、write、read、probe、info这几个函数,目前是这样理解,其他函数没看。

flash编程的话主要就是write的实现了,这里看下GD32V的代码,这里的实现它是借助了STM32的驱动写的,所以函数名称有stm32,这个函数里面首先会判断目标设备是否处于halt状态,也就是是否暂停,因为接下来其实是需要debug模块通过JTAG写flash,然后就是配置flash key寄存器,猜测这里的key寄存器和gd32f1的是同一个地址和key值,所以可以直接使用stm32的配置。
在这里插入图片描述
在这里插入图片描述
果然看数值都能对上。然后就是使能编程PG位,最后就是主要的编程函数,stm32x_write_block:
在这里插入图片描述
stm32x_write_block这里面上来会判断以下target是arm的还是riscv, 分别调用是不同的编程函数,这里就是GD公司设置的驱动区分方法,我们直接看stm32x_write_block_riscv:
在这里插入图片描述
这个函数上来会开辟一个work_area空间用来存放flash编程函数,这个函数是单独在contrib/loaders/flash/gd32vf103/gd32vf103.c中实现的,这个函数其实很简单,就是一个一个halfword的编程,直到编程到指定的数目,退出,代码如下:
在这里插入图片描述写入一次flash,就等一次bsy位,然后再进行下一次的编程。

接下来,开辟一个空间存放要写入的数据:
在这里插入图片描述
接下来就是设置编程函数调用的时候的入参,因为上面的编程函数其实是单独编译成一个代码段,然后在需要编程的时候把这段代码放在work_area中,所以调用时需要设置入参,否则运行出错。
在这里插入图片描述
riscv的a0-a4是可以作为函数调用的入参寄存器的,所以在这里设置;

接下来就是一个循环调用target_run_algorithm这个接口,对flash编程了,编程之前就是设置4个入参寄存器的值,然后编程,然后等待bsy完成,继续下一次编程,因为一次编程的数据有限,如果一次没写完那就循环下一次。
在这里插入图片描述
target_run_algorithm这个函数就是openocd 提供的编程算法的接口了:
在这里插入图片描述
到此,一次编程写入操作流程完成,其他的函数后面再分享~~

喜欢的朋友可以关注公众号,有更多嵌入式软件的分享,也可以私信交流:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1583141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【设计模式】笔记篇

目录标题 OO设计原则策略模式 - Strategy定义案例分析需求思路分析核心代码展示进一步优化UML 图 观察者模式 - Observe定义案例分析需求UML图内置的Java观察者模式核心代码 总结 装饰者模式 - Decorator定义案例分析需求UML图分析核心代码 总结 工厂模式 - Abstract Method/Fa…

【C++基础】变量和数据类型

变量和数据类型 引言:为什么需要变量?一、变量1. 变量的声明2. 变量的赋值3. 标识符4. 作用域5. 常量6. 注意 二、基本数据类型1. 整型1.1 常用整型1.2 无符号整型1.3 char类型1.4 bool类型 2. 浮点型3. 字面值常量3.1 整型字面值3.2 浮点型字面值3.3 字…

蓝桥杯第十二届c++大学B组详解

目录 1.空间 2.直线 3.路径 4.卡片 5.货物摆放 6.时间显示 7.砝码称重 8.杨辉三角 9.双向排序 10.括号序列 1.空间 题目解析:1Byte 8bit 1kb 1024B 1MB 1024kb; 先将256MB变成Byte 256 * 1024 * 1024; 再将32位 变成Byte就是 32 / 8 4;…

人工智能前沿成科技竞争新高地

以下文章来源:经济参考报 近日,首届中国具身智能大会(CEAI 2024)在上海举行。作为人工智能领域的前沿热点,具身智能正逐步走进现实,成为当前全球科技竞争的新高地、未来产业的新赛道、经济发展的新引擎。 “…

在Linux终端查找指定类型的文件并统计数量

下面举例说明: find /path/to/directory -type f -exec file {} \; | grep "MIDI"它的作用是在指定的目录(/path/to/directory)中搜索所有的文件(-type f),然后使用file命令检查每个文件的类型&a…

《QT实用小工具·二十四》各种数学和数据的坐标演示图

1、概述 源码放在文章末尾 该项目实现了各种数学和数据的坐标演示图&#xff0c;下面是demo演示&#xff1a; 项目部分代码如下&#xff1a; #ifndef FRMMAIN_H #define FRMMAIN_H#include <QWidget> class QAbstractButton;namespace Ui { class frmMain; }class fr…

AWD靶机实战第二天:使用python脚本获取flag

上一部分我们通过读源码和利用源码审计的工具找到了这个漏洞&#xff0c;但是在比赛的时候有很多靶机&#xff0c;我们去一个个的注册&#xff0c;一个个的登录然后输入很浪费时间&#xff0c;所以我选择写一个python脚本来实现自动获得flag以及自动提交flag. 首先我们将这次的…

群联AI云防护中的防盗链技术原理及其作用探析---

一、引言 随着云计算和AI技术的快速发展&#xff0c;云防护方案已经成为现代企业防范网络攻击和保护数字资产的重要手段之一。群联科技作为存储解决方案和技术服务的领导者&#xff0c;已将其AI技术应用于云端防护系统中&#xff0c;并特别强化了防盗链功能&#xff0c;以帮助…

第十四届蓝桥杯省赛真题-幸运数

代码及解析: #include <iostream> using namespace std;bool check(int x) {int tmpx,len0;while(tmp){len;tmp/10;}//算位数的方法 if(len%21)return 0;//直接retrun 0 int tlen/2;int ans10,ans20;while(t--){ans1x%10;//加每一位x/10; }while(x){ans2x%10;x/10;}if(…

什么是SSL重签(reissue)?具体怎么做?

SSL重签&#xff08;reissue&#xff09;是指在SSL/TLS证书到期或需要更新时&#xff0c;证书持有者向证书颁发机构&#xff08;CA&#xff09;申请新的证书的过程。这通常是因为原有证书的有效期即将结束&#xff0c;或者证书因为某些原因&#xff08;如密钥泄露、证书损坏等&…

计算机视觉——基于深度学习UNet实现的复杂背景文档二值化算法实现与模型训练

1. 引言 阈值分割可以被视为一个分类问题&#xff0c;通常涉及两个类别&#xff0c;这也是为什么阈值分割也被称为二值化。对于文档图像&#xff0c;我们期望阈值算法能够正确地将墨水分类为黑色&#xff0c;将纸张分类为白色&#xff0c;从而得到二值化图像。对于数字灰度图像…

自动驾驶硬件系统-激光雷达(Lidar)测量模型

自动驾驶硬件系统-激光雷达(Lidar)测量模型 激光雷达(Lidar, Light Detection And Ranging)是Google系自动驾驶技术路线广泛应用的硬件传感器。 附赠自动驾驶学习资料和量产经验&#xff1a;链接 1、激光雷达(Lidar)的工作原理 通过持续不断的发射激光束&#xff0c;激光束遇…

pytest常用钩子函数

1、什么叫钩子函数 在Pytest框架中&#xff0c;钩子函数是一种允许用户扩展或者自定义测试执行过程的机制。钩子函数允许用户在测试的不同阶段插入自定义的代码&#xff0c;以实现特定的行为&#xff0c;操作或处理。这种插入式的机制使得Pytest具有高度的灵活性和扩展性。 如…

2024热门电商项目,“视频号/蝴蝶号小店”必须排在首位!

大家好&#xff0c;我是电商小布。 在如今这个流量为王的时代&#xff0c;电商行业的崛起也是非常迅速&#xff0c;且占据了各大行业的头部位置。 借助这个优势&#xff0c;也产生了各种各样的电商项目。 如果你问我在2024年&#xff0c;有什么必须考虑的创业项目&#xff0…

JR-SMD201网络直播解码器

详细介绍&#xff1a; JR-SMD201网络直播解码器&#xff0c;支持AVS/H.265/H.264/MPEG2解码&#xff0c;支持IP输入&#xff0c;支持1080P/1080I/720P/576I/480I多种分辨率&#xff0c;支持DRA/AC3/EAC3/AAC/MPEG等音频。 产品特点 支持多种输入方式IP 接口丰富&#xff0c;CV…

双链表的操作

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 每一个裂缝都是为透出光而努力&#…

【记录】LangChain|Ollama结合LangChain使用的速通版(包含代码以及切换各种模型的方式)

官方教程非常长&#xff0c;我看了很认可&#xff0c;但是看完了之后呢就需要一些整理得当的笔记让我自己能更快地找到需求。所以有了这篇文章。【写给自己看的&#xff0c;里面半句废话的解释都没有&#xff0c;如果看不懂的话直接看官方教程再看我的】 我是不打算一开始就用…

计算机进制

进制 进制也就是进位制&#xff0c;是人们规定的一种进位方法对于任何一种进制—X进制&#xff0c;就表示某一位置上的数运算时是逢X进一位 十进制是逢十进一&#xff0c;十六进制是逢十六进一&#xff0c;二进制就是逢二进一&#xff0c;以此类推&#xff0c;x进制就是逢x进…

【汇编语言实战】统计个数

已知10个分布在0至100内的正整数&#xff0c;统计大于等于60的数的个数和小于60的数的个数 C语言描述该程序流程&#xff1a; #include <stdio.h> int main() {int arr1[]{11,33,73,52,93,84,67,56,64,75};int num10;for(int i1;i<10;i){if(arr1[i]>60){num1;}}p…

关于帆软报表取OA选择框-下拉列表值的解决方案

问题&#xff1a;制度一览表每次在OA端增加或修改制度类别后&#xff0c;都要在帆软报表修改后才能正确显示。 原因分析&#xff1a;以前大家没有找到OA下拉列表的维护表&#xff0c;采用的是在帆软端通过内置数据集来解决&#xff0c;需要人工维护。 解决方案&#xff1a; …