Программирование SPIFlash

forfrends
Offline
Зарегистрирован: 24.02.2015

Всем добрый день! Имеется Мега2560 и SPI Flash память GD25LQ64B 1.8V. Она же W25Q64, индекс "L" означает "низковольтовая" 1.67-2 в.

Установил библиотеку SPIflash, взял здесь: http://www.rinkydinkelectronics.com/library.php?id=65

Подключил аппаратному SPI, CS - 10 пин. В "воздухе" остались ноги WP# и HOLD#. Подключал через резисторные делители. Но я их неправильно собрал и на память пошло напряжение 3.3 вольта. Обратил на это внимание не сразу... Потом поставил правильные делители, теперь напряжение 1.9 вольт. Пин MOSI подключил через транзисторный ключ, так как было подозрение что ардуина может не принять сигнал с 1.9 вольт.

Пробовал все возможные скетчи из примеров библиотеки - ноль. Подключение 100% правильное, пины не перепутаны. По даташиту ноги WP# и HOLD# не нужны для стандарного SPI. Питание тоже в пределах нормы, но ответа от чипа нет. Я его спалил? Как его проверить?

a5021
Offline
Зарегистрирован: 07.07.2013

forfrends пишет:
Пин MOSI подключил через транзисторный ключ, так как было подозрение что ардуина может не принять сигнал с 1.9 вольт.

MOSI -- это MasterOutput/SlaveInput. Мастер в вашем случае -- это ардуино. Стало быть, данный сигнал должен подаваться с выхода ардуины на вход флешки (SI). По вашему описанию выходит наоборот. Ну и MISO -- это линия для передачи в обратном направлении (с ноги SO флешки).

А вообще, я бы для начала все же озадачился согласованием уровней. Посадить какой-нибудь 8мгц про-мини на 2в питания и с него терзать флешку. Или сделать нормальный конвертер уровней.

Библиотека с этим чипом умеет работать?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

forfrends пишет:

Пин MOSI подключил через транзисторный ключ, так как было подозрение что ардуина может не принять сигнал с 1.9 вольт.

Вы хотели сказать MISO (от слейва к мастеру)? Потому что MOSI - это наоборот, от мастера к слейву. По даташиту уровень лог.1, который гарантированно должен определить МК - 0.7В при питании 1.8V - 2.4V или 0.6В при питании 2.4V - 5.5V. Поэтому на MISO транзисторный ключ не нужен, а вот на MOSI нужен.

a5021
Offline
Зарегистрирован: 07.07.2013

А я вот теперь почесал репу и не пойму, то ли нужен, то ли не нужен. К пятивольтовой ардуине подключают трехвольтовые девайсы по SPI и так:

Если пересчитать делители на 2в, то и так, мне кажется, можно. Флешку тоже от 2в запитать. Вроде должна она дернуть за ногу ардуину так, что тот единицу узреет. :)

diger67
Offline
Зарегистрирован: 25.07.2015

Forfrends, могу огорчить вас. Скетч абсолютно рабочий, а вот в самом приложении косяк. В нем контрольная сумма счетается по одному алгоритму, а в скетче по другому и весь процесс заканчивается на проверке контрольной суммы. Переписывался с этим перцем, он или дураком прикинулся или, что удивительно, спецом эту ошибку внедрил. Вобщем сослался на то что проверял на английской версии windows, русской у него нет и переделывать он ее не будет, так как следов(исходников) у него не осталось. Я этот скетч переделывал под ARM, шаг за шагом по блокам. И уткнулся в проверку контрольной суммы записанных данных в память м/с. Пробовал и на UNO и на Mega2560. Результат один, сбой записи при проверке контрольной суммы записанного блока. Спотыкается все на этом месте.

while (!Serial.available()) {};
            check1 = Serial.read();    
            check = 0;
            for (int i=0; i<256; i++)
              check += myFlash.buffer[i];
            if ((check & 0xFF) == check1)
            {
              myFlash.writePage(page);
              Serial.print(RESPONSE_ACK);
            }
            else
            {
              Serial.print(RESPONSE_NAK);
            }

