Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
MiGeRA authored Feb 26, 2022
1 parent cf370b1 commit c68853a
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Intel PA28F400 реализует лишь пословную (16-ти разр

Почему так быстро (меньше минуты все 4MB) пишется стоковая серия 29W? В ней есть команда «байпаса», позволяющая при записи каждого слова не подавать команду записи в три шинных цикла флэшки, а использовать сокращенную команду в 1 цикл, да еще при этом упрощен режим фиксации завершения записи слова: на линии данных выставляется не байт статуса, а само записанное слово. Программатор внутри FPGA реализует логику анализа записанного и прочитанного после результата и продолжает дальше «шпарить» из длинного непрерывного потока: одноцикловую команду с последующим словом данных, используя также функцию автоинкремента адреса. «Пулять» в принципе, с точки зрения микросхемы памяти, можно поток любой длины – хоть за раз весь объем. Алгоритм работы с программатором предусматривает деление на куски максимального размера в 64kB – это дает возможность, в том числе, для визуализации шкалы прогресса. Изящное решение получилось у krikzz'а именно в совокупности архитектуры программатора и картриджа с конкретной моделью микросхемой памяти к нему.

Серия 29L (в отличие от 29W, примененной в стоковом решении) не имеет команды «байпаса», но зато предусматривает страничную запись вплоть до 128 слов (256 байт). Запись каждой страницы должна сопровождаться командой из трех шинных циклов флэшки. Потом нужно быстро, не мешкая передавать данные по нужным последовательным адресам в пределах кратности размеров страницы от младших линий адреса (порядок не имеет значения согласно документации, т.е. можно и от старших адресов заполнять буфер, например). Если замешкался – на запись уходит то, что успел загрузить - остальное остается чистым (FF). Завершение записи страницы предусмотрено чекать чтением статуса, автоматически выставляемого на линии данных после ухода данных на запись страницы. При последующей проверке чтением - нужно выявлять «недописанные» страницы и (без предварительного стирания!) просто дописывать («дожигать») их (повторная запись и проверка). Почему именно MX29L3211? – это одна из немногих доступных сейчас в продаже микросхем памяти в корпусе (P)SOP-44 и объемом в 32Mbit, со страничной записью и ценой меньше доллара за штуку.
Серия 29L (в отличие от 29W, примененной в стоковом решении) не имеет команды «байпаса», но зато предусматривает страничную запись вплоть до 128 слов (256 байт). Запись каждой страницы должна сопровождаться командой из трех шинных циклов флэшки. Потом нужно быстро, не мешкая передавать данные по нужным последовательным адресам в пределах кратности размеров страницы от младших линий адреса (порядок не имеет значения согласно документации, т.е. можно и от старших адресов заполнять буфер, например). Если замешкался – на запись уходит то, что успел загрузить - остальное остается чистым (FF). Завершение записи страницы предусмотрено чекать чтением статуса, автоматически выставляемого на линии данных после ухода данных на запись страницы. При последующей проверке чтением - нужно выявлять страницы с «недописанными» словами и (без предварительного стирания!) просто дописывать («дожигать») их (повторная запись и проверка). Почему именно MX29L3211? – это одна из немногих доступных сейчас в продаже микросхем памяти в корпусе (P)SOP-44 и объемом в 32Mbit, со страничной записью и ценой меньше доллара за штуку.

Intel PA28F400 удалось оптимизировать, причем очень существенно! Казалось бы «программистский изыск»: поместить все данные в единый массив, а не вызывать подряд в цикле несколько раз функцию отправки данных, но выигрыш во времени колоссальный! – аж микросхема не успевает … Еще бы, ведь от чтения статуса мы оказались (в прошлой версии). Возвращать его? – лишние usb-транзакции с программатором, что в итоге минимум в два раза дольше результата достигнутого в 1.0.1.0 Конфигурация FPGA программатора не предусматривает чтение и парсинг состояния байта статуса внутри себя без usb-транзакций, но зато предусматривает возможность генерации задержки работы своего «автомата» измеряемую во внутренних циклах («попугаях», экспериментально это где-то полмикросекунды на единицу). Генерировать задержку отдельным пакетом (от софта к программатору) – терять время сопоставимое команде чтение статуса. Но задержку можно «завернуть» в общий непрерывный массив команд-данных! Да, максимальная задержка в «системе команд» программатора - 7 единиц, но можно их подряд формировать несколько – экспериментально подобрано: 4 раза по 5 (что по замерам около 10 микросекунд). На время задержки программатор вхолостую тратит свои внутренние циклы бездействуя. Результат – вся микросхема пишется корректно за 10сек.

Expand Down

0 comments on commit c68853a

Please sign in to comment.