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串口下载口是P02P03,这一点和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
        
    }
    
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值