Опробировал на W25Q128 и в выводном и безвыводном корпусе, она у меня планировалась как флешка для хранения шрифтов и спрайтов. Ищу кого то, кто может или приложение ломануть и поправить или написать новое на основе алгоритма скетча. Сейчас рассматриваю вариант подключения w28Q128 по SDIO через CDC по типу флэшки, вот только надо разобратс как в FatFs уменьшить размер страници, там для CD 512 а у м/с 256. Да и с системой комманд надо шаманить.

forfrends
Offline
Зарегистрирован: 24.02.2015

Прошу прощения, всех ввел в заблуждение - транзисторный ключ подключен к MISO. Писал ночью, спать хотел...

diger67, понятно. Это касательно приложения для записи на флеш, или всех примеров в библиотеке? Так у меня все примеры не видят память. В сериал пишут "память не распознана". Пример для считывания ИД возвращает нули (0xFF).

Тоже планировал использовать под хранение "системных" файлов...

diger67
Offline
Зарегистрирован: 25.07.2015

Это касательно приложения FlashUplouder. Алгоритм определения сигнатуры, записи чтения и стирания вроде работают корректно. У меня память на 3.3 В и я как то перепутали, запитал ее пятью вольтами. Целый день работал сней пока разбирался почему не загрузить через Uplouder, а ей хоть бы что. При этом запись, чтение стирание из скетча работали безупречно.

forfrends
Offline
Зарегистрирован: 24.02.2015

Хм... почему же у меня не работает? Может нужно использовать ноги WP# и HOLD#? По да ташиту не могу понять. Вроде как не нужны, в то же время в примерах от Adafruit они подключены к "+". Попробовал так и сделать - реакции нет. Чип 25LQ64BV. Я подключал так: 

1 - пин 10 (пробовал напрямую и через транзисторный ключ)

2 - MiSO (ICSP разъем на плате) (через резисторный делитель 2.5кОм и 4.7кОм.)

3 - +1.9v. (через резисторный делитель 2.5кОм и 4.7кОм.)

4 - GND

5 - MOSI (ICSP разъем на плате) (через резисторный делитель 2.5кОм и 4.7кОм.)

6 - SCK (ICSP разъем на плате) (через резисторный делитель 2.5кОм и 4.7кОм.)

7,8 - +1.9v. (через резисторный делитель 2.5кОм и 4.7кОм.)

Может ли быть проблема в номиналах делителей? В теме о подключении дисплеев от мобильных упоминается что на некоторых номиналах дисплеи не заводились. Хотя в то же время почти на таких же номиналах нормально работала microSD.

//относительно загрузки данных на чип: в примерах есть скетч для записи данных в память из microSD, можно таким способом, если FlashUplouder не работает.

diger67
Offline
Зарегистрирован: 25.07.2015

Попробуйте поставить последовательно во все цепи резисторы по 10 кОм и подтянуть пины ардуино во время чтения к "+", PulUp. Возможно mega2560 нехватает логического  уровня сигнала.

DDRx = 0x00;
PORTx = (1<<Px.n) | (1<<Px.m) | ........

при такой инициализации пины м/к подтягиваются к плюсу и сробатывание происходит надежнее. Я сейчас точно не помню какой SPI используется в библиотеке, аппаратный или совтовый. Дело в том что я конечно проверял на ардуино. Но в основном работал с переделанной библиотекой под stm32 на аппаратном SPI и там можно задавать режим подтяжки каждого пина.

З.Ы. Посмотрел, можно и так и так юзать, посмотрите вот эти строки в скетчах

// Software SPI
// Remember to set the correct pins for your development board
// Parameter order: SI/MOSI, SO/MISO, SCK/SCLK, CE/SS
//SPIflash myFlash(5, 6, 7, 4);

