SPI Flash

Туцик
Туцик аватар
Offline
Зарегистрирован: 31.03.2020

Добрый день, коллеги. Интересует вопрос, Как с помощью 3 байт нужно обращаться к адресу флеш памяти? Например как адрес 000A14B0 перевести в 3 байта? Есть какой нибудь калькулятор или формула?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Чо?

b707
Offline
Зарегистрирован: 26.05.2017

Туцик пишет:

Например как адрес 000A14B0 перевести в 3 байта? Есть какой нибудь калькулятор или формула?

никак. Судя по символам это шестнадцатиричное значение длиной 4 байта:

 000A14B0 = 0x00 0x0A 0x14 0x80

Туцик
Туцик аватар
Offline
Зарегистрирован: 31.03.2020

Вот пример, записывающий 16 байт массива, по адресу 00000000. Обращение к адресу идет с помощью 3х байт. Вопрос как это считается?

#include <SPI.h>

const int SSPin = 10;
const byte WREN = 0x06;
const byte WRDI = 0x04;
const byte READ = 0x03;
const byte PP = 0x02;
const byte ADDR1 = 0;
const byte ADDR2 = 0;
const byte ADDR3 = 0;

void setup() {
  pinMode(SSPin, OUTPUT);
  SPI.begin();

  SPISettings mySet(100000, MSBFIRST, SPI_MODE0);
  
  // Выставление разрешения записи:
  SPI.beginTransaction(mySet);
  digitalWrite(SSPin, LOW);
  SPI.transfer(WREN);
  digitalWrite(SSPin, HIGH);
  SPI.endTransaction();

  // Запись массива данных в ПЗУ:
  SPI.beginTransaction(mySet);
  digitalWrite(SSPin, LOW);
  SPI.transfer(PP);
  SPI.transfer(ADDR1);
  SPI.transfer(ADDR2);
  SPI.transfer(ADDR3);
  byte data[] = {0x48,0x45,0x4c,0x4c,0x4f,0x2c,0x20,0x53,0x4f,0x4c,0x54,0x41,0x55,0x2e,0x52,0x55};
  for (int i=0; i<sizeof(data); i++) {
    SPI.transfer(data[i]);
  }
  digitalWrite(SSPin, HIGH);
  SPI.endTransaction();
  
  // Выставление запрета записи:
  SPI.beginTransaction(mySet);
  digitalWrite(SSPin, LOW);
  SPI.transfer(WRDI);
  digitalWrite(SSPin, HIGH);
  SPI.endTransaction();
}

void loop() {
  // ничего не делаем в цикле
}

 

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

У SPI Flash надо вводить полный адрес. Как у параллельной , "обнулить" физически  на землю не получится.

Значит нужно брать соответствующую флэш, например W25Q32FV

Туцик
Туцик аватар
Offline
Зарегистрирован: 31.03.2020

Дим-мычъ пишет:

У SPI Flash надо вводить полный адрес. Как у параллельной , "обнулить" физически  на землю не получится.

Значит нужно брать соответствующую флэш, например W25Q32FV

У меня W25Q64, как вводить полный адрес?

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

Туцик пишет:

У меня W25Q64, как вводить полный адрес?

У неё полный адрес больше 3 байт

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

Виноват, ошибся. Адрес тоже 3 байта

Туцик
Туцик аватар
Offline
Зарегистрирован: 31.03.2020

Дим-мычъ пишет:

Туцик пишет:

У меня W25Q64, как вводить полный адрес?

У неё полный адрес больше 3 байт

 

Вот я тефтеля, у чувака то мелкая флешка. У меня получается 4 байта. Т.е. адрес 000A14B0 разбивается на 4 байта в hex 00 0A 14 B0 и каждый байт адреса перевести в dec?

ADDR1 - 0

ADDR2 - 10

ADDR3 - 20

ADDR4 - 176

так?

b707
Offline
Зарегистрирован: 26.05.2017

Туцик, ты вроде производил впечатление нормального...

Туцик
Туцик аватар
Offline
Зарегистрирован: 31.03.2020

b707 пишет:

Туцик, ты вроде производил впечатление нормального...

никак. Судя по символам это шестнадцатиричное значение длиной 4 байта:

 000A14B0 = 0x00 0x0A 0x14 0x80

 

А по делу есть что сказать?

b707
Offline
Зарегистрирован: 26.05.2017

Туцик пишет:

никак. Судя по символам это шестнадцатиричное значение длиной 4 байта:

 000A14B0 = 0x00 0x0A 0x14 0x80

 

А по делу есть что сказать?

да где мне

судя по всему, ты сам даже до этого не догадался

Туцик
Туцик аватар
Offline
Зарегистрирован: 31.03.2020

b707 пишет:

Туцик пишет:

никак. Судя по символам это шестнадцатиричное значение длиной 4 байта:

 000A14B0 = 0x00 0x0A 0x14 0x80

 

А по делу есть что сказать?

да где мне

судя по всему, ты сам даже до этого не догадался

Не парься, догадался. Но к решению это никакого отношения не имеет.

b707
Offline
Зарегистрирован: 26.05.2017

Туцик пишет:

адрес 000A14B0 разбивается на 4 байта в hex 00 0A 14 B0 и каждый байт адреса перевести в dec?

так?

давай я тебе поясню реакцию форума на твою ветку...

понимаешь, вот это желание перевести байты из hex в dec изобличает в тебе дремучего нуба, ничего не смыслящего в контроллерах. Если ты готов это признать и перестать корчить из себя знатока, как делал до сих пор - ты можешь надеяться на помощь.

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

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

Туцик, 64М-bit памяти как раз влезает в 3байта адреса, так что всё должно быть норм. 8МВ = 8,388,608 bit = 1000 0000 0000 0000 0000 0000(в двоичной системе). Извиняюсь за #6, поторопился.

Туцик
Туцик аватар
Offline
Зарегистрирован: 31.03.2020

b707 пишет:

Туцик пишет:

адрес 000A14B0 разбивается на 4 байта в hex 00 0A 14 B0 и каждый байт адреса перевести в dec?

так?

давай я тебе поясню реакцию форума на твою ветку...

понимаешь, вот это желание перевести байты из hex в dec изобличает в тебе дремучего нуба, ничего не смыслящего в контроллерах. Если ты готов это признать и перестать корчить из себя знатока, как делал до сих пор - ты можешь надеяться на помощь.

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

Ну все верно я и написал, можно не переводить. Единственное, у адреса два 00 спереди лишних было. В это я не мог врубится долго. И где это я из себя знатока корчил? Я пару раз в неделю захожу почитать форум.  Пробую прикрутить флешку к ардуине, в нее записывать изображения и др. Готовой либы я не нашел. Есть готовая адафрутовская уже с фс, но в ардуину она не лезет.