Я работаю над аудиоприложением, в котором вместо хранения аудиоданных на SD-карте ( Waveshield на Arduino) я сохраняю их на микросхеме флэш-памяти SPI и использую собственную плату с MCU, DAC и усилителем.
Я использую Winbond W25Q80BVSSIG .
Я довольно хорошо знаком с программированием AVR с использованием AVRISP MKII или USBTiny , записывают данные на устройстве флэша сделано с тем же программистом? Я не смог ничего найти, когда специально искал программистов SPI-флэш-памяти.
Этот вопрос является продолжением этого .
spi
programming
flash
JYelton
источник
источник
Ответы:
Если вы просто ищете способ запрограммировать флэш-память Winbond SPI с «предварительно загруженными» данными, которые ваш микроконтроллер будет читать для использования во время работы, то вам стоит поискать программиста, который может выполнять внутрисхемное программирование. чипа SPI Flash. Это также известно как внутрисистемное программирование (ISP).
Одним из вариантов является программист из DediProg, Это устройство, подключенное через USB, может программировать по схеме, если вы правильно проектируете свою плату. Они даже продают переходник, который можно прикрепить к корпусу SOW-16 без необходимости создавать отдельный программный заголовок на вашей плате. DediProg имеет информационные бюллетени по применению, чтобы помочь с правильным дизайном для внутрисхемного использования. Основная стратегия проекта - найти простой способ изолировать драйверы интерфейса SPI в вашей системе MCU, чтобы они не мешали драйверам в модуле программирования SPI. Самый простой способ сделать это - поместить последовательные резисторы в линии, управляемые микроконтроллером, между микроконтроллером и флэш-памятью SPI. Программист подключается со стороны SPI-вспышки последовательных резисторов. Альтернативные методы могут включать добавление MUX или аналоговых переключателей в управляемых интерфейсных линиях. Еще более умная схема - добавить
Второй вариант, который стоит рассмотреть, - это USB-программист от ASIX . Presto может выполнять различные типы устройств SPI и I 2 C, включая устройства SPI Flash. У меня есть одно из этих устройств специально для программирования микроконтроллеров Atmel и различных типов флэш-устройств SPI. Это более экономичное решение, чем вышеуказанное устройство, но не такое гибкое. Их более дорогое устройство под названием Forte способно делать больше вещей, потому что у него больше контактов интерфейса.
Иногда может быть полезно иметь возможность подключить программатор к целевой плате без необходимости добавлять программный заголовок. Одним из хороших решений для этого является размещение небольшого набора площадок в специальном месте, определенном компанией TagConnect . Они производят и продают серию быстроразъемных кабелей для программирования, которые имеют pogo-контакты, которые занимают специальную площадь на плате. Доступны 6-контактные, 10-контактные и 14-контактные версии кабеля для широкого спектра применений. Стоимость кабелей очень разумная.
источник
Могу поспорить, что вы могли бы сделать это с Bus Pirate, не проходя через MCU ... что позволяет вам выполнять несколько произвольных последовательных взаимодействий непосредственно с микросхемой, используя SPI, I2C или связь UART. «Сценарий» может занять немного времени, но, вероятно, позволит вам выполнить эту работу.
Я также видел специализированные инструменты для прямой загрузки EEPROM через I2C, но не флэш и не SPI специально.
источник
Я никогда не слышал о каких-либо других инструментах, говорящих SPI напрямую с таким чипом, и я думаю, что это невозможно, поскольку «все» чипы требуют разных вызовов для разных операций.
Чипу необходимы вызовы SPI для записи, чтения, изменения сектора, размера данных и т. Д. В разделе 7.2 «Инструкции» в таблице данных вы можете увидеть все команды SPI, которые вы можете отправить ему. Следовательно, поскольку все внешние флэш-памяти не имеют одинакового набора инструкций, вам необходимо написать специальное приложение для этого.
РЕДАКТИРОВАТЬ: Будучи продолжением, я действительно рекомендую одну из собственных флэш-памяти SPI от Atmels, так как большинство из них уже написали открытый код для них. Посмотрев на этот пост от AVRFreaks , вы получите код для некоторых серийных флеш-чипов Atmels AT45xxxx.
источник
Я купил программатор FlashCAT от Embedded Computers за 30 долларов США. Было удивительно легко подключаться к ПК через USB и записывать файлы на флэш-память Winbond. Методы и программисты в других ответах, вероятно, так же хороши, некоторые дороже или сделают сам, но это дешевый и простой способ, который соответствует тому, что я искал.
Вот картина установки:
Программатор FlashCAT находится слева, подключен к USB. Он работает с программным обеспечением для программирования SPI (в отличие от JTAG) и обеспечивает питание флэш-памяти. Подаваемая мощность выбирается (3,3 В или 5 В) с помощью перемычки.
У меня есть SOIC для DIP-сокета на макете, чтобы было легко программировать несколько чипов. (Вы также можете увидеть еще одну микросхему флэш-памяти на макете.)
Я еще не преобразовал свой аудиофайл в надлежащий двоичный формат, но я записал WAV-файл размером 211 КБ в память только для проверки, как показано выше. Затем я прочитал его обратно и сохранил как новый файл, переименовал в .wav, и он правильно воспроизводится на ПК.
Следующим шагом будет правильное кодирование файла, а также написание программного обеспечения AVR для считывания данных и отправки их через ЦАП.
Отказ от ответственности: я не связан с Embedded Computers, я просто клиент, который выбрал что-то недорогое и делюсь информацией об опыте работы с продуктом.
источник
Вроде поздно к обсуждению, но для всех, кто читает его после поиска ....
Одна вещь, которую я не заметил, это абсолютно важно при программировании микросхем SPI Flash, это управление выводом Chip Select (CS_). Вывод Chip Select используется для пунктуации команд на SPI Flash. В частности, переход от CS_ high к CS_ low должен непосредственно предшествовать выдаче любого кода операции операции записи (WREN, BE, SE, PP). Если существует активность между переходом CS_ (т. Е. После того, как CS_ опустился) и до передачи операционного кода записи, операционный код записи обычно игнорируется.
Кроме того, то, что обычно не объясняется в таблицах данных SPI Flash, поскольку это неотъемлемая часть протокола SPI, что также важно, так это то, что для каждого байта, передаваемого по шине SPI, он получает взамен байт. Кроме того, никто не может получить никаких байтов, если он не передает байт.
Как правило, мастер SPI, которым командует пользователь, имеет буфер передачи, который отправляет байты на линию MOSI шины SPI, и буфер приема, который принимает байты от линии MISO шины SPI.
Чтобы какие-либо данные появлялись в буфере приема, некоторые данные должны быть отправлены в буфер передачи. Точно так же каждый раз, когда кто-то отправляет данные из буфера передачи, данные появляются в буфере приема.
Если вы не будете осторожны с балансировкой записей Transmit и Receive, то вы не будете знать, чего ожидать в буфере приема. Если буфер приема переполнен, данные обычно просто разливаются и теряются.
Таким образом, когда кто-то отправляет команду чтения, которая представляет собой однобайтовый код операции и три байта адреса, он сначала получает четыре байта «мусора» в буфере основного приема SPI. Эти четыре байта мусора соответствуют коду операции и трем адресным байтам. Пока они передаются, Flash еще не знает, что читать, поэтому он просто возвращает четыре слова мусора.
После того, как эти четыре слова мусора возвращены, чтобы получить что-либо еще в буфере приема, вы должны передать количество данных, равное количеству, которое вы хотите прочитать. После кода операции и адреса не имеет значения, что вы передаете, это просто заполнитель, чтобы передать чтение DAta из SPI Flash в приемный буфер.
Если вы не внимательно следите за этими первыми четырьмя возвращенными мусорными словами, вы можете подумать, что одно или несколько из них являются частью ваших возвращенных данных чтения.
Итак, чтобы узнать, что вы на самом деле получаете из приемного буфера, важно знать размер вашего буфера, знать, как определить, является ли он пустым или полным (обычно это бит состояния регистрации, чтобы сообщить об этом) и отслеживать, как много вещей, которые вы передали и сколько вы получили.
Перед запуском любой операции SPI Flash рекомендуется «истощить» прием FIFO. Это означает, что нужно проверить состояние буфера приема и очистить его (обычно это делается путем «чтения» буфера приема), если он еще не пуст. Обычно очистка (чтение) уже пустого буфера приема не причиняет вреда.
Следующая информация доступна из временных диаграмм в таблицах вспышек SPI, но иногда люди пропускают биты. Все команды и данные передаются на флэш-память SPI с использованием шины SPI. Последовательность чтения SPI Flash:
Обратите внимание, что шаги 6 и 7 должны чередоваться и повторяться в зависимости от размера чтения и размера ваших буферов приема и передачи. Если вы передадите большее количество слов за один раз, чем может вместить ваш буфер приема, вы потеряете некоторые данные.
Для того чтобы выполнить команду Page Program или Write, выполните следующие действия. Размер страницы (обычно 256 байт) и размер сектора (обычно 64 КБ) и связанные границы - это свойства используемой вами SPI Flash. Эта информация должна быть в таблице данных для Flash. Я опущу детали балансировки буферов передачи и приема.
Наконец, если ваш адрес записи не находится на границе страницы (обычно кратной 256 байтам), и вы пишете достаточно данных, чтобы пересечь следующую границу страницы, данные, которые должны пересечь границу, будут записаны в начало страницы, на которой адрес вашей программы падает. Итак, если вы попытаетесь записать три байта по адресу 0x0FE. Первые два байта будут записаны в 0x0fe и 0x0ff. Третий байт будет записан по адресу 0x000.
Если вы передаете количество байтов данных, превышающее размер страницы, самые ранние байты будут отброшены, и для программирования страницы будут использоваться только последние 256 байтов (или размер страницы).
Как всегда, не несет ответственности за последствия каких-либо ошибок, опечаток, упущений или отклонений в вышеперечисленном, а также за то, как вы его используете.
источник
Вопреки некоторым утверждениям здесь, в то время как есть некоторые причудливые PROM SPI, есть также некоторые стандартные инструкции, используемые большим разнообразием PRI SPI, включая тот, который вы выбрали.
Как уже упоминалось викатку, есть хорошие кабели с бит-bash, которые могут напрямую программировать SPI. С точки зрения сигнала, SPI очень похож на JTAG, поэтому любой кабель с битовой комбинацией должен использоваться при условии открытого интерфейса. Внутренний протокол вспышки довольно прост.
Мы используем старшего брата той части, на которую вы смотрите, для загрузки наших плат FPGA (256M - 2G). У адресации есть дополнительный байт для обработки тома хранилища, но в остальном команды в основном идентичны.
Тип используемого PROM должен быть удален по секторам, а затем запрограммирован по страницам. Чтение значительно быстрее, чем запись (в случае тех, которые мы используем, программирование может занять полчаса, но чтение всего PROM занимает меньше секунды на частоте 108 МГц).
Теперь для команд: Есть способ более доступные команды в этих устройствах , чем на самом деле требуется программировать их. На самом деле вам нужно только следующее:
Если вам нужна дополнительная информация, ознакомьтесь с примечаниями к ответам по программированию SPI для ПЛИС Xilinx на их веб-сайте (http://www.xilinx.com). Они реализуют сокращенный набор команд, чтобы их FPGA могли загружаться с этих устройств.
Я разработал свой собственный программист, чтобы сделать это на основе того, что у меня есть, и написал скрипт для программиста на Python, но вы можете сделать то же самое с помощью кабеля. В вашем случае я бы серьезно подумал сделать все косвенно через MCU, как предлагает Майкл Карас. Вам не нужно программировать весь PROM от MCU за один раз - вы можете сделать это по секторам.
источник
Вы должны быть в состоянии изменить назначение USBtiny для программирования флэш-памяти вместо целевого MCU, если вам удобно менять его программирование. Однако на нем может не хватить памяти, чтобы сделать ее достаточно универсальной для программирования как MCU, так и флэш-памяти.
Где-то у меня есть плата из проекта, которая имеет как ATTINY, так и SPI-флешку, и использует ее как Arduino в качестве легкодоступного «программиста». Небольшая модификация эскиза ISP используется для программирования MCU с помощью avrdude, затем специальная утилита отправляет последовательность, которая переводит эскиз в специальный режим и записывает блоки данных во флэш-память SPI.
источник