Программирование SPIFlash
- Войдите на сайт для отправки комментариев
Всем добрый день! Имеется Мега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. Питание тоже в пределах нормы, но ответа от чипа нет. Я его спалил? Как его проверить?
MOSI -- это MasterOutput/SlaveInput. Мастер в вашем случае -- это ардуино. Стало быть, данный сигнал должен подаваться с выхода ардуины на вход флешки (SI). По вашему описанию выходит наоборот. Ну и MISO -- это линия для передачи в обратном направлении (с ноги SO флешки).
А вообще, я бы для начала все же озадачился согласованием уровней. Посадить какой-нибудь 8мгц про-мини на 2в питания и с него терзать флешку. Или сделать нормальный конвертер уровней.
Библиотека с этим чипом умеет работать?
Пин MOSI подключил через транзисторный ключ, так как было подозрение что ардуина может не принять сигнал с 1.9 вольт.
Вы хотели сказать MISO (от слейва к мастеру)? Потому что MOSI - это наоборот, от мастера к слейву. По даташиту уровень лог.1, который гарантированно должен определить МК - 0.7В при питании 1.8V - 2.4V или 0.6В при питании 2.4V - 5.5V. Поэтому на MISO транзисторный ключ не нужен, а вот на MOSI нужен.
А я вот теперь почесал репу и не пойму, то ли нужен, то ли не нужен. К пятивольтовой ардуине подключают трехвольтовые девайсы по SPI и так:
Если пересчитать делители на 2в, то и так, мне кажется, можно. Флешку тоже от 2в запитать. Вроде должна она дернуть за ногу ардуину так, что тот единицу узреет. :)
Forfrends, могу огорчить вас. Скетч абсолютно рабочий, а вот в самом приложении косяк. В нем контрольная сумма счетается по одному алгоритму, а в скетче по другому и весь процесс заканчивается на проверке контрольной суммы. Переписывался с этим перцем, он или дураком прикинулся или, что удивительно, спецом эту ошибку внедрил. Вобщем сослался на то что проверял на английской версии windows, русской у него нет и переделывать он ее не будет, так как следов(исходников) у него не осталось. Я этот скетч переделывал под ARM, шаг за шагом по блокам. И уткнулся в проверку контрольной суммы записанных данных в память м/с. Пробовал и на UNO и на Mega2560. Результат один, сбой записи при проверке контрольной суммы записанного блока. Спотыкается все на этом месте.
Опробировал на W25Q128 и в выводном и безвыводном корпусе, она у меня планировалась как флешка для хранения шрифтов и спрайтов. Ищу кого то, кто может или приложение ломануть и поправить или написать новое на основе алгоритма скетча. Сейчас рассматриваю вариант подключения w28Q128 по SDIO через CDC по типу флэшки, вот только надо разобратс как в FatFs уменьшить размер страници, там для CD 512 а у м/с 256. Да и с системой комманд надо шаманить.
Прошу прощения, всех ввел в заблуждение - транзисторный ключ подключен к MISO. Писал ночью, спать хотел...
diger67, понятно. Это касательно приложения для записи на флеш, или всех примеров в библиотеке? Так у меня все примеры не видят память. В сериал пишут "память не распознана". Пример для считывания ИД возвращает нули (0xFF).
Тоже планировал использовать под хранение "системных" файлов...
Это касательно приложения FlashUplouder. Алгоритм определения сигнатуры, записи чтения и стирания вроде работают корректно. У меня память на 3.3 В и я как то перепутали, запитал ее пятью вольтами. Целый день работал сней пока разбирался почему не загрузить через Uplouder, а ей хоть бы что. При этом запись, чтение стирание из скетча работали безупречно.
Хм... почему же у меня не работает? Может нужно использовать ноги 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 не работает.
Попробуйте поставить последовательно во все цепи резисторы по 10 кОм и подтянуть пины ардуино во время чтения к "+", PulUp. Возможно mega2560 нехватает логического уровня сигнала.
при такой инициализации пины м/к подтягиваются к плюсу и сробатывание происходит надежнее. Я сейчас точно не помню какой SPI используется в библиотеке, аппаратный или совтовый. Дело в том что я конечно проверял на ардуино. Но в основном работал с переделанной библиотекой под stm32 на аппаратном SPI и там можно задавать режим подтяжки каждого пина.
З.Ы. Посмотрел, можно и так и так юзать, посмотрите вот эти строки в скетчах
Хм... почему же у меня не работает?
Потому, что как минимум 2 причины:
2 - MiSO (ICSP разъем на плате) (через резисторный делитель 2.5кОм и 4.7кОм.)
7,8 - +1.9v. (через резисторный делитель 2.5кОм и 4.7кОм.)
-вы подаёте на вход меги логическую единицу амплитудой менее вольта. Для 5 вольтовой логики это "ноль".
-Вы питаете микросхему через резисторный делитель. Она жрёт под 200 ма. Какой максимальный ток даст ваш делитель?
diger67, Попробую подтянуть резисторы, может поможет.
dimax, простите, ошибся когда писал: пин 10 через делитель, а к МИСО через транзисторный ключ. По питанию: микросхема потребляет до 50 мА (как я понял по даташиту). А как расчитать ток делителя я не знаю.
Я бы рекомендовал преобрести winbond и не париться, в режиме standby она жрет копейки, потребление сильно возрастает только в режиме записи. Так что выйграете в энерго потреблении не много, а от лишнего гемора избавитесь.
З.Ы. Специально посмотрел на шилде TFT куда впаял Flash. Там стоят подтягивающие резисторы по 10 кОм на VCC, а сами пины идут прямо на ардуино. Получается что я питал ее от 3.3 v, что от 5.0 v сигнальные пины подключались напрямую к ардуино. Память работала, не грелась и не сгорела. Но это память которая расчитана на работу при питании до 3.6 v.
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 , найдете несколько библиотек . много картинок и статей. все уже исследовано и подключено.
Кто нибудь разобрался как записать информацию FlashUplouderом? У меня чип определяется, очищается. Но писать отказывается. Или есть нечто похожее? Чип W25Q64FV. Записать картинки, шрифты, и меньше головной боли
Читайте сообщение выше: FlashUplouder с багом, и писать в принципе не может.
Читайте сообщение выше: FlashUplouder с багом, и писать в принципе не может.
Вроде как он его обновил.
чем дело закончилось ?
Ничем. Та флешка так и не заработала. Файлы храню на MicroSD.