Открыть список
Как стать автором
Обновить

Комментарии 46

Ох жалко не могу плюс поставить.
PS1 ковырять интересное занятие.
PS. Недавно тоже ковырял SD карту через SPI пришлось переводить его в режим 32 бита, чтобы выиграть немного скорости за счет меньшего «межбайтного» пространства в SPI. При этом казалось что вроде STM не подвержены такой напасти, но по логу вижу, что всё также.
В логе что в статье запись PSIO, там по определению должны быть гапы. В SPI что на карту гапов нет. Более того, конкретно у STM32F042 SPI 16ти битный и имеет FIFO на 3 слова в каждую сторону. И установка размера меньше 9 бит (4-8 бит) автоматически включает пакинг. Если посмотреть в код, что по ссылке на гитхаб статье, то видно, Card_SendCMD() посылает 6 байт команды как 3 слова а затем ждёт сначала опустошения FIFO передачи, а потом ещё и снятия BUSY. А вот Card_SPI() работает с байтами и даже в SPI1_DR пишет как в байт:
*((__IO uint8_t *)&SPI1->DR) = Data;

Если сделать обычное приравнивание, то произойдёт запись слова и пересылка станет 16 бит. Так что пересылка идёт достаточно плотно и между байтами если и есть задержка, то она очень маленькая. И, кстати, DMA в данном проекте особо не поможет: скорости это точно не прибавит, разве что будет гарантировать, что все 512 байт прилетят без прерывания, а значит сэкономится немного времени. Возможно, позже я доработаю до DMA.
Упс, недоглядел это лог PSIO.
В SPI что на карту гапов нет.

Значит правильно помню что на STM проблем не было, у NIOS II размер гапа примерно как размер передачи байта, с упреждающей посылкой следующего можно чуть сократить но всё равно неприятно получалось.
При правильной настройке SPI, при достаточной частоте ядра (F4/H7) для использования прерываний или правильной настройке DMA сигнал SCK вообще в логе выглядит как непрерывная стабильная частота. Для этого в блоке SPI есть разные флаги: TXE/BSY/FTLV/FRLV и прочие. И именно при полном понимании какой флаг для чего и грамотном использовании этих флагом добивается гладкая работа интерфейса. И примеров этому вы не найдёте в интернете, т.к. там обычно школьные примеры с программным поллингом. Ну и практически любой SPI у STM имеет второй режим I2S, а он не терпит гапов по определению.
Вы в jlcpcb отсылали те файлы, которые на гитхабе? И вам такую сверловку сделали? У вас там 0.005 дюйма сверло указано. Это слегка маловато. Для вашего проекта было бы логично использовать минимальное 0.3мм с внешним диаметром площадки 0.7мм.

Не знаю, как китайцы, но Резонит пишет, что могут сделать переходное отверстие 0,1 мм за совсем дорого (точнее, с ценой «по запросу»). Не вижу, где было бы написано, что использовался jlcpcb.

Не вижу, где было бы написано, что использовался jlcpcb
Номер на платах похож.
Файлы что на гитхабе в обработке на грязных платках, ниразу не юзал jlcpcb. Но говорят, что они через них и работают. Всегда без проблем принимали и изготавливали. Вот состояние на сейчас конкретно файлов с гитхаба:
image
Фотографии готовых устройств в статье так же были изготовлены там же.
Всегда без проблем принимали и изготавливали.
Это не значит, что сделано правильно. Платы ваши простые, китайцы могут и без спроса поменять диаметры/рисунок. Впрочем, дело ваше.
Спасибо за разъяснения. На всякий случай подправил гербера согласно вашей рекомендации.
Сейчас не каждый и вспомнит, что такое NOR FLASH.
Чего это? используются везде. Просто интерфейс стал последовательным, и корпус 8ногим.
25-я серия горячо любимая…
Ну обычно подразумевается, что NOR FLASH это память с прямым доступом в каждую ячейку. И никто не задумывался о NOR как таковом, пока не пришла NAND. Вот тогда и стали различать. Т.е., в быту обычно это использовали чтобы обозначить именно интерфейс доступа, а не физическую организацию ячеек. Ну а ваш пример это уже, естественно, SPI FLASH.
она всё еще NOR, и с произвольным доступом. Уж не знаю какой у вас быт, но у нас ее так и называют. Больше того, если стать осциллографом на шину такой памяти в разных устройствах — часто можно обнаружить что выполнение программы из нее не кешируется, а выполняется Direct, прям как из настоящей параллельной.
Интересно, а как решен вопрос со временем доступа то? С последовательным доступом ещё понятно, а полностью рандомный? Там же оверхед на установку адреса и команды минимум 24 такта (для двухбайтовых адресов). Каким бы быстрым SPI не был, он всё равно не сможет полностью заменить параллельную шину.
image
Ах да, я совсем упустил из виду QSPI. Помноженный на бешеные частоты он вполне может работать почти как настоящая память с параллельной шиной.

