打印
[单片机芯片]

CH55X 基于Arduino框架开发程序上传相关注意事项

[复制链接]
2757|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zljiu|  楼主 | 2022-10-10 16:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
ar, ui
本帖最后由 zljiu 于 2022-10-10 16:15 编辑

✨对于全新没有烧录过程序的芯片,第一次使用WCHISPTool工具来上传一次带CDC功能的代码,可以首先选择一个示例程序上传,例如:

参数配置选项:Default CDC




  • 可以将示例另存为一个地方,然后在Arduino IDE工具栏-项目-导出已编译的二进制文件

[color=rgba(0, 0, 0, 0.749019607843137)]

当然你也可以通过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工具情况下,默认情况下不是不能上传,只是上传过程有一定的概率失败。这个和所编译的程序大小有关系。

[color=rgba(0, 0, 0, 0.75)]
------------------------------------------------------------------
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

    }

}


使用特权

评论回复
沙发
哈悟哈悟| | 2022-10-11 11:31 | 只看该作者
收藏先

使用特权

评论回复
板凳
bestwell| | 2023-1-5 11:12 | 只看该作者
这个支持arduino框架的吗?

使用特权

评论回复
地板
1988020566| | 2023-1-6 16:03 | 只看该作者
ch55x是哪个类型的芯片呢              

使用特权

评论回复
5
OKAKAKO| | 2023-2-9 08:59 | 只看该作者
CH55x是WCH的一款带USB的51单片机

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

3322

帖子

3

粉丝