rinscr3003 / CHISPSharp

一个WCHISP库的C#封装。A C# wrapper for WCH ISP library.
GNU Affero General Public License v3.0
1 stars 1 forks source link

调用EnumDev函数不能正确返回识别到的芯片数量 #1

Closed lishuai199502 closed 3 weeks ago

lishuai199502 commented 2 months ago

感谢大佬提供这个资源,我正在用winform开发个上位机,导入了大佬的资源之后,调用 UInt32 EnumDev([Out] CHISPDeviceInfo[] IspDevInfor, Byte MaxDevCnt, out Byte BtChipSeries, out Byte BtChipType, out Int32 IsPreBTV230); MaxDevCnt传入16,可以正确返回芯片类型,但函数的返回值仍然是0,不知道是哪里的问题。

rinscr3003 commented 1 month ago

我在自己的程序中使用了这样的写法:

UInt32 EnumIspDeviceProc()
{
    UInt32 devCnt;
    CHISPWrapper.CHISPDeviceInfo[] devInforS = new CHISPWrapper.CHISPDeviceInfo[1];
    CHISPWrapper.InitISPDeviceInfoStruct(ref devInforS[0]);
    //枚举函数
    devCnt = CHISPWrapper.EnumDev(devInforS, 1, out _, out _, out _);
    return devCnt;
}

不知道是不是由于WCH这个程序历史太悠久,它要传入的那个IspDevInfor里有不少冗余参数。我加了一步Init操作。另外你所用的芯片是否比较新?比如X035系列的?是的话建议拉取今天最新commit里3.7.0.0版本的WCHISPAPI.dll。

rinscr3003 commented 1 month ago

另外不知道什么原因,如果ispOption配置有问题,可能也会扫描设备异常。下面是一个初始化例子。

CHISPWrapper.CHISPOption option = new CHISPWrapper.CHISPOption();
CHISPWrapper.InitISPOptionStruct(ref option);
option.IspMcuSeries = (byte)ChipSeries.CH32X035;
option.IspMcuType = (byte)CH32X035_ChipType.CH32X033F8P6;
int i = CHISPWrapper.SetISPOption(option);
if (i != 1)
{
    MessageBox.Show("WCHISPAPI初始化错误!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
    Environment.Exit(1);
}
rinscr3003 commented 3 weeks ago

This issue has been inactive for so long.