В одном из моих проектов возникла необходимость последовательно записать наборы оцифрованных данных с 3-х каналов АЦП.
Результаты измерений нужно было сохранять на скорости 6 КБ/сек, а продолжительность цикла сбора данных могла составлять сутки и более.
Таким образом, общий объем информации, которую необходимо было сохранить, составлял 500 МБ и более.
В качестве накопителя было решено выбрать SD-карту.
Задача осложнялась тем, что конструктивные особенности создаваемого устройства не позволяли вынимать карту для чтения данных.
Контроллер XMega128A4U , на котором в тот момент реализовывалась задача, не имел аппаратной поддержки SDIO, но позволял работать с картой через интерфейс SPI, пропускная способность которого вполне подходила для записи с необходимой скоростью, но чтения такого объёма Загрузка данных в компьютер по цепочке SD-карт через преобразователь SPI -> контроллер -> USB-Com была довольно утомительной и занимала много времени.
После недолгих раздумий (и безуспешных попыток немного подправить вышеописанную комбинацию) было решено использовать аппаратный контроллер SD Card Reader, для чего и был выбран чип GL823 поддержка USB 2.0. Теперь нужно было обеспечить раздельный доступ к SD-карте со стороны контроллера по SPI при сборе данных и со стороны компьютера через SDIO, используя GL823 во время скоростного чтения.
Это разделение было реализовано с помощью двух 4-канальных мультиплексоров 2х1.
Линии от коммутаторов U2, U3 с приставкой «STM» подключаются к контроллеру, линии с приставкой «SD» подключаются к SD-карте.
Для управления схемой используются сигналы SD2MCU, переключающие SD-карту между MCU и GL823 и GL823_PWR, переключение питания через МОП-транзистор GL823 .
Изначально я рассматривал этот подход как своего рода «костыль», но, к моему немалому удивлению, он оказался вполне работоспособным и был подтвержден практикой успешной эксплуатации устройства в течение нескольких лет. Более того, в следующих разработках на основе СТМ32F407 который имеет поддержку SDIO для доступа к карте, и возможность поднять USB 2.0 HS MSD (правда через параллельный интерфейс ULPI), возможность использования решения на базе GL823 с переключением автобусов.
Использование связки СТМ32F407 с внешним PHY USB3300 удалось добиться скорости чтения карт ~41 Мбит/с, а при использовании аппаратного картридера скорость достигает ~150 Мбит/с при прочих равных условиях.
Измерения проводились путем чтения файла размером 128 МБ с SD-карты, отформатированной в FAT32. Оба подхода имеют свои нюансы использования, но, как мне кажется, оба имеют «право на жизнь».
Что касается нюансов: в моем случае на следующей итерации разработки этого устройства железо нужно было разместить на плате шириной 26 мм.
Электропроводка ПП для корпуса LQFP100 СТМ32F407 в данном случае несколько сложно, но его «младший брат» СТМ32F405 LQFP64 очень хорошо вписался в корпус.
Но, да СТМ32F405 ULPI нет, поэтому USB 2.0 HS для него недоступен, а реализация MSD FS сильно уступает по скорости чтения данных с карты.
Используя то же решение, описанное выше, можно получить достаточную скорость доступа к SD с компьютера при чтении данных с устройства.
Буду рад, если мой опыт окажется кому-то полезным.
Теги: #Программирование микроконтроллеров #stm32 #microSD #схемотехника #коммутатор #CD #stm32f #usb 2.0 #XMega
-
Подсчет Количества Раздач Логотипа И Знака
19 Oct, 24 -
Полезные Материалы По San
19 Oct, 24 -
Число Землян Сегодня Составит 6666666666.
19 Oct, 24 -
Выставка Истории Электронных Игр
19 Oct, 24 -
Вы Давали Взятку?
19 Oct, 24 -
Кеньюская Вилка Kendo Ui Web (Gpl3)
19 Oct, 24