【GD32F427开发板试用】GD32的ISP进行程序烧录

news2024/12/23 5:48:29

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:羁傲不驯ぃ

什么是ISP?

ISP是In-System Program的缩写,即在系统编程。通常我们开发使用仿真器来下载和调试程序,当固件稳定需要转生产,此时仿真器就不如ISP烧录。

当同一块板卡上有多个MCU,或者MCU作为协处理器时,可以通过主处理器来为MCU烧录程序,此时就是ISP大显身手的地方了。

ISP怎么用?

ISP需要MCU本身支持,例如我们当前的GD32F427,就支持有三种启动方式,我们通常下载时固件会存放再Flash中:我们可以通过复位后的 BOOT管脚的电平状态来选择当前的启动方式:1是正常启动 2是从系统存储空间启动 3是从外部SRAM中启动。

GD手册上这样写:
嵌入式的Bootloader存放在系统存储空间,用于对FLASH存储器进行重新编程。Bootloader可 以通过USART0(PA9 and PA10)、USART2(PB10 and PB11 or PC10 and PC11)或USB FS(PA9、PA11和PA12)和外界交互。

那么我们就可以通过,控制MCU的复位+BOOT0 来控制启动方式。

首先我们需要准备一个MCU的bin文件,我们可以通过Keil设置来生产bin文件。

再每次执行完 build 和 rebuild 之后都会生成 bin 文件。

MCU型号判断

由于使用ISP烧录不如JTAG或DAP,我们不清楚当前MCU型号信息,所以我们需要先从MCU中读取MCU的唯一ID,ST和GD当前都支持读取该ID,我们此处查看GD32F427的ID:

GD32用户手册中有:

烧录步骤

我们参考项目:

stm32flash / Wiki / Home (sourceforge.net)

main.c · master · stm32flash / Stm32flash · GitLab

这个项目为STM32使用UART和IIC等工具来烧录的软件,我们参考这个项目,实现我们自己的GD32 的ISP烧录。

此处只贴出部分代码:

// 1. 读取芯片唯一ID
read_gd_mcu_pid()
// 2. 拉住BOOT0 复位MCU
int mcu_isp_init(){
    printf(" ==========> [isp init]. \n");
    MCU_ISP_NRST_L;        
    usleep(100000);
    MCU_ISP_BOOT0_H;    
    usleep(100000);
    MCU_ISP_NRST_H;     
    usleep(100000);

    MCU_ISP_NRST_L;        
    usleep(100000);
    MCU_ISP_BOOT0_H;   
    usleep(100000);
    MCU_ISP_NRST_H;     
    usleep(100000);
    return 0;
}
// 3. 通过串口向MCU烧录bin文件
bootsize = file_size(bootname);
buffer = malloc(bootsize);
memset(buffer, 0, bootsize);
file_read(bootname, buffer, bootsize);
writememory_2mcu(ADDR_MCU_BOOT, buffer, bootsize);
// 4. 释放BOOT0 复位MCU, MCU正常运行烧录完成
int mcu_isp_close(){
    MCU_ISP_BOOT0_L;    
    usleep(100000);
    MCU_ISP_NRST_L;        
    usleep(100000);
    MCU_ISP_NRST_H;     
    usleep(100000);
    printf(" <========== [isp close]. \n");
    return 0;
}

读取芯片ID由主机发出,由于串口不具备调试能力,所以需要MCU程序提供支持,我们此处只发送了读取MCU ID的指令,ID的读取和返回由MCU来完成

GD32F303 :0x46455633
GD32F470 :0x4e455a30

小结

使用ISP烧录可以帮助我们更加深入的了解芯片启动过程和原理,有兴趣研究的小伙伴可以参考上述参考程序实现自己的烧录软件。
比如:正点原子的FlyMCU就是这样的一个软件。

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

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

相关文章

linux下安装elasticsearch

一&#xff1a;安装JDK1&#xff1a;java安装地址最新版&#xff1a;https://www.oracle.com/java/technologies/javase-downloads.html历史版&#xff1a;https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html2&#xff1a;安装java(1)&#xff1a;安…

vue使用echarts画可视化大屏

画出来的页面效果如下&#xff1a; 一、布局 整体使用element-ui的layout布局&#xff0c;即el-rowel-col&#xff0c;便于自适应 二、配置跨域 首先创建个vue.config.js的文件 module.exports {lintOnSave: false,devServer: {proxy: { //配置跨域/: {target: , //填写…

Python——matplotlib绘图可视化知识点整理

无论你工作在什么项目上&#xff0c;IPython都是值得推荐的。利用ipython --pylab&#xff0c;可以进入PyLab模式&#xff0c;已经导入了matplotlib库与相关软件包&#xff08;例如Numpy和Scipy)&#xff0c;额可以直接使用相关库的功能。 本文作为学习过程中对matplotlib一些…

Oracle Blogs上的Flashback文章

Oracle Database und Temporal Validity Temporal Validity和Flashback的区别&#xff1f;两者通常配合使用。 延伸阅读&#xff1a;Oracle 数据库和时间有效性 时间有效性也称为 Flashback Time Travel。 显示不可见的列&#xff1a; set colinvisible on desc <table_…

PyQt5开发环境搭建 1.3 Python语法练习

第一组练习1阅读理解。输入红色框框中命令。说出文中大致意思。&#xff08;限30个字&#xff09;解&#xff1a;点击运行之后会跳到一个网站https://xkcd.com/353/练习2建立如下py文件并运行&#xff0c;贴出在Eric6下运行输出结果&#xff08;注意文件名中的bkjtest用自己的姓…

NSSCTF Round#7部分wp

