CH347dll 在C#中调用的问题

使用WPF开发CH347T上位机,已对照官方的CH341的CSHARP例程对CH347DLL.H进行了重写,以下为CH347读数据的方法重写前后对比:

//SPI4读数据 无需先写数据,效率较CH347SPI_WriteRead高很多(原CH347DLL.H内接口)
BOOL WINAPI CH347SPI_Read(ULONG iIndex,     //指定设备序号
              ULONG iChipSelect,   //片选控制,位7为0则忽略片选控制,位7为1进行片选操作
              ULONG oLength,     //准备发出的字节数
              PULONG iLength,    //准备读入的数据字节数
			  PVOID ioBuffer);    //指向一个缓冲区,放置准备从DOUT写出的数据,返回后是从DIN读入的数据
//SPI4读数据 无需先写数据,效率较CH347SPI_WriteRead高很多(重写后的C#接口)
[DllImport("CH347DLL.DLL", EntryPoint = "CH347SPI_Read")]
public static extern bool CH347SPI_Read(uint iIndex,    //指定设备序号
                      uint iChipSelect, //片选控制,位7为0则忽略片选控制,位7为1进行片选操作
                      uint oLength,   //准备发出的字节数
                      uint iLength,   //准备读入的数据字节数
                      byte[] ioBuffer); //指向一个缓冲区,放置准备从DOUT写出的数据,返回后是从DIN读入的数据


我是C#新手,不太明白为什么PVOID ioBuffer 为什么是直接写成 byte[] ioBuffer,正常如果直接传缓冲区数组进去,接口里面的程序不会无法访问外面定义的缓冲区数组吗,在实际在调用过程中也是报错:

image.png


尝试更改传入的变量,改成IntPtr ioBuffer传数组首地址指针、或改成ref byte[] ioBuffer传数组引用、或是将数组首地址转为byte[]数组再传入,都是一样报错,不知道是不是CH347DLL.cs写的有问题,附上我重写的CH347DLL.cs,跪求解决方法


icon_rar.gifCH347DLLcs.zip


求助


您好,查看了您的代码,需要修改一下C#中CH347SPI_Read函数中的iLength 参数类型,原DLL中参数类型为PULONG,改写C#中可定义为ref UInt32 iLength。


非常感谢, SPI这边搞定了, 但是我用CH347的串口又出了点问题, 打开初始化都没问题, 但是发送的数据不对(波特率是对的), 再次请求支援orz


CH347Uart_Open(0);

CH347Uart_Init(0, 115200, 8, 0, 1, 10);


uint ilength = 8;

byte[] txdata = { 0X01, 0X02, 0X03, 0X04, 0X05, 0X06, 0X07, 0X08 };

CH347Uart_Write(0, ref txdata, ref ilength);


image.png


image.png



您好,去掉ref参数,写入的buf直接传值即可,修改代码如下:

image.png

image.png


借楼提问,用楼主的C#接口代码已经跑通,CH347SPI_Read函数返回值也是true,示波器也能够量到MISO预期的波形,但是数组还是发送数据值,没有更新为接收数据,读取数据长度Length也没有变化,请问这可能是什么原因呢?

无标题.pngspacer.gif


您好,如API返回true,则ioBuffer的数据就会被更新,如未更新可简单将MISO外接3.3V或者GND,看下数据内容是否正确。


MISO能识别从机发过来的5V电平吗?我也发现SPI_READ()调用后,波形没问题,但是buffer读取值不对。可能是从机发送的电压是5V高,而CH347F输出的是3.3V


您好,芯片的MISO支持5V FT(5V耐受),正常情况下是可以识别并解析 SPI 设备返回的数据的。可能问题出现在发送方向,导致 SPI 从机接收 CH347 MOSI 的输出不对导致。

有条件的话,可以用示波器/逻辑分析仪抓取下实际的总线数据。


只有登录才能回复,可以选择微信账号登录