(минутка занудства) тёплое — это тёплое, не надо путать его с мягким.
Флешки с SPI-интерфейсом бывают и с NOR внутри, и с NAND (у этих объемы от 0.5 до нескольких гигабит). Так что SPI FLASH — штука несколько абстрактная.

Ну разницу между интерфейсом и организацией ячеек памяти я осознаю и понимаю. Так же понимаю какие ограничения есть у NOR матрицы или NAND матрицы. В любом случае благодарю за уточнение, возможно кто-то может и запутаться, читая мой предыдущий пост.

Вы о чем, параллельные NOR Flash вполне живы, S29AL016J там, например. Используются в критичных местах (типа загрузчиков, как подсказывает даташит), где недопустимы единичные проблемы битых ячеек, присущие NAND.

Похоже используемый на фото КС156А старше чем PS1
О, да. Эту карту мне отдали как нерабочую в 1996м году. Я тогда уже имел некоторое представление об устройствах карт памяти, т.к. часто занимался ремонтом среди знакомых. Попробовал поставить — сработало. И карта до сих пор работает! Там даже сохранёнки какие-то из Music2000, Tekken 3 и ещё пары игр.
Флешка для БЕСКОНЕЧНОЙ карты памяти? это не модно, надо втыкать wi-fi и складывать сохранения в облако.
Технически, уже давно есть полноразмерные SD/MMC карты с WiFi. Они предназначены для фотографов и выгружают фото сразу в сеть на NAS, точнее, линкуются к открытой сетевой шаре. Так что да, меняем все кишки на избитую ESPxxx и понеслась. Только вот корпус будет почти как у 8ми страничной на фото из статьи.
Я человек простой — вижу STM вместо ардуины — ставлю плюс.
К сожалению, повторить хоть и хочется, но не сильно получится:
STM32F042F6 недоступен по вменяемой цене с вменяемыми сроками: в магазинах города нет, под заказ сроки от 40 недель, на Ali — от 500 рублей за штуку с неизвестным качеством.
А какие есть варианты в быстром и адекватном доступе? Быть может есть смысл перейти на какую-то альтернативу? Предлагайте.
По STM'овскому Product Finder'у есть 7 вариантов в том же корпусе и с теми же объемами RAM/ROM. И их всех нет в наличии.
Да и с blue-pill'ным STM32F103C8T6 тоже как-то не очень.
Похоже кризис компонентов и до DIY-щиков добрался.
есть 7 вариантов в том же корпусе и с теми же объемами RAM/ROM

Ну а если что-то совсем другое подобрать? RAM надо больше либо равно 2КиБ (1,6КиБ уходит на буферы и таблицу), с ROM всё более свободно, текущая прошивка занимает около 18КиБ. Вот со скоростью уже туже: 48МГц минимум, если нет ОЗУ на кеширование всего образа.

Да и с blue-pill'ным STM32F103C8T6 тоже как-то не очень.

У него 72МГц и 48 ног в корпусе. С ним уже можно прикрутить экранчик на верхнюю сторону и получить понятную пользователю обратную связь. Но он и стоит 4х от 042.

