CH347 SPI讀寫(xiě)操作的幾個(gè)函數(shù)區(qū)別是什么?

CH347 提供了4個(gè)讀寫(xiě)函數(shù)CH347SPI_Write(),CH347SPI_Read(),CH347SPI_WriteRead,CH347StreamSPI4但開(kāi)發(fā)手冊(cè)里對(duì)函數(shù)的描寫(xiě)太簡(jiǎn)單了,我的疑問(wèn)

1)spi_read函數(shù) iLength為PULONG型的變量,看起來(lái)像是個(gè)指針。參數(shù)說(shuō)明里的描述是“準(zhǔn)備讀取的數(shù)據(jù)字長(zhǎng)度”那么iLength里面存放的到底是告訴read函數(shù)需要讀取字節(jié)的數(shù)量還是read函數(shù)讀結(jié)束后將讀到的實(shí)際字節(jié)數(shù)量寫(xiě)入到iLength,如果是后一種情況很容易內(nèi)存溢出如何防止?

2)WriteRead()函數(shù)ioBuffer參數(shù)說(shuō)明“ 指向一個(gè)緩沖區(qū),放置準(zhǔn)備從MOSI 寫(xiě)出的數(shù)據(jù),返回后是從MISO 讀入的數(shù)據(jù)”這個(gè)函數(shù)是先寫(xiě)后讀,CH347SPI_Read函數(shù)也是先寫(xiě)后讀且寫(xiě)的長(zhǎng)度都可以指定那么這兩個(gè)函數(shù)的區(qū)別是什么?是read函數(shù)讀取長(zhǎng)度可以自己指定,WriteRead函數(shù)讀取長(zhǎng)度不能指定么?

3)CH347StreamSPI4 也是ioBuffer: 指向一個(gè)緩沖區(qū),放置準(zhǔn)備從MOSI 寫(xiě)出的數(shù)據(jù),返回后是從MISO 讀入的數(shù)據(jù) 那么這個(gè)函數(shù)同WriteRead()有什么區(qū)別呢?


能否解釋下這幾個(gè)函數(shù)的具體區(qū)別?



附:

CH347SPI_Read(

ULONG iIndex,

ULONG iChipSelect,

ULONG oLength,

PULONG iLength,

PVOID ioBuffer);

參數(shù)說(shuō)明

oLength: 準(zhǔn)備發(fā)出的數(shù)據(jù)字節(jié)數(shù)

iLength: 準(zhǔn)備讀取的數(shù)據(jù)字長(zhǎng)度

ioBuffer: 指向一個(gè)緩沖區(qū),放置準(zhǔn)備從MOSI 寫(xiě)出的數(shù)據(jù),返回后是從MISO 讀入的數(shù)據(jù)


CH347SPI_WriteRead( ULONG iIndex,

ULONG iChipSelect,

ULONG iLength,

PVOID ioBuffer );

參數(shù)說(shuō)明

iLength: 準(zhǔn)備傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)

ioBuffer: 指向一個(gè)緩沖區(qū),放置準(zhǔn)備從MOSI 寫(xiě)出的數(shù)據(jù),返回后是從MISO 讀入的數(shù)據(jù)


CH347StreamSPI4(ULONG iIndex,

ULONG iChipSelect,

ULONG iLength,

PVOID ioBuffer );

iLength: 準(zhǔn)備傳輸?shù)淖止?jié)數(shù)

ioBuffer: 指向一個(gè)緩沖區(qū),放置準(zhǔn)備從MOSI 寫(xiě)出的數(shù)據(jù),返回后是從MISO 讀入的數(shù)據(jù)



熱門(mén)產(chǎn)品 : CH390:以太網(wǎng)控制器芯片

您好,關(guān)于您的疑問(wèn):

1、CH347SPI_Read中iLength首先為本次read需要讀取的數(shù)據(jù)長(zhǎng)度,其次讀取結(jié)束后會(huì)將實(shí)際讀取的數(shù)據(jù)長(zhǎng)度賦值到iLength,正常情況下實(shí)際讀取的數(shù)據(jù)不會(huì)大于最初指定的iLength。

2、CH347SPI_Read函數(shù)主要功能是用于讀取SPI數(shù)據(jù),其附加的寫(xiě)入功能是為了面對(duì)某些SPI器件需要先下發(fā)相關(guān)指令再進(jìn)行讀取的情況。CH347SPI_WriteRead則是作為流模式讀寫(xiě)方式,實(shí)現(xiàn)同時(shí)讀寫(xiě)操作,其讀取寫(xiě)入的長(zhǎng)度也是可自行指定的。

3、CH347StreamSPI4其API為適應(yīng)此前調(diào)用方式,功能與CH347SPI_WriteRead一致。



多謝解答。從你的解答中我了解到WriteRead函數(shù)讀寫(xiě)是在同一時(shí)間進(jìn)行。我如果要給設(shè)備先發(fā)一個(gè)命令然后才開(kāi)始讀取設(shè)備返回的情況只能用read函數(shù),這樣理解對(duì)吧?


是很奇怪,我感覺(jué)直接不需要write函數(shù)了,反正read和write只是某一bit為0還是1的區(qū)別。我直接在寫(xiě)的操作中吧buffer數(shù)組中某一位改為1不就行了。遍歷寄存器也可以用read,反正發(fā)送幾個(gè)byte的數(shù)據(jù)可以自己配置


您好,因SPI總線(xiàn)底層硬件是交換傳輸,所以事實(shí)上單獨(dú)的SPI寫(xiě)或讀函數(shù)是可以直接被 CH347SPI_WriteRead 函數(shù)替代使用的。

之所以提供單獨(dú)的 CH347SPI_Read 和 CH347SPI_Write 函數(shù)是考慮到實(shí)際應(yīng)用有需要單向操作的場(chǎng)景,此類(lèi)函數(shù)使用會(huì)更直觀些。


SPI_read()函數(shù),指定一個(gè)buffer[]數(shù)組,波形都沒(méi)問(wèn)題,就是讀取結(jié)果為FF,然后用SPI_WriteRead()函數(shù),更奇怪了,buffer[0]是后發(fā)送的,buffer[1]先發(fā)送,然后返回值是先讀取的賦給buffer[1]

這些都是什么邏輯?

另外,我buff這么聲明OK的吧

image.png

image.png

發(fā)送兩個(gè)字節(jié),讀取兩個(gè)字節(jié)。16個(gè)clk,讀取的兩個(gè)字節(jié)是前八個(gè)和后八個(gè)clk對(duì)應(yīng)的MISO信號(hào)是吧?問(wèn)題到底在哪


看到您其他貼已解決。

——————————

后續(xù),如有問(wèn)題隨時(shí)與我們溝通。遇問(wèn)題,結(jié)合硬件SPI排查會(huì)更快些。

相關(guān)SPI編程參考:https://blog.csdn.net/WCH_TechGroup/article/details/132173785?



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

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