CH347 SPI读写操作的几个函数区别是什么?

CH347 提供了4个读写函数CH347SPI_Write(),CH347SPI_Read(),CH347SPI_WriteRead,CH347StreamSPI4但开发手册里对函数的描写太简单了,我的疑问

1)spi_read函数 iLength为PULONG型的变量,看起来像是个指针。参数说明里的描述是“准备读取的数据字长度”那么iLength里面存放的到底是告诉read函数需要读取字节的数量还是read函数读结束后将读到的实际字节数量写入到iLength,如果是后一种情况很容易内存溢出如何防止?

2)WriteRead()函数ioBuffer参数说明“ 指向一个缓冲区,放置准备从MOSI 写出的数据,返回后是从MISO 读入的数据”这个函数是先写后读,CH347SPI_Read函数也是先写后读且写的长度都可以指定那么这两个函数的区别是什么?是read函数读取长度可以自己指定,WriteRead函数读取长度不能指定么?

3)CH347StreamSPI4 也是ioBuffer: 指向一个缓冲区,放置准备从MOSI 写出的数据,返回后是从MISO 读入的数据 那么这个函数同WriteRead()有什么区别呢?


能否解释下这几个函数的具体区别?



附:

CH347SPI_Read(

ULONG iIndex,

ULONG iChipSelect,

ULONG oLength,

PULONG iLength,

PVOID ioBuffer);

参数说明

oLength: 准备发出的数据字节数

iLength: 准备读取的数据字长度

ioBuffer: 指向一个缓冲区,放置准备从MOSI 写出的数据,返回后是从MISO 读入的数据


CH347SPI_WriteRead( ULONG iIndex,

ULONG iChipSelect,

ULONG iLength,

PVOID ioBuffer );

参数说明

iLength: 准备传输的数据字节数

ioBuffer: 指向一个缓冲区,放置准备从MOSI 写出的数据,返回后是从MISO 读入的数据


CH347StreamSPI4(ULONG iIndex,

ULONG iChipSelect,

ULONG iLength,

PVOID ioBuffer );

iLength: 准备传输的字节数

ioBuffer: 指向一个缓冲区,放置准备从MOSI 写出的数据,返回后是从MISO 读入的数据


您好,关于您的疑问:

1、CH347SPI_Read中iLength首先为本次read需要读取的数据长度,其次读取结束后会将实际读取的数据长度赋值到iLength,正常情况下实际读取的数据不会大于最初指定的iLength。

2、CH347SPI_Read函数主要功能是用于读取SPI数据,其附加的写入功能是为了面对某些SPI器件需要先下发相关指令再进行读取的情况。CH347SPI_WriteRead则是作为流模式读写方式,实现同时读写操作,其读取写入的长度也是可自行指定的。

3、CH347StreamSPI4其API为适应此前调用方式,功能与CH347SPI_WriteRead一致。



多谢解答。从你的解答中我了解到WriteRead函数读写是在同一时间进行。我如果要给设备先发一个命令然后才开始读取设备返回的情况只能用read函数,这样理解对吧?


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