hackpascal/ufprog

希望可以支持 CH347F

Closed this issue · 5 comments

0wQ commented

作者您好,我制作了一个 CH347F 的编程器,但是无法识别使用,测试官方 DEMO 板也是一样的问题。
手上没有 CH347T,但是使用 CH341 识别是正常的,不知是否操作不正确。
测试沁恒官方的 CH347Demo.exe 是可以正常使用的,如果不支持请问是否可以适配一下?

PS C:\Data\ufprog-win64-mingw-msvcrt-2023-09-18> .\ufsnorprog.exe dev=ch341 uid
Universal flash programmer for SPI-NOR 1.0 [Portable]
Author: Weijie Gao <hackpascal@gmail.com>

Loaded controller plugin WCH CH341 (DLL)
CH341-DLL: Opened device 0
Opened interface device 'ch341' using driver 'ch341-dll'

Manufacturer:       Winbond
Part:               W25Q64FV
Capacity:           8MB

Unique ID: d1640850a72d1636
PS C:\Data\ufprog-win64-mingw-msvcrt-2023-09-18> .\ufsnorprog.exe dev=ch347 uid
Universal flash programmer for SPI-NOR 1.0 [Portable]
Author: Weijie Gao <hackpascal@gmail.com>

Loaded controller plugin WCH CH347 (DLL)
[ERROR] CH347-DLL: Device 0 is not in SPI mode
[WARN] CH347-DLL: No device specified by match#0 could be opened
[ERROR] Failed to open interface device using 'C:\Data\ufprog-win64-mingw-msvcrt-2023-09-18\device\ch347.json'
[ERROR] No interface device named 'ch347' could be opened
Failed to open device 'ch347'
PS C:\Data\ufprog-win64-mingw-msvcrt-2023-09-18> .\ufsnorprog.exe dev=ch347-libusb uid
Universal flash programmer for SPI-NOR 1.0 [Portable]
Author: Weijie Gao <hackpascal@gmail.com>

Loaded controller plugin WCH CH347 (libusb)
[ERROR] Failed to open interface device using 'C:\Data\ufprog-win64-mingw-msvcrt-2023-09-18\device\ch347-libusb.json'
[ERROR] No interface device named 'ch347-libusb' could be opened
Failed to open device 'ch347-libusb'
PS C:\Data\ufprog-win64-mingw-msvcrt-2023-09-18> .\ufsnorprog.exe dev=ch347-hid uid
Universal flash programmer for SPI-NOR 1.0 [Portable]
Author: Weijie Gao <hackpascal@gmail.com>

Loaded controller plugin WCH CH347 (HID)
[ERROR] CH347-HID: Unable to enumerate HID devices: No HID devices with requested VID/PID found in the system.
[ERROR] Failed to open interface device using 'C:\Data\ufprog-win64-mingw-msvcrt-2023-09-18\device\ch347-hid.json'
[ERROR] No interface device named 'ch347-hid' could be opened
Failed to open device 'ch347-hid'

ch347和ch347-libusb使用的驱动程序是不一样的
ch347使用WCH的原厂驱动,通过ch347dll.dll/ch347dlla64.dll进行通信
ch347-libusb使用libusb(winusb)驱动,通过libusb.dll进行通信
只有ch347-hid是免驱的,可以直接使用

但是注意,板子的工作模式必须要设置正确:
ch347和ch347-libusb要求ch347处于工作模式1,usb pid必须是55db
ch347-hid要求ch347处于工作模式2,usb pid必须是55dc
你有没有检查过这个地方?

此外你说

测试沁恒官方的 CH347Demo.exe 是可以正常使用的

那说明你使用的是WCH的原厂驱动。但是根据你贴出的信息

[ERROR] CH347-DLL: Device 0 is not in SPI mode

ufprog确实通过原厂驱动dll检测到了你的板子,但是板子没有处在工作模式1

因此我也就不清楚为何CH347Demo.exe 可以正常使用

0wQ commented

非常感谢您的回复,抱歉回复比较晚。

我对相关开发不太了解,fork后尝试修改适配了一下,简单测试了一下 dev=ch347 应该没问题,如果有需要我可以提一个PR。

可能还需要进一步适配,如果有需要可以送您一个我开源的编程器 https://oshwhub.com/azunya/ch347f

修改后测试截图

问题 1 回复:

但是注意,板子的工作模式必须要设置正确:
ch347和ch347-libusb要求ch347处于工作模式1,usb pid必须是55db
ch347-hid要求ch347处于工作模式2,usb pid必须是55dc
你有没有检查过这个地方?

CH347DS1.PDF 中,CH347F 的 pid 是 55de

image

CH347Demo.exe 截图:

image

问题 2 回复:

此外你说

测试沁恒官方的 CH347Demo.exe 是可以正常使用的

那说明你使用的是WCH的原厂驱动。但是根据你贴出的信息

[ERROR] CH347-DLL: Device 0 is not in SPI mode

ufprog确实通过原厂驱动dll检测到了你的板子,但是板子没有处在工作模式1

在项目代码中可以看到是此处在报错,我猜测可能是 CH347F 芯片功能接口号为 #define CH347_FUNC_JTAG_IIC_SPI 3 //CH347F 的原因

switch (if_type) {
case IF_SPI:
if (DevInfo.FuncType != CH347_FUNC_SPI_I2C) {
logm_err("Device %u is not in SPI mode\n", devidx);
goto cleanup_dev;
}
break;

/* Chip Function Interface Number */
#define CH347_FUNC_UART 0
#define CH347_FUNC_SPI_I2C 1
#define CH347_FUNC_JTAG_I2C 2

CH347应用开发手册.pdf 中:

image

以及 ChipMode 我看到 CH347F 也是不同的

static const char *chip_modes[] = {
"UART0+UART1",
"UART1+SPI+I2C VCP",
"UART1+SPI+I2C HID",
"UART1+JTAG+I2C VCP",
};

image

好吧。看来我手里面的资料不包含ch347f的部分 🤣
感谢你指出这部分的问题。我会按我自己的方式来修改ch347f的匹配代码。

可能还需要进一步适配,如果有需要可以送您一个我开源的编程器 https://oshwhub.com/azunya/ch347f

这当然是极好的 😆 毕竟我确实需要验证

0wQ commented

好吧。看来我手里面的资料不包含ch347f的部分 🤣 感谢你指出这部分的问题。我会按我自己的方式来修改ch347f的匹配代码。

可能还需要进一步适配,如果有需要可以送您一个我开源的编程器 https://oshwhub.com/azunya/ch347f

这当然是极好的 😆 毕竟我确实需要验证

给您 gmail 邮箱发送邮件了

已添加支持:85f6440