А в целом согласен, кризис есть. Но ходят слухи что конкретно с STM ситуация выправится через 1-2 года.
Не специалист по ассортименту STM, но пока наиболее доступный по наличию и цене
STM32F102R4T6A. Но он вообще 64-LQFP.
Он 4х от цены 042, но при этом FLASH всего 16КиБ. Туда этот код уже не влезет. Ну или всё переписывать без использования С.
А больше нет ничего.
Все остальное — от 300 рублей и доступно в единичных количествах.
Так что будем ждать лучших времен.
в сумме это 128 КиБ, что и видно по маркировке FLASH памяти на фото выше.

То ли лыжи не едут… Мне не видно. Никаких «128k» не вижу.
Маркировка FLASH на картинке гласит: SST29VE010. Выделенные цифры означают объём в битах (в данном случае — один мегабит, что равно 128 КиБ).
Ну вот так и надо было сразу написать в статье, для тех, кто не в курсе (это на будущее замечание в том числе).
Предполагается, что читатель уже имеет некоторую базовую информацию об электронике, компонентах и их маркировках. Должен ли я добавить сей дисклаймер в начала статьи, которая публикуется в хаб DIY?
Кодировка объёма флеш памяти в обозначении = базовая информация об электронике?
Кодировка объёма флеш памяти является частью обозначений элементов. Встречный вопрос: является ли обозначение элементов базовой информацией об электронике?
Ну и прочтите моё сообщение после запятой тоже.
Ваша отсылка к маркировке выглядит примерно так:
«микросхема имеет 39600 логических элементов, что и видно по маркировке»
[маркировка] = EP4CE40F29C8N
Ну и где противоречие то? Вы же привели в пример EP4CE40F29C8N, а не, скажем, EP4CE6F29C8N. Ваша придирка звучит примерно так: шильдик «Lada 1600» это просто красивое число рядом с названием, а не объём двигателя в кубических сантиметрах.

Я, конечно, понимаю, что каждый производитель обозначает свои элементы каждый во что горазд, но с памятью всё обстоит более-менее стандартно и адекватно. К тому же есть объединяющий стандарт JEDEC. Если используются 2 цифры, это однозначно кибибиты: 16, 32, 64. Если используются следующие 3 цифры, это всё равно кибибиты: 128, 256 и 512. Следующие 3 цифры означают уже мибибиты: 010, 020, 040 и 080. Если используются 4 цифры, то это только мимбибиты. И это знает каждый, кто работает с SRAM, EPROM или FLASH памятью.
Интересная инфа, буду знать. С паматью не работал, потому не знаю.
Вы «Инженер-схемотехник-ПЛИСовод», и не знаете, как расшифровывается маркировка микросхем памяти? Мда.
Давно ждал такого проекта. Похожая мысль была, но не с SD картой, а с USB на другой стороне, чтоб удобно было выгружать на комп. Как-то года два назад попробовал через ардуину подцепить Memorycard, а на компе прога MemcardRex, которая подключается к ардуине по COM порту. Таким образом читать/записывать сейвы. Но так и оставил эту затею пересобрать все не на соплях «на потом». Буду следить за проектом, попробую повторить, но не силен в STM.
Планируете в дальнейшем сделать программу для чтения/редактирования образов MEMCRDXX.BIN?
Такая программа уже существует и про неё сказано в статье: MCCSE. Но, во-первых она старая, а во вторых оригинал был японский, а английский перевод какой-то кустарный. Так что да, идея менеджера образов карт памяти так же есть и, вероятно, приложение я тоже сделаю, с возможностью общего хранилища, куда можно будет скидывать отдельные сейвы, а не просто набор стандартных образов как у MCCSE.
Показалось, что MCCSE читает напрямую с карты, через LPT, не сами дампы карты. В исходниках где-то есть описание структуры выходного образа сейвов? В статье я не увидел, может пропустил.

P.S. добавить потом в прогу возможность конвертации сейвов с RetroPi например )))
MCCSE работает с образами карт памяти. В том числе и вычитывая реальную карту через физическое подключение. Логическая организация карт памяти намеренно не озвучена в статье, так как это тема другой статьи и, собственно, не относится к данной теме.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.