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

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

Задание

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 рублей

Сроки: месяц

 

Изменено пользователем epcmsu

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


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

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

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

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

 

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


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

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

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


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

4 hours ago, epcmsu said:

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

Сроки: месяц

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

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


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

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). Но даже мне не интересно при таких-то условиях...

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


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

9 часов назад, AlexandrY сказал:

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

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

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

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

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


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

4 hours ago, jcxz said:

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

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

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


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

В 10.04.2019 в 23:48, jcxz сказал:

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

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

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

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


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

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 - работать будет, но не через виртуальный ком порт.
ну и по опыту - стабильность работы на разных компьютерах будет отличаться.

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

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


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

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:

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


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

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. Может программисты, которые мне помогали на винде не тянули...

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


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

Quote

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

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

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


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

37 минут назад, Aldec сказал:

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

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

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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