Как заполнить буфер данными, считанными из SPI?

Я подключил флэш - память Macronix MX35LF1GE4AB к arduino Uno с помощью переключателей логического уровня. То, что я пытаюсь сделать с ним, - это сбросить его содержимое.

Для этого я реализую следующий скетч:

#include <SPI.h> 

#define LASTBLOCK 1023
#define LASTPAGE 63
#define LASTBYTE 2111

#define PAGE_READ 13h
#define PAGE_READ_CACHE_SEQUENCIAL 03h
#define READ_FROM_CACHE 3Bh
#define PAGE_READ_CACHE_END 3Fh

#define BUFFER_LEN 2111 

int page_to_read = 1;
int block_to_read = 1;

// We store each page to Microcontroiller's ram
byte buffer[BUFFER_LEN]; 

void setup() {
 SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0));
// Serial.begin(9600);
}

void loop() {

  // I need to reset the counts before reading any block 
  if(page_to_read > LASTPAGE){
    page_to_read = 1;
    block_to_read ++;
    
  }

  if(block_to_read > LASTBLOCK){
    return ;
  }

  if(page_to_read == LASTPAGE){
     SPI.transfer(PAGE_READ_CACHE_END);
  } else if (page_to_read == 1) {
     SPI.transfer(PAGE_READ);
     SPI.transfer(PAGE_READ_CACHE_SEQUENCIAL);
  }

  SPI.transfer(READ_FROM_CACHE);
  
    
  page_to_read++;
}

Теперь я хочу заполнить байтовый буфер буфера[BUFFER_LEN] данными, чтобы я мог отправлять их через последовательный порт.

Как я могу этого достичь?

, 👍0

Обсуждение

SPI.transfer(buffer, BUFFER_LEN); -- https://www.arduino.cc/en/Reference/SPITransfer, @Majenko

Помимо того, что отмечают Ник и Майенко, для правильного использования библиотеки SPI вы всегда должны вызывать "SPI.begin ()" в своей настройке (если только вы не запускаете ее как подчиненное устройство), потому что это помогает настроить правильные состояния ввода-вывода MOSI, MISO и SS и т. Д.. SPI.beginTransaction() следует вызывать перед SPI.transfer ()', а SPI.endTransaction ()` - после завершения передачи данных. Это позволяет другим задачам использовать шину SPI., @hcheung


1 ответ


1
#define BUFFER_LEN 2111 
byte buffer[BUFFER_LEN];

Это определенно не сработает, потому что Uno имеет 2048 байт оперативной памяти, некоторые из которых необходимы системе. Например, последовательные буферы имеют размер 64 байта каждый.

,

Значит, мне понадобится 32-байтовый буфер?, @Dimitrios Desyllas

Да, меньший буфер поможет., @Nick Gammon

Как вы думаете, зачем вам вообще нужен буфер, когда вы просто выводите данные через serial?, @Majenko

Для того, чтобы раздуть данные, считываемые с spi, хотя USB последовательный, хотя я могу просто прочитать их байт за байтом. Кроме того, мне нужно будет перекодировать их в шестнадцатеричном формате. Кроме того, мне нужно будет отправить страницу и идентификатор блока, чтобы восстановить данные в файл на моем компьютере., @Dimitrios Desyllas