ESP32 如何让 SPI 传输更快



我使用 ESP32 传输 32MB NOR 闪存芯片的芯片内容,但是传输整个 32MB 需要 1 个多小时,我希望有一种方法可以在这里加速它 我当前的代码

uint8_t sector_buffer [512];
Serial.print("Writing NOR Dump to SDn");
vspi->beginTransaction(SPISettings(30000000, MSBFIRST, SPI_MODE0));
digitalWrite(VSPI_SS, LOW); //pull SS low to prep other end for transfer
vspi->transfer(WB_READ_DATA);
vspi->transfer(0x00); // Address (three bytes, A23 bit first).
vspi->transfer(0x00);
vspi->transfer(0x00);
//open sd file here
for (int i=0;i<0x10000;i++) { // 32Mbytes / 512.
for (int s=0;s<512;s++) sector_buffer[s] = vspi->transfer(0x00);
//write to sd
file.write(sector_buffer, 512);
}
digitalWrite(VSPI_SS, HIGH); //pull ss high to signify end of data transfer
vspi->endTransaction();

与其单独传输每个字节,不如考虑使用SPI.transfer(buffer, size)方法。https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/spi_master.html#transfer-speed-considerations 中找到的表将使您很好地了解为什么发送单个字节充其量是次优的。根据 https://www.arduino.cc/en/Reference/SPITransfer:"在缓冲区传输的情况下,接收的数据将就地存储在缓冲区中(旧数据被接收的数据替换(。

最新更新