Web ec_RCE 源码: <!-- A EZ RCE IN REALWORLD _ FROM CHINA.TW --> <!-- By 探姬 --> <?PHPif(!isset($_POST["action"]) && !isset($_POST["data"]))show_source(__FILE__);putenv(LANGzh_TW.utf8); $action $_POST["a…

layui遇到的一些问题

目录一、layui nav 菜单栏默认收缩二、layui 数据表格 单元格 颜色设置三、layui表格没有数据的时候&#xff0c;表头没有横向滚动条四、layui layer.open 弹窗全屏显示五、layui表格通过点击tr改变这一行的颜色六、 layer.open弹框弹出后父页面滚动问题七、LayUI下拉框中取值和…

Cuba勒索软件深度分析及防护建议

0 1. Cuba勒索软件的部署方式 Cuba勒索软件家族于2019年12月首次浮出水面。此后&#xff0c;该勒索软件家族背后的攻击者改变了策略和工具&#xff0c;成为2022年成为更普遍的威胁。该勒索软件历来通过Hancitor分发&#xff0c;通常通过恶意附件传递。 Hancitor也被称为Chani…

C++001-对比编程语言C++和python

文章目录C001-对比编程语言C和python编程语言发展史计算机 ENIAC机器语言&#xff1a;汇编语言&#xff1a;高级语言&#xff1a;机器汇编高级语言对比C语言与汇编不同高级语言的应用场景C和python语法对比Print Hello WorldPrint Hello 10 timesCreate a procedureCheck if li…

Kotlin的5种单例模式

前言最近在学习Kotlin这门语言&#xff0c;在项目开发中&#xff0c;运用到了单例模式。因为其表达方式与Java是不同的。所以对不同单例模式的实现进行了分别探讨。主要单例模式实现如下&#xff1a;饿汉式懒汉式线程安全的懒汉式双重校验锁式静态内部类式PS:该篇文章不讨论单例…

Windows并发测试工具

Apache安装目录cmd用ab并发测试工具&#xff0c;请求10次&#xff0c;并发为5ab -n 10 -c 5 http://www.ysbm.com/api.php/task/testBingfa

安装kali linuxnmap使用(一)

安装环境 vmware17 kali linux 怎么安装可以查看这个博主的文章 这么说你需要重置root密码 sudo passwd root 或者你打出node -v但是kali linux没有nodejs,则会询问你是否需要安装。开玩笑,你可以使用sudo 指令来获取权限(第一次输入需要你的密码) nmap 这是kali linux自带…

沁恒CH32V307单片机入门(02):官方库与工程模板介绍

文章目录目的官方库工程模板使用例程总结目的 现在开发单片机大多数时候都是面向库开发的&#xff0c;这里将简单介绍下CH32V307的官方库。 在开发过程中新建项目时通常会从某些模板开始&#xff0c;模板包含了库和初始化代码等内容&#xff0c;有一定的组织好的目录结构&…

【C++】模板

模板一、非类型模板参数二、模板的特化2.1 函数模板的特化2.2 类模板的特化2.2.1 全特化2.2.2 偏特化三、模板的分离编译一、非类型模板参数 模板参数分为类型形参与非类型形参。 类型形参&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称…

为什么 Go 不支持 []T 转换为 []interface

在 Go 中&#xff0c;如果 interface{} 作为函数参数的话&#xff0c;是可以传任意参数的&#xff0c;然后通过类型断言来转换。 举个例子&#xff1a; package mainimport "fmt"func foo(v interface{}) {if v1, ok1 : v.(string); ok1 {fmt.Println(v1)} else if…

【测试设计】使用jenkins 插件Allure生成自动化测试报告

前言 以前做自动化测试的时候一直用的HTMLTestRunner来生成测试报告&#xff0c;后来也尝试过用Python的PyH模块自己构建测试报告&#xff0c;在后来看到了RobotFramework的测试报告&#xff0c;感觉之前用的测试报告都太简陋&#xff0c;它才是测试报告应该有的样子。也就是在…

【01Studio MaixPy AI K210】25.云训练模型文件

采集数据 根据它云训练平台的要求&#xff0c;它要求的图片格式必须是224*224的&#xff08;重点之重点&#xff09;&#xff0c;所以可以利用K210跑脚本直接采集数据。 数据采集脚本 main.py实验名称&#xff1a;照相机 说明&#xff1a;通过按键拍照并在LCD上显示&#xff08…

windows自建免费无限的开源图片识别公式转换为Latex

一、准备 python3.9.6下载 在最开始勾选添加环境变量 https://www.python.org/ftp/python/3.9.6/python-3.9.6-amd64.exe 验证&#xff0c;右键终端&#xff08;管理员&#xff09;&#xff0c;输入&#xff1a;python --version安装Anaconda https://mirrors.bfsu.edu.cn/ana…

算法拾遗二十五之暴力递归到动态规划三

算法拾遗二十五之暴力递归到动态规划三最长回文子串返回象棋从一个位置到另一个位置的方法有多少种返回咖啡机从开始到干净的最短时间最长回文子串 测试链接&#xff1a;https://leetcode.cn/problems/longest-palindromic-subsequence/ 子序列&#xff1a;是可以不连续的 子…

kafka基本概念、springboot整合kafka、kafka常见问题

kafka基本概念 Kafka是一种高吞吐量、分布式、基于发布/订阅的消息系统。 基本概念&#xff1a; broker&#xff1a;就是一个kafka服务&#xff0c;可以有多个broker形成集群 toptic&#xff1a;每个broker里面可以有若干个toptic&#xff08;类似于标签&#xff0c;将消息分…