Jump to content

    

Поиск фрилансера

Задание

NXP LPC4370: написать драйвера USB HS, высокоскоростного АЦП, а также демонстрационную прошивку

 

Оборудование:


2 платы LPC-Link2 с контроллером NXP LPC4370:
https://www.embeddedartists.com/products/lpc-link2/
https://www.nxp.com/support/developer-resources/software-development-tools/lpc-developer-resources-/lpc-microcontroller-utilities/lpc-link2:OM13054
Одна плата используется в качестве целевого микроконтроллера. Другая плата используется в качестве программатора. Также программировать можно через Segger J-Link на усмотрение разработчика.
Работы не подразумевают сложных работ типа написания USB стэка или программирования на специальных регистрах. Подразумевается обертывание готовых примеров от производителя в модули с требуемыми характеристиками.

Требуется разработать:

  • Драйвера USB HS (High Speed)
  • Драйвера высокоскоростного АЦП
  • Прошивку, использующую разработанные драйвера, для сбора данных с 4 каналов АЦП и передачи результатов измерений на ПК и отправки управляющих команд по параллельной шине.

Общие требования:

  • Язык программирования – C.
  • Среда разработки: любая доступная по российским меркам среда разработки.
  • Каждый драйвер должен быть оформлен в виде независимого программного модуля с интерфейсом, по приложенному заголовочному файлу. Заголовочные файлы можно менять по согласованию с заказчиком.
  • Должна быть возможность использовать каждый из модулей в изолированном проекте независимо от других модулей.
  • При совместном использовании всех разработанных модулей не должно возникать конфликтов. При совместном использовании все модули должны соответствовать тем же требованиям, то и при изолированном использовании.

Требования к драйверу USB HS:

  • Поддержка класса USB CDC
  • Возможность подключения с ПК под управлением ОС Windows 7 и/или Linux Ubuntu 16.04+ (по договорённости) путём обращения к виртуальному COM-порту.
  • Скорость передачи данных минимум 100 Мбит/с в обоих направлениях (не обязательно одновременно).
  • Буфер на отправку и на приём данных размером не менее 64 кБайт.
  • Наличие функции, позволяющей зарегистрировать обработчик на события получения данных с ПК.
  • Новые данные, не умещающиеся в буфер приёма отбрасываются или перезаписывают наиболее старые данные по договорённости. Данные на отправку, превышающие возможности буфера отправки, не принимаются к отправке.

Требования к драйверу АЦП:

  • Одновременное измерение 4 каналов с частотой дискретизации не менее 10*10^6 измерений в секунду на каждый канал.
  • Сохранение результатов измерений в циклический буфер, указанный пользователем.
  • Возможность регистрации обработчика событий начала заполнения первой половины буфера или начала заполнения второй половины буфера.

Требования к прошивке:

  • Инициализация и взаимодействие с периферийными блоками должно использоваться только с использованием разработанных драйверов. Прямого взаимодействия прошивки с периферией без использования драйверов быть не должно.
  • Прошивка должна приводить измеренные с частотой дискретизации АЦП значения к частоте 1 МГц с использованием аппаратного или программного сглаживания методом скользящего среднего и экспоненциального усреднения.

Перечень материалов для сдачи:

  • Исходный код проекта для выбранной среды разработки.
  • Набор файлов исходного кода и заголовочных файлов без конфигурационных файлов проекта (для интеграции в другие среды).
  • Набор библиотек, драйверов и других зависимостей, используемых в проекте.
  • Руководство по установке среды разработки, подключению библиотек и настройке проекта (нужно описать процесс создания и настройки проекта «с нуля», будет проверяться на чистом наборе файлов).
  • Документация на драйвера, если требуется указать какие-то требования и ограничения на последовательность инициализации.

