CH55X 基于Arduino框架开发程序上传相关注意事项
Posted perseverance52
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CH55X 基于Arduino框架开发程序上传相关注意事项相关的知识,希望对你有一定的参考价值。
CH55X 基于Arduino框架开发程序上传相关注意事项
📢如果您和我一样使用WCH CH55X系列单片机基于Arduino框架来开发,那么程序编译和上传是开发验证过程不可少的工作。
- ✨对于全新没有烧录过程序的芯片,第一次使用
WCHISPTool
工具来上传一次带CDC功能的代码,可以首先选择一个示例程序上传,例如:
🔖参数配置选项:
Default CDC
- 可以将示例
另存为
一个地方,然后在Arduino IDE
工具栏-项目
-导出已编译的二进制文件
- 当然你也可以通过Arduino IDE文件菜单-首选项配置编译后生成的Hex或BIN文件到指定目录下。
将下面的代码写入到
preferences.txt
文件中,表示程序编译通过后,产生的烧录文件将放在d:\\arduino\\MyHexDir
这个路径下,当然你也可以自定义自己的路径,不需要照搬我的路径。
build.path=d:\\arduino\\MyHexDir
🍭使用WCHISPTool
工具上传代码
不管你选择的是USB烧录方式还是串口烧录方式,烧录步骤和方法都是一样:
先给目标芯片断电,按住Download,再上电。
,CH559串口下载口是P02
和P03
,这一点和STC单片机不一样,CH559单片机P30和P31也是串口,但是默认情况下是不支持程序烧录的,这一点需要注意。
- 选择USB上传方式:
- 选择串口上传方式:(串口下载,特别建议勾选上
“使能上电后长延时”
选项)
Arduino IDE直接上传
在烧录过带USB CDC功能的程序后,再次上传代码前,需要关闭串口监视器。
Linking everything together...
"C:\\\\Users\\\\Administrator\\\\AppData\\\\Local\\\\Arduino15\\\\packages\\\\CH55xDuino\\\\tools\\\\MCS51Tools\\\\2022.09.17/win/busybox" ash "C:\\\\Users\\\\Administrator\\\\AppData\\\\Local\\\\Arduino15\\\\packages\\\\CH55xDuino\\\\tools\\\\MCS51Tools\\\\2022.09.17/wrapper/sdcc-link.sh" "C:\\\\Users\\\\Administrator\\\\AppData\\\\Local\\\\Arduino15\\\\packages\\\\CH55xDuino\\\\tools\\\\sdcc\\\\build.13407/bin/sdcc" --nostdlib "-Ld:\\\\arduino\\\\MyHexDir" "-LC:\\\\Users\\\\Administrator\\\\AppData\\\\Local\\\\Arduino15\\\\packages\\\\CH55xDuino\\\\tools\\\\sdcc\\\\build.13407/lib/small" --code-size 61440 --xram-size 5996 --xram-loc 148 -mmcs51 -DCH559 "d:\\\\arduino\\\\MyHexDir\\\\sketch\\\\CH-AnalogReadSerial.ino.cpp.o" "d:\\\\arduino\\\\MyHexDir/core\\\\core.a" -lmcs51 -llibsdcc -lliblong -lliblonglong -llibint -llibfloat --out-fmt-ihx -o "d:\\\\arduino\\\\MyHexDir/CH-AnalogReadSerial.ino.elf"
"C:\\\\Program Files (x86)\\\\Arduino\\\\hardware\\\\tools\\\\avr/bin/avr-objcopy" -O ihex -R DATA -R INITIALIZED -R SSEG "d:\\\\arduino\\\\MyHexDir/CH-AnalogReadSerial.ino.elf" "d:\\\\arduino\\\\MyHexDir/CH-AnalogReadSerial.ino.hex"
"C:\\\\Users\\\\Administrator\\\\AppData\\\\Local\\\\Arduino15\\\\packages\\\\CH55xDuino\\\\tools\\\\MCS51Tools\\\\2022.09.17/win/busybox" cat "d:\\\\arduino\\\\MyHexDir/CH-AnalogReadSerial.ino.mem"
项目使用了 8642 字节,占用了 (14%) 程序存储空间。最大为 61440 字节。
全局变量使用了173字节,(2%)的动态内存,余留5823字节局部变量。最大为5996字节。
在端口 COM11 使用 1200bps 开/关来强行重置
C:\\Users\\Administrator\\AppData\\Local\\Arduino15\\packages\\CH55xDuino\\tools\\MCS51Tools\\2022.09.17/win/vnproch55x d:\\arduino\\MyHexDir/CH-AnalogReadSerial.ino.hex -r2
------------------------------------------------------------------
CH55x Programmer by VNPro
------------------------------------------------------------------
Load file as hex
Loaded 8564 bytes between: 0000 to 21C1
ch375Version 35
CH375GetUsbID 55e04348
CH375 open OK
MCU ID: 59 11
Found Device CH559
Bootloader: 2.4.0
ID: A2 FD 4B BC
XOR Mask: A6 A6 A6 A6 A6 A6 A6 FF
Write 8642 bytes from bin file.
..................................................[2K
Write complete!!!
Verify chip
..................................................[2K
Verify complete!!!
------------------------------------------------------------------
📑大部分情况下,通过Arduino IDE直接上传失败,容易卡的地方
------------------------------------------------------------------
CH55x Programmer by VNPro
------------------------------------------------------------------
Load file as hex
Loaded 8571 bytes between: 0000 to 21C8
ch375Version 35
CH375GetUsbID 55e04348
CH375 open OK
MCU ID: 59 11
Found Device CH559
Bootloader: 2.4.0
ID: A2 FD 4B BC
XOR Mask: A6 A6 A6 A6 A6 A6 A6 FF
Write 8649 bytes from bin file.
..................................................[2K
Write complete!!!
Verify chip
......................................上传项目出错
...............................................[2K
Packet 146 doesn't match.
- 程序上传失败后,复位单片机,将会弹出无法识别的USB设备端口。
🧾临时解决办法
程序因为是上传到第二阶段中断失败,导致无法运行,只有再通过
WCHISPTool
工具来上传,上传方式可以按照前面的步骤,再次烧录。
📝最终解决方案指导
在通过Arduino IDE编译上传代码到目标芯片的时候,打开
WCHISPTool
工具,配置下载方式为USB
,并设置好下载配置
选项,勾选“自动下载
”软件会自动监测,用户程序文件设置到编译生成文件夹,并指定文件。只要编译自动会生成最新的文件。当接入设备时,目标芯片运行到IAP程序区时,WCHISPTool
工具会自动捕捉到USB设备端口,软件将自动进行下载。这个有点像STC-ISP
下载的模式。-选择USB模式
🌿通过Arduino IDE给CH55X单片机上传程序在不借助
WCHISPTool
工具情况下,默认情况下不是不能上传,只是上传过程有一定的概率失败。这个和所编译的程序大小有关系。
- 成功
------------------------------------------------------------------
CH55x Programmer by VNPro
------------------------------------------------------------------
Load file as hex
Loaded 4776 bytes between: 0000 to 12F4
ch375Version 35
CH375GetUsbID 55e04348
CH375 open OK
MCU ID: 59 11
Found Device CH559
- 失败
------------------------------------------------------------------
CH55x Programmer by VNPro
------------------------------------------------------------------
Load file as hex
Loaded 8558 bytes between: 0000 to 21BB
ch375Version 35
CH375GetUsbID 55e04348
CH375 open OK
MCU ID: 59 11
Found Device CH559
⛳另一种方式:修改程序跳转到ISP程序区的延时
👉此方法测试了几次直接上传发现没什么问题,但是不敢保证能彻底解决上传失败的问题,最保险的还是上面已经确认没问题的方法。
- 文件位置:
C:\\Users\\Administrator\\AppData\\Local\\Arduino15\\packages\\CH55xDuino\\hardware\\mcs51\\0.0.14\\cores\\ch55xduino\\USBCDC.c
增加一个
delayMicroseconds(50000);
void setControlLineStateHandler()
controlLineState = Ep0Buffer[2];
// We check DTR state to determine if host port is open (bit 0 of lineState).
if ( ((controlLineState & 0x01) == 0) && (*((__xdata uint32_t *)LineCoding) == 1200) ) //both linecoding and sdcc are little-endian
#if BOOT_LOAD_ADDR == 0x3800
USB_CTRL = 0;
EA = 0; //Disabling all interrupts is required.
TMOD = 0;
delayMicroseconds(50000);
delayMicroseconds(50000);
delayMicroseconds(50000);
__asm__ ("lcall #0x3800"); //Jump to bootloader code
while(1);
#elif defined(CH559) && (BOOT_LOAD_ADDR == 0xF400)
USB_CTRL = 0;
EA = 0; //Disabling all interrupts is required.
delayMicroseconds(50000);
delayMicroseconds(50000);
delayMicroseconds(50000);
__asm__ ("lcall #0xF400"); //Jump to bootloader code
while(1);
#elif BOOT_LOAD_ADDR == 0xF400
//todo: not working well, CH549 doesn't support direct jump
#endif
以上是关于CH55X 基于Arduino框架开发程序上传相关注意事项的主要内容,如果未能解决你的问题,请参考以下文章
CH559L单片机基于Arduino框架下实现USB CDC虚拟串口打印ADC数据
STM32G070RBT6基于Arduino框架GPIO输入输出模式