Как заполнить буфер данными, считанными из 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]
данными, чтобы я мог отправлять их через последовательный порт.
Как я могу этого достичь?
1 ответ
#define BUFFER_LEN 2111 byte buffer[BUFFER_LEN];
Это определенно не сработает, потому что Uno имеет 2048 байт оперативной памяти, некоторые из которых необходимы системе. Например, последовательные буферы имеют размер 64 байта каждый.
Значит, мне понадобится 32-байтовый буфер?, @Dimitrios Desyllas
Да, меньший буфер поможет., @Nick Gammon
Как вы думаете, зачем вам вообще нужен буфер, когда вы просто выводите данные через serial?, @Majenko
Для того, чтобы раздуть данные, считываемые с spi, хотя USB последовательный, хотя я могу просто прочитать их байт за байтом. Кроме того, мне нужно будет перекодировать их в шестнадцатеричном формате. Кроме того, мне нужно будет отправить страницу и идентификатор блока, чтобы восстановить данные в файл на моем компьютере., @Dimitrios Desyllas
- Чтение и запись во флэш-память GD25B32CPIG
- Как использовать SPI на Arduino?
- OVF в последовательном мониторе вместо данных
- Как отправить строку с подчиненного устройства Arduino с помощью SPI?
- Проблема совместного использования MISO с несколькими RFID-считывателями RC522
- Программирование ведомого SPI для Arduino
- Последовательная связь между несколькими устройствами (или ардуино)
- Максимальная скорость SPI для ведомого Uno/clone?
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