Работа будет проверяться путём проведения последовательных тестов:

  1. Собирается демонстрационная прошивка с модулями на чистой системе по предоставленному руководству. Прошивка должна скомпилироваться, слинковаться, залиться и запуститься, что проверяется в режиме отладки.
  2. Плата подключается к компьютеру по интерфейсу USB. Плата должна обнаружиться операционной системой и должен быть создан COM порт(TTY устройство для Linux).
  3. Плата подсоединяется к источникам сигнала (до 3 независимых сигналов в диапазоне напряжений 100-900 мВ), подключаемых одновременно к осциллографу. На компьютере запускается программа, сохраняющая все полученные данные в файл. Данные должны идти в бинарном формате: U1_t1, U2_t1, U3_t1, U4_t1, U1_t2, U2_t2, и так далее, где UX-tY это измерение длиной 16 бит с канала X в момент времени Y. Дискретизация по времени 1 МГц. 4 канал настраивается на невыведенный контакт в корпусе BGA100, но выведенный в корпусе BGA256 для LPC4370. В итоге проверяется, что объем данных соответствует 8 МБ в секунду. Проверяется, что эти таблицы, будучи сконвертированы в графики, соответствуют подаваемым сигналам, кроме сигнала с 4 канала, который не подключен. На графиках амплитуда сигналов пересчитанная в мВ соответствует поданным сигналам, наблюдаемым на осциллографе. На графиках нет разрывов, если нет разрывов на подаваемом сигнале. Проверяется, что замена считанного числа в одном из аналоговых каналов на программно генерируемое число не приводит к нарушению последовательности этих чисел на компьютере.
  4. Проверяется, что принимаемый поток данных можно запустить и остановить с компьютера посылкой команды "start" или "stop" в COM порт. Исполнение команды идёт по последнему вводимому символу. Проверяется, что другие вводимые символы не влияют на работу прошивки.
  5. Проверяется, что при посылке потока нулей ('\0') в COM порт, где на каждые 500000 - 2000000 нулей приходится одна единица, контроллер реагирует изменением состояния (например изменяет состояние светодиода). Нули посылаются со скоростью до 100 Мбит в секунду. Прошивка, а не драйвер, должна обеспечивать этот функционал.
  6. Далее за неделю заказчик проверяет, что работа функций драйверов соответствует их заголовочному файлу. Если найдены несоответствия, то заказчик составляет список таких несоответствий и исполнитель устраняет их, не внося новые. Ошибки, существовавшие в первой версии, но не указанные в списке, устранять не нужно. Новые внесенные ошибки устранять нужно.

 

Оплата: 40 000 рублей

Сроки: месяц

 

Edited by epcmsu

Share this post


Link to post
Share on other sites

почта для связи и откликов: epcmsu.manager@gmail.com

Share this post


Link to post
Share on other sites
2 hours ago, epcmsu said:
  • Поддержка класса USB CDC
  • Возможность подключения с ПК под управлением ОС Windows 7 и/или Linux Ubuntu 16.04+ (по договорённости) путём обращения к виртуальному COM-порту.
  • Скорость передачи данных минимум 100 Мбит/с в обоих направлениях (не обязательно одновременно).

Думаю что сначала вам нужно доказать в принципе возможность передавать данные по VCOM на скорости 100 Mbit из микроконтроллера Cortex-M4 200 МГц.  

По моим данным это невозможно - 

 

Share this post


Link to post
Share on other sites

Когда-то очень давно я пробовал работать с LPC4370, тоже взял тогда LPC-Link2. Хотел попробовать 80Msps 12-бит АЦП. Прокачать на нём 100Mb/s через виртуальный COM порт почти не реально. Можно через MII/RMII, у LPC4370 есть MAC контроллер.

Share this post


Link to post
Share on other sites
4 hours ago, epcmsu said:

Оплата: 40 000 рублей

Сроки: месяц

Ваши сроки и стоимость сильно не соответствуют тому, что нужно сделать. Денег нужно, как минимум, в три раза больше, а срок - увеличть раза в полтора.

Share this post


Link to post
Share on other sites
10 часов назад, epcmsu сказал:

Задание

Работы не подразумевают сложных работ типа написания USB стэка или программирования на специальных регистрах. Подразумевается обертывание готовых примеров от производителя в модули с требуемыми характеристиками.

