CH347dll 在C#中調(diào)用的問(wèn)題

使用WPF開(kāi)發(fā)CH347T上位機(jī),已對(duì)照官方的CH341的CSHARP例程對(duì)CH347DLL.H進(jìn)行了重寫(xiě),以下為CH347讀數(shù)據(jù)的方法重寫(xiě)前后對(duì)比:

//SPI4讀數(shù)據(jù)?無(wú)需先寫(xiě)數(shù)據(jù),效率較CH347SPI_WriteRead高很多(原CH347DLL.H內(nèi)接口)
BOOL?WINAPI?CH347SPI_Read(ULONG?iIndex,?????//指定設(shè)備序號(hào)
??????????????ULONG?iChipSelect,???//片選控制,位7為0則忽略片選控制,位7為1進(jìn)行片選操作
??????????????ULONG?oLength,?????//準(zhǔn)備發(fā)出的字節(jié)數(shù)
??????????????PULONG?iLength,????//準(zhǔn)備讀入的數(shù)據(jù)字節(jié)數(shù)
			??PVOID?ioBuffer);????//指向一個(gè)緩沖區(qū),放置準(zhǔn)備從DOUT寫(xiě)出的數(shù)據(jù),返回后是從DIN讀入的數(shù)據(jù)
//SPI4讀數(shù)據(jù)?無(wú)需先寫(xiě)數(shù)據(jù),效率較CH347SPI_WriteRead高很多(重寫(xiě)后的C#接口)
[DllImport("CH347DLL.DLL",?EntryPoint?=?"CH347SPI_Read")]
public?static?extern?bool?CH347SPI_Read(uint?iIndex,????//指定設(shè)備序號(hào)
??????????????????????uint?iChipSelect,?//片選控制,位7為0則忽略片選控制,位7為1進(jìn)行片選操作
??????????????????????uint?oLength,???//準(zhǔn)備發(fā)出的字節(jié)數(shù)
??????????????????????uint?iLength,???//準(zhǔn)備讀入的數(shù)據(jù)字節(jié)數(shù)
??????????????????????byte[]?ioBuffer);?//指向一個(gè)緩沖區(qū),放置準(zhǔn)備從DOUT寫(xiě)出的數(shù)據(jù),返回后是從DIN讀入的數(shù)據(jù)


我是C#新手,不太明白為什么PVOID ioBuffer 為什么是直接寫(xiě)成 byte[] ioBuffer,正常如果直接傳緩沖區(qū)數(shù)組進(jìn)去,接口里面的程序不會(huì)無(wú)法訪(fǎng)問(wèn)外面定義的緩沖區(qū)數(shù)組嗎,在實(shí)際在調(diào)用過(guò)程中也是報(bào)錯(cuò):

image.png


嘗試更改傳入的變量,改成IntPtr ioBuffer傳數(shù)組首地址指針、或改成ref byte[] ioBuffer傳數(shù)組引用、或是將數(shù)組首地址轉(zhuǎn)為byte[]數(shù)組再傳入,都是一樣報(bào)錯(cuò),不知道是不是CH347DLL.cs寫(xiě)的有問(wèn)題,附上我重寫(xiě)的CH347DLL.cs,跪求解決方法


icon_rar.gifCH347DLLcs.zip


求助


您好,查看了您的代碼,需要修改一下C#中CH347SPI_Read函數(shù)中的iLength 參數(shù)類(lèi)型,原DLL中參數(shù)類(lèi)型為PULONG,改寫(xiě)C#中可定義為ref UInt32 iLength。


非常感謝, SPI這邊搞定了, 但是我用CH347的串口又出了點(diǎn)問(wèn)題, 打開(kāi)初始化都沒(méi)問(wèn)題, 但是發(fā)送的數(shù)據(jù)不對(duì)(波特率是對(duì)的), 再次請(qǐng)求支援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參數(shù),寫(xiě)入的buf直接傳值即可,修改代碼如下:

image.png

image.png


借樓提問(wèn),用樓主的C#接口代碼已經(jīng)跑通,CH347SPI_Read函數(shù)返回值也是true,示波器也能夠量到MISO預(yù)期的波形,但是數(shù)組還是發(fā)送數(shù)據(jù)值,沒(méi)有更新為接收數(shù)據(jù),讀取數(shù)據(jù)長(zhǎng)度Length也沒(méi)有變化,請(qǐng)問(wèn)這可能是什么原因呢?

無(wú)標(biāo)題.pngspacer.gif


您好,如API返回true,則ioBuffer的數(shù)據(jù)就會(huì)被更新,如未更新可簡(jiǎn)單將MISO外接3.3V或者GND,看下數(shù)據(jù)內(nèi)容是否正確。


MISO能識(shí)別從機(jī)發(fā)過(guò)來(lái)的5V電平嗎?我也發(fā)現(xiàn)SPI_READ()調(diào)用后,波形沒(méi)問(wèn)題,但是buffer讀取值不對(duì)??赡苁菑臋C(jī)發(fā)送的電壓是5V高,而CH347F輸出的是3.3V


您好,芯片的MISO支持5V FT(5V耐受),正常情況下是可以識(shí)別并解析 SPI 設(shè)備返回的數(shù)據(jù)的。可能問(wèn)題出現(xiàn)在發(fā)送方向,導(dǎo)致 SPI 從機(jī)接收 CH347 MOSI 的輸出不對(duì)導(dǎo)致。

有條件的話(huà),可以用示波器/邏輯分析儀抓取下實(shí)際的總線(xiàn)數(shù)據(jù)。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频