// Hardware SPI
// Remember to set the correct pin for your development board
// Parameter order: CE/SS
SPIflash myFlash(52);

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

forfrends пишет:

Хм... почему же у меня не работает?

Потому, что как минимум 2 причины:

forfrends пишет:

2 - MiSO (ICSP разъем на плате) (через резисторный делитель 2.5кОм и 4.7кОм.)

7,8 - +1.9v. (через резисторный делитель 2.5кОм и 4.7кОм.)

 

-вы подаёте на вход меги логическую единицу амплитудой менее вольта. Для 5 вольтовой логики это "ноль".

-Вы питаете микросхему через резисторный делитель. Она жрёт под 200 ма. Какой максимальный ток даст ваш делитель?

 

forfrends
Offline
Зарегистрирован: 24.02.2015

diger67, Попробую подтянуть резисторы, может поможет.

dimax, простите, ошибся когда писал: пин 10 через делитель, а к МИСО через транзисторный ключ. По питанию: микросхема потребляет до 50 мА (как я понял по даташиту). А как расчитать ток делителя я не знаю.

diger67
Offline
Зарегистрирован: 25.07.2015

Я бы рекомендовал преобрести winbond и не париться, в режиме standby она жрет копейки, потребление сильно возрастает только в режиме записи. Так что выйграете в энерго потреблении не много, а от лишнего гемора избавитесь.

З.Ы. Специально посмотрел на шилде TFT куда впаял Flash. Там стоят подтягивающие резисторы по 10 кОм на VCC, а сами пины идут прямо на ардуино. Получается что я питал ее от 3.3 v, что от 5.0 v сигнальные пины подключались напрямую к ардуино. Память работала, не грелась и не сгорела. Но это память которая расчитана на работу при питании до 3.6 v.

slider
Offline
Зарегистрирован: 17.06.2014

1. попробуйте другой флэш . более высоковольтный 3,3в-5в. В технике их полным полно ( компьютерная техника материнские платы CD/DVD-rom, ноутбуки, навигаторы, плееры, электронные книжки , домашние радио телефоны, DVD плееры, портативные аудио колонки, .... )  Или в местных магазинах , стоит смешных 40руб  recomb, поиск 25Q16  25Q32 25Q64... первые буквы могут быть разные - производитель. В не дешевом чип и дипе и то 58р.chipdip .  Смотрите по PDF чтоб 3,6в ил больше были.  А так, 1.8в ослабленный резистором может не хватает для лог.1 ардуины.

2. SPI в основном  используется аппаратный , поэтому всеже ищите высоковольтные микрухи - не понадобятся согласование уровней. Ибо при резисторе выше 1ком уже портится форма импульсов на аппаратном SPI  . //здесь приходилось уменьшать номиналы резисторов arduino.

3. загуглите arduino spi flash , найдете  несколько библиотек . много картинок и статей. все уже исследовано и подключено.

Alex178
Offline
Зарегистрирован: 06.03.2018

Кто нибудь разобрался как записать информацию FlashUplouderом? У меня чип определяется, очищается. Но писать отказывается. Или есть нечто похожее? Чип W25Q64FV. Записать картинки, шрифты, и меньше головной боли

forfrends
Offline
Зарегистрирован: 24.02.2015

Читайте сообщение выше: FlashUplouder с багом, и писать в принципе не может.

Alex178
Offline
Зарегистрирован: 06.03.2018

forfrends пишет:

Читайте сообщение выше: FlashUplouder с багом, и писать в принципе не может.

Вроде как он его обновил.

v1.3 02 Sep 2019 added support for audio samples
    updated FlashUploader to v1.2
    fixed a small bug in fileOpen()
    added option to restrict access to the file system for time critical operations
    fixed some string conversion warnings

 

yuhenotix@2p-ma...
Offline
Зарегистрирован: 09.06.2019

чем дело закончилось ?

forfrends
Offline
Зарегистрирован: 24.02.2015

Ничем. Та флешка так и не заработала. Файлы храню на MicroSD.