Готовые примеры с указанием: что и куда надо вставить и где обернуть - предоставляете Вы?

Когда вижу фразы подобные этой, сразу возникает закономерный вопрос: "А почему Вы сами не сделаете этого"? 

Цитата

Должна быть возможность использовать каждый из модулей в изолированном проекте независимо от других модулей.

Данный пункт вообще не понятен.... Изолированно от чего? От настройки периферии? Это не возможно по определению. Или Вы никогда не работали с микроконтроллерами. Понятия из больших ОС тут не применимы.

Цитата
  • Поддержка класса USB CDC
  • Возможность подключения с ПК под управлением ОС Windows 7 и/или Linux Ubuntu 16.04+ (по договорённости) путём обращения к виртуальному COM-порту.
  • Скорость передачи данных минимум 100 Мбит/с в обоих направлениях (не обязательно одновременно).

Вы это серьёзно??? 100 Мбит/с через CDC? Как-то не верится...... Вы добивались этого реально?

Цитата
  • Наличие функции, позволяющей зарегистрировать обработчик на события получения данных с ПК.

А если окажется что Вы (или ваши разработчики) не сможете реализовать этот самый обработчик настолько оптимально, чтобы не завалить работу всего остального стека на 100 Мб/с? Кто будет крайний? И кто будет это определять (крайнего)?

Цитата
  • Новые данные, не умещающиеся в буфер приёма отбрасываются или перезаписывают наиболее старые данные по договорённости. Данные на отправку, превышающие возможности буфера отправки, не принимаются к отправке.

Тогда как вообще можно определить, что хоть что-то там реально принимается правильно? Ведь всегда можно будет сказать: "Так оно перезаписалось из-за того, что "возможности были превышены". Всё в соответствии с ТЗ".

Цитата

Требования к прошивке:

  • Инициализация и взаимодействие с периферийными блоками должно использоваться только с использованием разработанных драйверов. Прямого взаимодействия прошивки с периферией без использования драйверов быть не должно.

Извините - а кто общую периферию инитить должен? И как именно? всякие там: PLL, GPIO, мультиплексоры ног, тактовые генераторы, коих в LPC4370 немало, и которые тактируют сразу разные периферийные блоки? Как Вы это себе представляете? Скажем - если желаемый драйвер проинитит источники тактирования как ему нравится, а другие драйверы вашего ПО - переинитят их по своему желанию?

Или в вашей прошивке больше никакая периферия не будет использоваться?

Цитата
  • Плата подсоединяется к источникам сигнала (до 3 независимых сигналов в диапазоне напряжений 100-900 мВ), подключаемых одновременно к осциллографу. На компьютере запускается программа, сохраняющая все полученные данные в файл.

Какая программа? Кто её будет писать? А если возьмёте готовую, то где гарантия, что она не будет терять данные?? Да даже если сами вы её напишете, то где гарантия, и как будет выявляться кто именно виновен в потерях: ПО на стороне ПК или прошивка?

Я так подозреваю что виновен будет тот, кого вы здесь ищете. По умолчанию....

Цитата
  • Оплата: 40 000 рублей

Сроки: месяц

Вы это серьёзно???  :unknw:

 

PS: Я имею и эти платы (2 шт.) и ПО для них писал по работе с АЦП на 80MS/s и передачей по USB (только не HS и, естественно, не CDC). Но даже мне не интересно при таких-то условиях...

Share this post


Link to post
Share on other sites
9 часов назад, AlexandrY сказал:

Думаю что сначала вам нужно доказать в принципе возможность передавать данные по VCOM на скорости 100 Mbit из микроконтроллера Cortex-M4 200 МГц.  

По моим данным это невозможно - 

Тоже думаю что это так. Я даже сомневаюсь что вообще этот МК сможет успевать передавать что-то по USB с той же скоростью, при одновременной работе ADC на 40MS/s. Даже при работе через чистые конечные точки, а о CDC вообще речи нет. Когда у меня читался поток данных с АЦП через DMA на 80MS/s при оптимальном режиме с упаковкой по два слова в одно 32-битное, то работа всего остального M4-ядра заметно подтормаживалась. Очень даже заметно. А если ещё такой-же поток запустить через USB - есть большие сомнения, что такое вообще будет работать.

