一、调试中发现,linux spi 驱动通过spi_write 或者 spi_sync 最多只能写0XFFFF 个字节。
二、在 Linux 的 SPI 驱动中,通过 spi_write
或 spi_sync
函数传输数据时,数据传输的大小通常受到一些底层实现和协议限制的影响。在 SPI 子系统中,一次传输的数据大小可能最多为 0xFFFF(65535)字节。
三、解决方案。
int spi_send_large_data(struct spi_device *spi, const u8 *data, size_t len) {
size_t chunk_size = 0xFFFF; // 每次传输的最大数据量
int ret = 0;
while (len > 0) {
size_t transfer_size = min(len, chunk_size);
ret = spi_write(spi, data, transfer_size);
if (ret < 0) {
return ret; // 传输失败,返回错误码
}
data += transfer_size;
len -= transfer_size;
}
return 0; // 成功
}