CH552G使用IAP下载

常见下载中的方式ISP,IAP,ICP

参考,CH552G中文手册,参考1
ISP:In System Programing,在系统编程。是常见的,使用软件,先将某个引脚(例如boot)连接到合适的电平,然后使用烧录软件选择下载程序进行烧录
如下图
在这里插入图片描述
ICP(In Circuit Programing)目前主流的有Jtag(Joint Test Action Group)以及SWD(Serial Wire Debug)接口。而ICP编程就是以SWD接口进行的。实际上是使用特殊的烧录器把程序文件直接写入存储用户程序文件的地址、下面图中若
正确连接J-Link
,可以直接点击Load图标下载
在这里插入图片描述
IAP:In applicating Programing,在应用编程。APP启动后,接口外面接口(如UART)发送来的 BIN数据,写入 另一片 Flash地址,并在指定位置记录新的 APP执行起始地址。重启系统,BootLoader 读入APP起始地址,执行新的APP。这种情况,Flash足够大,能放得下两片APP地址空间。

bootload引导程序,运行程序和厂家bootload

bootload引导程序可以看作是一种特殊的用户运行程序,使用ISP下载进flash后,这个bootload引导程序会将程序最后运行到厂家编写的bootload程序
在这里插入图片描述

首先明白程序的存储位置

在这里插入图片描述

IAP使用的寄存器和程序代码

在这里插入图片描述
在这里插入图片描述
程序代码,


