DLL里面有關(guān)SPI的函數(shù)是“通過USB函數(shù)的位控制函數(shù)來實(shí)現(xiàn)”還是“硬件直接里面有移位寄存器,直接以字節(jié)為單位來傳輸”?(看前面的帖子說位操作很慢)
一般SPI都是傳輸完所有Bit后,那條CS控制線才變一下。但我看CH341的SPI函數(shù)都是以字節(jié)為單位,但如果是12bit或者其他8Bit的能否傳輸,每次SPI傳輸8bit后那條SPI的CS控制線會不會都變一下
DLL里面有關(guān)SPI的函數(shù)是“通過USB函數(shù)的位控制函數(shù)來實(shí)現(xiàn)”還是“硬件直接里面有移位寄存器,直接以字節(jié)為單位來傳輸”?(看前面的帖子說位操作很慢)
一般SPI都是傳輸完所有Bit后,那條CS控制線才變一下。但我看CH341的SPI函數(shù)都是以字節(jié)為單位,但如果是12bit或者其他8Bit的能否傳輸,每次SPI傳輸8bit后那條SPI的CS控制線會不會都變一下
不是通過USB函數(shù)的位控制函數(shù)來實(shí)現(xiàn)的, 通過我們驅(qū)動來控制CH341芯片內(nèi)的硬件來模擬spi時序.我們網(wǎng)上提供了一個例程,您可以參考.ch341evt.zip\exam\exam.c
SPI控制線有一條CSn控制線,在傳輸數(shù)據(jù)時是有效,傳輸完數(shù)據(jù)時就變無效。
但我看CH341的SPI函數(shù)都是傳輸8bit的,如果我要傳輸12bit,是不是要分為兩次,那么發(fā)了前8bit后,這條CSn控制線會不會變復(fù)位,然后再發(fā)下8bit,CSn又產(chǎn)生一個周期? 簡單的說就是CSn一個有效周期內(nèi)能否產(chǎn)生非8bit的傳輸數(shù)據(jù)?
在我們動態(tài)庫里提供了CH341BitStreamSP(),主要是處理SPI位數(shù)據(jù)流,4線/5線接口,對于非整八位的數(shù)據(jù)傳輸,可以用這個函數(shù)來實(shí)現(xiàn).此時CS由函數(shù)來控制變化. CH341BitStreamSPI( // 處理SPI位數(shù)據(jù)流,4線/5線接口,時鐘線為DCK/D3引腳,輸出數(shù)據(jù)線為DOUT/DOUT2引腳,輸入數(shù)據(jù)線為DIN/DIN2引腳,片選線為D0/D1/D2,速度約8K位*2 ULONG iIndex, // 指定CH341設(shè)備序號 ULONG iLength, // 準(zhǔn)備傳輸?shù)臄?shù)據(jù)位數(shù),一次最多896,建議不超過256 PVOID ioBuffer ); // 指向一個緩沖區(qū),放置準(zhǔn)備從DOUT/DOUT2/D2-D0寫出的數(shù)據(jù),返回后是從DIN/DIN2讀入的數(shù)據(jù) /* SPI時序: DCK/D3引腳為時鐘輸出, 默認(rèn)為低電平, DOUT/D5和DOUT2/D4引腳在時鐘上升沿之前輸出, DIN/D7和DIN2/D6引腳在時鐘下降沿之后輸入 */ /* ioBuffer中的一個字節(jié)共8位分別對應(yīng)D7-D0引腳, 位5輸出到DOUT, 位4輸出到DOUT2, 位2-位0輸出到D2-D0, 位7從DIN輸入, 位6從DIN2輸入, 位3數(shù)據(jù)忽略 */ /* 在調(diào)用該API之前,應(yīng)該先調(diào)用CH341Set_D5_D0設(shè)置CH341的D5-D0引腳的I/O方向,并設(shè)置引腳的默認(rèn)電平 */
緩沖區(qū)內(nèi)的每個字節(jié)對應(yīng)于下面相應(yīng)的引腳: SPI <=> CH341 字節(jié)位 DIN <=> D7 7 DIN2 <=> D6 6 DOUT <=> D5 5 DOUT2 <=> D4 4 DCK <=> D3 3 CS1 <=> D2 2 CS2 <=> D1 1 CS3 <=> D0 0 具體的函數(shù)說明請見ch341dll.h,例程請看ch341evt.zip\exam\exam.c.
這樣子這個函數(shù)用起來很麻煩,前面準(zhǔn)備部分要做很多工作,
“速度約8K位*2”指的是DCK這個時鐘線上面的時鐘頻率?如果是8KHz左右,那么的確較慢,還快不過串行口。
其實(shí)用起來也就是幾個函數(shù),不復(fù)雜.可能只是說明文字多了點(diǎn),看似復(fù)雜.8K是時鐘.速度不可能很快,畢竟是USB接口傳輸數(shù)據(jù)是1ms 1幀,沒辦法.
準(zhǔn)備這個數(shù)據(jù)結(jié)構(gòu)我覺得麻煩,例如16bit的SPI輸出,要將這一個字里面逐bit分解到16個字節(jié)相應(yīng)bit,讀進(jìn)來又要將分散在16字節(jié)中的bit組合成字。