|
Альтернатива USART, Как насчет SWO? |
|
|
|
Jun 15 2016, 12:42
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 17-04-16
Пользователь №: 91 333

|
В настоящее время (впрочем как и многие начинающие) использую для вывода отладочных сообщений USART. Т.е. помимо программатора к плате подключен еще и преобразователь USB-USART - неудобно же. Знаю, что есть такой интерфейс SWD, который поддерживает вывод отладочной информации через вывод SWO. Т.е. имея 1 программатор с интерфейсом SWD такой как ST-link/V2 можно и шить и получать отладочные сообщения. Например при использовании USART на скорости 921600 бод 1 байт можно передать примерно за 11 мкс. Достаточно быстро и погрешность установки скорости 0,16%. Быстрее пробовал, но не пашет почему-то. Использую преобразователь на ft2232. SWO может так же или быстрее? Нигде не найду конкретных значений.
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Jun 15 2016, 13:44
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(NeDoEng @ Jun 15 2016, 15:42)  SWO может так же или быстрее? Нигде не найду конкретных значений. На ST-Link больше пары сотен килобайт с SWO не выжмете. Есть еще более быстрый отладочный вариант - https://habrahabr.ru/post/259205/Но и он не даст более 500 Кбит/с Если применить J-Link Ultra то пару мегабит сделать можно.
|
|
|
|
|
Jun 15 2016, 14:31
|
self made
   
Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795

|
Цитата(zltigo @ Jun 15 2016, 10:08)  Так выкиньте программатор нафиг и загружайте по тому-же отладочному UART. Всего делов загрузчик. программатор в 10 раз быстрее грузит. Зачем делать то, что можно не делать? Загрузчик, софт для него. Имхо ничего удобнее уарта для отладки нет. Большие скорости там не нужны, 115200 более чем достаточно. Капец какое неудобство, надо два разъема подключать! А еще же и питание надо по третьему? Как можно так жить?
|
|
|
|
|
Jun 15 2016, 17:32
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 17-04-16
Пользователь №: 91 333

|
Цитата(AlexandrY @ Jun 15 2016, 16:44)  На ST-Link больше пары сотен килобайт с SWO не выжмете.
Если применить J-Link Ultra то пару мегабит сделать можно. Воот, я об этом и спрашивал. Спасибо за пояснение. Цитата(zltigo @ Jun 15 2016, 17:08)  Так выкиньте программатор нафиг и загружайте по тому-же отладочному UART. Всего делов загрузчик. Да, можно так, но в одно движение из Кейла вряд ли получится загрузить. Цитата(ar__systems @ Jun 15 2016, 17:31)  Имхо ничего удобнее уарта для отладки нет. Большие скорости там не нужны, 115200 более чем достаточно. Капец какое неудобство, надо два разъема подключать! А еще же и питание надо по третьему? Как можно так жить? Во-во и не говорите. Хотя питание от программатора беру
Сообщение отредактировал Herz - Jun 16 2016, 07:56
Причина редактирования: Избыточное цитирование
|
|
|
|
|
Jun 16 2016, 03:26
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(NeDoEng @ Jun 15 2016, 18:42)  SWO может так же или быстрее? Нигде не найду конкретных значений. Лучше так не делать (не убирать отладочный UART). Вылезет потом у Вас проблема, что с подключенным SWD работает, а без - нет, как искать будете? Включения/выключения питания, технологическое тестирование в течение длительного времени (когда какая-то инфа пишется в лог) с десятком устройств - как это всё делать? Испытания на устойчивость к помехам и на помехоэмиссию с контролем работоспосбности, тоже - как? Да и как-то пробовал я выводить отладку через J-Link, имхо: при этом нарушается реалтайм работы устройства, такое ощущение, что вывод через отладочный JTAG подтормаживает работу устройства, по сравнению с обычной работой без лога или с логом в UART. Правда пробовал это не через SWD, а через JTAG. И может что-то не так сделал. Но, имхо, работа с подключенным эмулятором и без оного - бывает несколько разной и нужно иметь возможность отладки и без подключенного эмулятора.
|
|
|
|
|
Jun 16 2016, 07:38
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Цитата(jcxz @ Jun 16 2016, 06:26)  Да и как-то пробовал я выводить отладку через J-Link, имхо: при этом нарушается реалтайм работы устройства, такое ощущение, что вывод через отладочный JTAG подтормаживает работу устройства, по сравнению с обычной работой без лога или с логом в UART. Правда пробовал это не через SWD, а через JTAG. И может что-то не так сделал. Ну ещё бы. Semihosting - это старый механизм. Довольно гибкий, но крайне медленный: - софт в контроллере на каждый putchar() выставляет брекпоинт. - отладчик "ловит" этот брекпоинт, считывает переданный байтик (по определённой комбинации регистров, насколько я помню), отправляет в консоль. Помимо двунаправленной консоли, можно ещё кучу "плюшек" организовать, но, вроде б, это так никто и не поддержал. Подробности есть на arm.com в разделе "ARM Compiler Software Development Guide" -> "Semihosting". Но постоянные остановки ядра на пользу реалтайму не идут, конечно же. SWO - это совсем другая штука. Ядро кладёт байтик в специальный регистр, а дальше "оно само". Но тут канал однонаправленный (впрочем, в 99% случаев отладочный канал такой и нужен). Цитата(jcxz @ Jun 16 2016, 06:26)  Но, имхо, работа с подключенным эмулятором и без оного - бывает несколько разной и нужно иметь возможность отладки и без подключенного эмулятора. Это если только энергосбережение какое-то отлаживать. Но там и внешний уарт мешать будет. А так - SWD и SWO штуки независимые, можно использовать только что-то одно.
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Jun 16 2016, 11:13
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Странно. Куча разработчиков, но только единицы заботит быстродействие отладочного канала. Хотя от этого напрямую зависит производительность программиста встраиваемых систем. Короче так: Скорость вывода по SWO вот в таком цикле : Код #define TESTBUF_SZ 1024 char testbuf[TESTBUF_SZ];
for (i=0;i<1000;i++) { fwrite(testbuf, 1 , TESTBUF_SZ, stdout); } будет: J-Link Ultra+ - 2.7 Мбайт/с J-Link - 480 Кбайт/с ST-Link/V2 - 160 Кбайт/с
|
|
|
|
|
Jun 16 2016, 11:36
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (ar__systems @ Jun 15 2016, 17:31)  программатор в 10 раз быстрее грузит. Зачем делать то, что можно не делать? Загрузчик, софт для него. Это иллюзия, поскольку упираетесь в скорость записи во Flash а не в скорость передачи. Это раз. Загрузчик для серийного изделия по любому делать надо. Это два. Ну и на лишний разъем это Вы жаловались, а не я. QUOTE (NeDoEng @ Jun 15 2016, 20:32)  Да, можно так, но в одно движение из Кейла вряд ли получится загрузить. Получится в одно движение из терминальной программы.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 16 2016, 12:50
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 17-04-16
Пользователь №: 91 333