sbit EnableIAP  = P1^4;        //  P1^6;  
sbit LED  = P1^5; 
#define BOOT_ADDR  0x3800
#pragma NOAREGS  //告诉Keil编译器在生成汇编代码时,不要生成AREGS(累加器寄存器)列表typedef void( *pTaskFn)( void );//定义一个函数指针pTaskFn tasksArr[1];  void main( void ) 
{UINT16 i=0;while(1){SCK = ~SCK;     //  P17闪烁        CH552的TX1引脚   mDelaymS(50);if(EnableIAP == 0){                          //P14引脚检测到低电平跳转break;}}LED = ~LED;EA = 0;                                             //关闭总中断,必加tasksArr[0] = BOOT_ADDR;mDelaymS( 100 ); 				(tasksArr[0])( );                   //跳至BOOT升级程序,使用ISP工具升级	while(1); 
}

在这里插入图片描述
代码功能和使用方法解释:使用上面代码,编译后得到hex文件,和正常的下载流程一样,就当是正常的运行代码。然后在运行后打开沁恒官方下载软件(不需要提前拉高P3.6),然后把P1.4引脚拉低(代码中跳出循环的条件),发现USB设备识别到了,和拉高P3.6后上电的效果一样
在这里插入图片描述
在这里插入图片描述

对上面程序进行改进调用

若程序中只有bootload的引导程序,那么每次下载运行程序前先下载bootload的引导程序!!!!?那这个bootload的引导程序只是为了增加下载的步骤,这样就有些画蛇添足了。可以把这个引导程序放在所有运行程序中,作为运行程序的一部分,在某种条件下触发进入bootload程序中,那么bootload的引导程序就作为一个运行程序的一个下载功能就行了。
就像参考视频中,使用串口发送一个字符或字符串,然后就可以下载程序了。下面是修改了的程序,

IAP程序

#include "CH554.H"     
#include "delay.h"sbit EnableIAP  = P1^4;        //  P1^6;  
sbit LED  = P1^5; 
#define BOOT_ADDR  0x3800   //bootload的最初地址
#define RUN_ADDR 0x0000#pragma NOAREGS  //告诉Keil编译器在生成汇编代码时,不要生成AREGStypedef void( *pTaskFn)( void );//定义一个函数指针
//pTaskFn tasksArr[2];  void boot_load()
{pTaskFn boot_load_func;  //定义一个指向函数的指针变量//while(EnableIAP != 0);  //使能引脚若不拉低就一直暂停,不按照手册中的,使用这个发现也可以正常运行EA = 0; //关闭总中断boot_load_func = BOOT_ADDR;  //把厂家的bootload函数地址赋值mDelaymS(100);   //boot_load_func();     //执行厂家的bootload函数while(1);  //在使用中发现,bootload程序进入一段时间,没有烧录程序后会自动跳出
}

调用了IAP的主程序

在这里插入图片描述

程序和硬件操作正常流程

在这里插入图片描述

满足上面情况后,两种下载方式

第一种使用usb下载

这很方便,在串口发送字符A后,进入bootload不需要拉高P3.6的电平
在这里插入图片描述

第二种方式,使用串口发送

在串口发送字符A后,进入boot load程序,然后使用另一个串口下载程序。但两个串口千万不能一样。而且接线位置也不同

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从微软发iPhone,聊聊企业设备管理

今天讲个上周的旧闻,微软给员工免费发iPhone。其实上周就有很多朋友私信问我,在知乎上邀请我回答相关话题,今天就抽点时间和大家一起聊聊这事。我不想讨论太多新闻本身,而是更想聊聊事件的主要原因——微软企业设备管理&#xff0…

私有化种子索引器bitmagnet

本文软件由网友 P家单推人 推荐 什么是 bitmagnet ? bitmagnet 是一个自托管的 BitTorrent 索引器、DHT 爬虫、内容分类器和 torrent 搜索引擎,带有 Web UI、GraphQL API 和 Servarr 堆栈集成。 需要注意的是,该软件目前还处于 alpha 阶段。它…

深入探究理解大型语言模型参数和内存需求

概述 大型语言模型 取得了显著进步。GPT-4、谷歌的 Gemini 和 Claude 3 等模型在功能和应用方面树立了新标准。这些模型不仅增强了文本生成和翻译,还在多模态处理方面开辟了新天地,将文本、图像、音频和视频输入结合起来,提供更全面的 AI 解…

人工智能大模型发展的新形势及其省思

作者简介 肖仰华,复旦大学计算机科学技术学院教授、博导,上海市数据科学重点实验室主任。研究方向为知识图谱、知识工程、大数据管理与挖掘。主要著作有《图对称性理论及其在数据管理中的应用》、《知识图谱:概念与技术》(合著&a…

微服务实战系列之玩转Docker(二)

前言 上一篇,博主对Docker的背景、理念和实现路径进行了简单的阐述。作为云原生技术的核心之一,轻量级的容器Docker,受到业界追捧。因为它抛弃了笨重的OS,也不带Data,可以说,能够留下来的都是打仗的“精锐…

Python游戏开发之制作捕鱼达人游戏-附源码

制作一个简单的“捕鱼达人”游戏可以使用Python结合图形界面库,比如Pygame。Pygame是一个流行的Python库,用于创建视频游戏,它提供了图形、声音等多媒体的支持。以下是一个基础的“捕鱼达人”游戏框架,包括玩家控制一个炮台来射击…

Java性能优化-书写高质量SQL的建议(如何做Mysql优化)

场景 Mysql中varchar类型数字排序不对踩坑记录: Mysql中varchar类型数字排序不对踩坑记录_mysql vachar排序有问题-CSDN博客 为避免开发过程中针对mysql语句的写法再次踩坑,总结开发过程中常用书写高质量sql的一些建议。 注: 博客&#…

特征工程方法总结

方法有以下这些 首先看数据有没有重复值、缺失值情况 离散:独热 连续变量:离散化(也成为分箱) 作用:1.消除异常值影响 2.引入非线性因素,提升模型表现能力 3.缺点是会损失一些信息 怎么分:…

【C++】—— 从 C 到 C++ (下)

【C】—— 从 C 到 C (下) 六、引用6.1、什么是引用6.2、引用在传参的使用6.2.1、例一6.2.2、例二 6.3、引用在做返回值的使用6.4、引用的特性6.5、引用的使用总结6.6、 c o n s t const const 引用6.6.1、 c o n s t const const 引用的规则6.6.2、 c o…

福派斯三文鱼猫粮,养猫新手的福音,让猫咪爱上吃饭!

猫粮的选择对于猫咪的健康和日常饮食至关重要。福派斯三文鱼猫粮作为一款备受关注的产品,它在市场上表现如何呢?下面我们将从几个关键方面深入探讨如何选择猫粮,并详细分析福派斯三文鱼猫粮的优缺点。 一、了解猫咪的独特需求 首先&#xff0…

[Redis]典型应用——分布式锁

什么是分布式锁? 在一个分布式系统中,也会涉及到多个节点访问同一个公共资源的情况。此时就需要通过锁来做互斥控制,避免出现类似于"线程安全"的问题 举个例子,在平时抢票时,多个用户可能会同时买票&#…

ubuntu源码安装Odoo

序言:时间是我们最宝贵的财富,珍惜手上的每个时分 Odoo具有非常多的安装方式,除了我最爱用的 apt-get install,我们还可以使用git拉取Odoo源码进行安装。 本次示例于ubuntu20.04 Desktop上进行操作,理论上在ubuntu14.04之后都可以用此操作。 …

第1关 -- Linux 基础知识

闯关任务 完成SSH连接与端口映射并运行hello_world.py ​​​​ ssh -p 37367 rootssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyCheckingno可选任务 1 将Linux基础命令在开发机上完成一遍 可选任务 2 使用 VSCODE 远程连接开发机并创建一个conda环境 …

关于c#的简单应用三题

#region 找出100以内与7有关的数并打印&#xff1a; public static void Print() { int sum 0; Console.WriteLine("100以内与7有关的数有&#xff1a;"); for (int i 1; i < 100; i) { if (i % 7 0) { sum; …

【AI教程-吴恩达讲解Prompts】第1篇 - 课程简介

文章目录 简介Prompt学习相关资源 两类大模型原则与技巧 简介 欢迎来到面向开发者的提示工程部分&#xff0c;本部分内容基于吴恩达老师的《Prompt Engineering for Developer》课程进行编写。《Prompt Engineering for Developer》课程是由吴恩达老师与 OpenAI 技术团队成员 I…

Flink HA

目录 Flink HA集群规划 环境变量配置 masters配置 flink-conf.yaml配置 测试 Flink HA集群规划 FLink HA集群规划如下&#xff1a; IP地址主机名称Flink角色ZooKeeper角色192.168.128.111bigdata111masterQuorumPeerMain192.168.128.112bigdata112worker、masterQuorumPee…

js 实现扫雷游戏,源码开放,支持npm引入使用

本人开发的js版本扫雷游戏 体验地址 | Github Minesweeper game Sponsors Install and use npm i minesweeper-gameimport {Map} from minesweeper-game;const map new Map();Reset Map map.reset();TS Statement interface IMapOptions {width?: number; // Map sizeh…

JMeter:BeanShell向JSR223迁移过程遭遇的java标准库不可用问题-如何切换JDK版本

前言 看过我前面文章的人想必记得我因使用BeanShell&#xff0c;遭遇过JMeter OOM的问题。所以想起官网频频提示的&#xff0c;性能测试中建议使用JSR223groovy来代替BeanShell。于是&#xff0c;开启BeanShell脚本向JSR223迁移之旅。 什么是JSR223 JSR223全称为Java Specif…

Python爬虫(1) --基础知识

爬虫 爬虫是什么&#xff1f; spider 是一种模仿浏览器上网过程的一种程序&#xff0c;可以获取一些网页的数据 基础知识 URL 统一资源定位符 uniform resource locator http: 超文本传输协议 HyperText Transfer Protocol 默认端口 80 https: 安全的超文本传输协议 security…

jenkins+gitlab+harbor+maven自动化容器部署

一、gitlab安装配置 1.1、安装 由于比较懒啊&#xff01;这里就直接使用docker安装了啊&#xff01; 没事先更新一个yum源&#xff1a;yum update -y 整一个gitlab镜像&#xff1a;docker pull gitlab/gitlab-ce 运行一个gitlab容器&#xff1a;docker run -d -p 8443:443 -p…