Разделяй И Властвуй Или Пиши Медленно – Читай Быстро



Разделяй и властвуй или пиши медленно – читай быстро

В одном из моих проектов возникла необходимость последовательно записать наборы оцифрованных данных с 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

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.