|
Цитата(AlexandrY @ Jun 16 2016, 14:13)  Странно. Куча разработчиков, но только единицы заботит быстродействие отладочного канала. Хотя от этого напрямую зависит производительность программиста встраиваемых систем. Короче так: Скорость вывода по SWO вот в таком цикле : Код #define TESTBUF_SZ 1024 char testbuf[TESTBUF_SZ];
for (i=0;i<1000;i++) { fwrite(testbuf, 1 , TESTBUF_SZ, stdout); } будет: J-Link Ultra+ - 2.7 Мбайт/с J-Link - 480 Кбайт/с ST-Link/V2 - 160 Кбайт/с Понятно, что не для каждой задачи нужна максимальная скорость обмена. Даже 160 кбайт/с неплохой результат, а значит вывод отладочной информации через ST-Link/V2 тоже имеет право на жизнь. За вывод отладочной информации отвечает модуль ITM. Вот только не пойму -начиная с адреса 0xE0000000 расположены 32 32-х разрядных регистра (Stimulus port). Т.е. в любой из них кладем данные для передачи. И есть в регистре "ITM trace control" 23 бит - Busy. Как я понял - бит сигнализирует о занятости передатчика. Один на всех что ли? Тогда получается все как в UART - буфер передатчика и флаг занятости. В общем, надо как-то это дело попробовать. esaulenka, верно в 99% случаев достаточно одностороннего обмена.
|
|
|
|
|
Jun 16 2016, 13:12
|

Профессионал
    
Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226

|
Цитата(AlexandrY @ Jun 16 2016, 14:13)  Странно. Куча разработчиков, но только единицы заботит быстродействие отладочного канала. Хотя от этого напрямую зависит производительность программиста встраиваемых систем. Короче так: Скорость вывода по SWO вот в таком цикле : Код #define TESTBUF_SZ 1024 char testbuf[TESTBUF_SZ];
for (i=0;i<1000;i++) { fwrite(testbuf, 1 , TESTBUF_SZ, stdout); } будет: J-Link Ultra+ - 2.7 Мбайт/с J-Link - 480 Кбайт/с ST-Link/V2 - 160 Кбайт/с Сравните со скоростью передачи через RTT https://www.segger.com/jlink-rtt.htmlраздел Performance
|
|
|
|
|
Jun 16 2016, 13:27
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 17-04-16
Пользователь №: 91 333

|
Цитата(x893 @ Jun 16 2016, 16:12)  Сравните со скоростью передачи через RTT https://www.segger.com/jlink-rtt.htmlраздел Performance Слыхал про RTT, но как-то не придал значения. Однако... Даже за 60 баксов можно получить колоссальную скорость.
|
|
|
|
|
Jun 16 2016, 14:14
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(x893 @ Jun 16 2016, 16:12)  Сравните со скоростью передачи через RTT Фишка RTT в том что он работает без ожидания готовности на основе буфера произвольного размера. Переполнения при этом фиксируются. Поэтому его можно применять для логирования прерываний, переключения контекста, сервисов RTOS и прочих мелких и разреженных явлений без деградации реалтайма. SWO же требует готовности на каждое слово, поэтому неминуемо замедлит логирование и испортит тайминги хоть и имеет большую пропускную способность чем RTT. Я использую HS USB если нужен действительно быстрый канал для чего-то типа J-Scope.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|