Перейти к содержанию
    

Устройство сбора информации

Доброе время суток уважаемые форумчане.

появилась интересная задачка. некий станок гонит поток данных по RS232 со скоростью 115200 бод/сек. Необходимо устройство которое примит эту информация сложит ее на к себе в энергонезависимую память (предположительно SD карта). а после окончания работы устройство может перегнать запомненую информацию в ПК типа ноутбук.

Уважаемые форумчане большая просьба помочь идеями и опытом в разработке.

Заранее спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Несложное устройство, но есть некоторые тонкости:

1. SD-карта на запись может "курить" порядка 200мс. Все это время Вам нужно буферезировать трафик. На вскидку получается, что

115200 б/с -> 11520 Б/с -> ~44мс на 512 байт (сектор). Т.е. для буферизации нужно не менее 5 секторов (по 512 байт) - почти 2/3 всей RAM меги.

 

2. Записав гиг или два логов очень тяжело переносить их на комп (по последовательному каналу). Тут лучше заранее отформатировать карту (FAT), записать на нее файл data.txt, найти первый кластер этого файла и писать начиная с него. После снятия логов файл вычитывается обычным карт-ридером, и очень быстро.

 

3. Карту лучше брать новейшую. Бытые, отремапленные сектора могут серьезно мешать.

 

4. Если во время логирования пропадет питание, то необходимо найти место окончания предыдущего. Для этого файл можно заполнить каким-нить фиксированным заполнителем (например, 0xCC). При старте двоичным поиском найти первый сектор содержащий в начале, скажем 16 заполнителей и продолжать логить начиная с этого сектора.

 

 

5. Средняя скорость записи менее 2мс на сектор, т.е. можно писать до 22 потоков (115200) или на каждый символ навешивать до 21 байта обвязки (штамп времени и т.п., переход в текстовый вид), но в этом случае и RAM памяти нужно в 22 раза больше.

 

Я делал аналогичное устройство и на LPC2468, и на STM32F103T8. Вот пример лога:

#014

.963 81

.964 02

.965 F0

#013

.978 81

.979 03

.981 F0

#013

.994 81

.995 04

.996 F0

+067887

#014

.010 81

.011 05

.012 F0

#013

.025 81

.026 01

.027 F0

#014

.041 81

.042 02

.043 F0

#014

.057 81

 

, где

#XXX - простой на шине в мс (от 10 до 999)

! - простой на шине более 999мс

.XXX - счетчик миллисекунд

+XXXXX - счетчик секунд

 

Протокол текстовый, выровненный на 8 байт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

некий станок гонит поток данных по RS232 со скоростью 115200 бод/сек. Необходимо устройство которое примит эту информация сложит ее к себе в энергонезависимую память (предположительно SD карта).

А сколько данных требуется хранить и как долго?

 

Если МК планируется ATmega с небольшим количеством RAM, то есть DataFlash - (AT45DBxx) много проще в обращении чем SD, не имеет таких длительных задержек, и плюс ко всему надежнее. Средняя скорость посекторной записи AT45 ~50KB/sec (теоретически минимальная - 13KB/s, но на практике ниже 57KB/s не встречал), что подходит для вашей задачи (>10KB/s), плюс у нее есть два SRAM буфера по 528 байт в которые можно писать без задержек, т.е. можно обойтись очень небольшим количеством памяти на стороне МК для ее обслуживания. Вопрос только хватит ли объема DF для вашей задачи, - порядок объема DF - сотни-килобайт / единицы мегабайт (2 / 4 / 8Mb ..).

 

 

Для работы с SD я бы рекомендовал сменить МК на ARM с 16-64KB набортной RAM, потому как в SD помимо прочих нюансов есть еще такое явление как bad блоки, а значит нужна FS которая умеет эти bad'ы скрывать/восстанавливать, а FS любит память... Ставить внешнюю память для Меги (сама мега, защелка, МС памяти + сопутсвующая рассыпуха и место на плате) будет дороже чем поставить ARM сразу с большим объемом RAM внутри.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...потому как в SD помимо прочих нюансов есть еще такое явление как bad блоки, а значит нужна FS которая умеет эти bad'ы скрывать/восстанавливать, а FS любит память...

Чего-чего?

До сих пор считал, что все бэды маскируются резервными блоками силами самой SD карты, если это невозможно (все резервные блоки выбраны) и карта репортит ошибку - ей пора на помойку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А сколько данных требуется хранить и как долго?

 

Размер данных до сотни мегабайт. Время хранения чем дольше тем лучше. Лучше чтоб для хранения не нужна была электроэнергия.

 

 

Может кто посоветует уже готовые устройства такого типа. Или на худой конец kit с помощью которого этот девайс можно реализовать.

 

А если вместо SD карты использовать обычную флешку. Кто нибудь организовывал связь между ATmega и USB флешкой

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Или на худой конец kit с помощью которого этот девайс можно реализовать.

Да каждый второй kit на ARM содержит все, что нужно.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

zltigo я бы предпочел киты на AVR желательно семейства Mega. Ну просто я только с этими контроллерами пока работал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я только с этими контроллерами пока работал.

Работать нужно не с теми с которыми работал, а с теми, которые оптимальны. Переключайтесь. Объемы RAM, для буферов, как минимум скоростной SPI а то и SDC для SD и до кучи USB контроллер есть джентельменский набор многих ARM контроллеров ценой от пяти баксов. Вот такая реальность.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

с USB- флешкой это ARM с операционной системой и драйвером нужны.

на мой взгляд эффективнее всего будет контроллер с HI speed USB (для подключения к компу) и UART для получения тех самых данных, а для накопления данных микросхему из той самой флешки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Hi Usb совсем не редкость CY7c68013 например или многие ARM9, а обьем данных

Размер данных до сотни мегабайт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Господа помогите выбрать кит для этого устройства. Требования к киту:

1) Ядро контроллер семейства Mega или XMega;

2) Порт RS232 для принятия информации со станка;

3) возможность подключения SD карты;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ради интереса взгляните на http://starterkit.ru/html/index.php?name=s...p=view&id=5 (и цену).

При этом Вы получаете и RS-232, и SD-карту, и буфер RAM (96k + 32M), и USB-функция/хост (можно на флешку писать), и Ethernet (удаленный сбор логов по сети), и удобство 32-битника!

 

Что такого есть в Mege, чего нет в этом кристале?!

- писать все равно будете на C;

- новую периферию (SD-card) придется осваивать в любом случае.

 

Гораздо проще, эффективнее и интереснее делать логер не на Меге. Если будут сложности с новой архитектурой, то на форуме Вам помогут. Кстати, могу поделиться исходниками логера как раз для LPC2478.

 

Меги хорошие камни, но не для таких задач (хотя сделать можно). Японская мудрость гласит: "всему свое место".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...