А если ещё учесть, что некий "обработчик" вызываемый из USB-стека будет писать кто-то, кто сам не способен реализовать оптимальную и быструю работу всего этого хозяйства самостоятельно, то эти сомнения превращаются в уверенность.

Share this post


Link to post
Share on other sites
4 hours ago, jcxz said:

Тоже думаю что это так.

У меня выше 2.2 МБит/сек не вышло. МК LPC4337, USB CDC.

Share this post


Link to post
Share on other sites
В 10.04.2019 в 23:48, jcxz сказал:

Тоже думаю что это так

Думаю, ТС уже узнал все что хотел. Бесплатно.

Впрочем, именно в этом ведь и есть смысл форума - помогать людям ?)))

Share this post


Link to post
Share on other sites
On 4/10/2019 at 12:41 PM, epcmsu said:
  • Возможность подключения с ПК под управлением ОС Windows 7 и/или Linux Ubuntu 16.04+ (по договорённости) путём обращения к виртуальному COM-порту.
  • Скорость передачи данных минимум 100 Мбит/с в обоих направлениях (не обязательно одновременно).

IMHO- недостижимо. Именно по причине ограничений порта заточенного под 115К 
был опыт работы на 5Мбит/с - но в зависимости от железа на стороне PC (window) зачастую выше 2M просто не работало.
предельные эксперименты через VCOM - если не ошибаюсь 11Мбит/с

тут однозначно надо переходить на Ethernet. И что важно, существенно упростится работа программиста на PC

Можно, конечно сделать и на USB 2,0 - работать будет, но не через виртуальный ком порт.
ну и по опыту - стабильность работы на разных компьютерах будет отличаться.

топик стартер молодец - очень все подробно расписал. Респект.
А то, что задача не очень оптимально поставлена - так на то и форум.
 

Share this post


Link to post
Share on other sites
2 hours ago, bgc said:

IMHO- недостижимо. Именно по причине ограничений порта заточенного под 115К 
был опыт работы на 5Мбит/с - но в зависимости от железа на стороне PC (window) зачастую выше 2M просто не работало.
предельные эксперименты через VCOM - если не ошибаюсь 11Мбит/с

Дело не в VCOM. Сам по себе VCOM даст 500 мбит/c не напрягаясь. 
Микроконторллер нужен пошустрей. 
Например RZ/T1 (Cortex-R4 600 МГц) от Renesas спокойно бы сделал 100 Mbit по VCOM.

А вот на стандартном 100Base-T Ethernet-е ну никак не получить 100 Mbit, нужен гигабитный Ethernet, а это уже вам не Cortex-M4 :biggrin:

Share this post


Link to post
Share on other sites
2 hours ago, AlexandrY said:

Дело не в VCOM. Сам по себе VCOM даст 500 мбит/c не напрягаясь. 
Микроконторллер нужен пошустрей. 
Например RZ/T1 (Cortex-R4 600 МГц) от Renesas спокойно бы сделал 100 Mbit по VCOM.

А вот на стандартном 100Base-T Ethernet-е ну никак не получить 100 Mbit, нужен гигабитный Ethernet, а это уже вам не Cortex-M4 :biggrin:

возможно. Я говорю про опыт хождения по граблям со стороны PC. Может программисты, которые мне помогали на винде не тянули...

Share this post


Link to post
Share on other sites
Quote

Язык программирования – C.

Если нужно вытянуть из контроллера 200% то тогда АСМ, SSE

Share this post


Link to post
Share on other sites
37 минут назад, Aldec сказал:

Если нужно вытянуть из контроллера 200% то тогда АСМ, SSE

Думаю заблуждаетесь, тут вам не PIC контроллеры, где это может быть из-за кривоты тех "C" для оч огранниченных ресурсов. TC похоже не оч разбирается в ARM процах, задание как бы из далеких прошлых для логики, автоматики. 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now