Существует множество терминальных программ для доступа к последовательной консоли, таких как minicom или screen to Putty. Но Вилли Тарро не очень понравились эти инструменты, поэтому он решил написать свой собственный: Bootterm.
Мне ужасно надоело текущее состояние последовательных терминалов, которые либо плохо справляются с ошибками, либо запускаются долго, из-за чего вы теряете первые символы, либо не поддерживают нестандартные скорости и т. д. Наконец я написал свою собственную программу, чтобы решить все это сразу, плюс поддержка автоматического определения порта (последний зарегистрированный по умолчанию является хорошим), ожидание готовности порта, а также поддержка фиксированных или синхронизированных захватов. А несколько переменных среды позволяют вообще не вводить аргумент, но при этом имеют ожидаемое поведение. Если вас это интересует, вы можете проверить это здесь:
https://github.com/wtarreau/bootterm
Программа еще молодая (нет поддержки автоматического переключения скорости и макросов), но довольно удобная, и я уже перешел на нее.
Так случилось, что у нас есть Комплект BBC Doctor Who “HiFive Inventor” , поэтому мы попробовали его в Ubuntu 20.04:
1 2 3 4 |
git clone https://github.com/wtarreau/bootterm cd bootterm make sudo make install |
Обычно мы проверяем последовательный интерфейс, запустив dmesg сразу после подключения устройства:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[671497.372868] usb 1-1: new full-speed USB device number 69 using xhci_hcd [671497.547016] usb 1-1: New USB device found, idVendor=1366, idProduct=1061, bcdDevice= 1.00 [671497.547022] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [671497.547026] usb 1-1: Product: HiFive [671497.547029] usb 1-1: Manufacturer: SEGGER [671497.547031] usb 1-1: SerialNumber: 000979421764 [671497.578086] cdc_acm 1-1:1.0: ttyACM0: USB ACM device [671497.587098] cdc_acm 1-1:1.2: ttyACM1: USB ACM device [671497.599064] usb-storage 1-1:1.5: USB Mass Storage device detected [671497.599272] scsi host2: usb-storage 1-1:1.5 [671498.631385] scsi 2:0:0:0: Direct-Access SEGGER MSD Volume 1.00 PQ: 0 ANSI: 4 [671498.631728] sd 2:0:0:0: Attached scsi generic sg2 type 0 [671498.632163] sd 2:0:0:0: [sdc] 21829 512-byte logical blocks: (11.2 MB/10.7 MiB) [671498.633051] sd 2:0:0:0: [sdc] Write Protect is off [671498.633054] sd 2:0:0:0: [sdc] Mode Sense: 0b 00 00 08 |
Bootterm позволяет вам перечислить все последовательные устройства, подключенные к вашему хосту:
1 2 3 4 5 |
bt -l port | age (sec) | device | driver | model ------+------------+------------+------------------+---------------------- 0 | 0 | ttyACM0 | cdc_acm | CDC * 1 | 0 | ttyACM1 | cdc_acm | CDC |
Значок * в списке означает, что это последнее подключенное USB-устройство, что в большинстве случаев означает последовательную консоль, к которой вы хотите получить доступ. Он будет выбран по умолчанию, если вы не введете устройство в командной строке. Это означает, что вам не нужно даже проверять использование устройства, просто запустите bt, чтобы подключиться к плате:
1 2 3 4 5 6 7 8 9 |
sudo bt No port specified, using ttyACM1 (last registered). Use -l to list ports. Trying port ttyACM1... Connected to ttyACM1 at 115200 bps. Escape character is 'Ctrl-]'. Use escape followed by '?' for help. at_setupCmdADC[151]: argc 2 eFuse Two Point: NOT supported eFuse Vref: Supported Characterized using eFuse Vref at_setupCmdA |
Круто! Просто работает из коробки! Нет необходимости проверять устройство или скорость передачи данных.
Вероятно, вы захотите проверить вывод загрузчика, как только вы подключите устройство. Если вы используете отладочную плату USB в TTL, это нормально, но если вы используете одну из этих плат со встроенным последовательным интерфейсом, такую как плата HiFive, которую мы используем сейчас, это обычно включает в себя подключение платы к плате USB, узнав имя устройства, подключитесь к последовательному порту, а затем перезагрузите плату. Но с bootterm вы можете просто использовать параметр n, который означает «New»:
1 |
sudo bt -n |
Программа будет ждать нового USB-устройства, а затем автоматически подключится к последовательной консоли. Давайте попробуем это с помощью платы HiFive Inventor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
0 ports found, waiting for a new one... port | age (sec) | device | driver | model ------+------------+------------+------------------+---------------------- 1 | 0 | ttyACM1 | cdc_acm | CDC Trying port ttyACM1... Connected to ttyACM1 at 115200 bps. Escape character is 'Ctrl-]'. Use escape followed by '?' for help. I (14) boot: ESP-IDF v3.3 2nd stage bootloader I (14) boot: compile time 15:55:21 I (14) boot: Enabling RNG early entropy source... D (17) boot: magic e9 D (20) boot: segments 04 D (22) boot: spi_mode 02 D (25) boot: spi_speed 00 D (27) boot: spi_size 02 I (30) boot: SPI Speed : 40MHz I (34) boot: SPI Mode : DIO I (38) boot: SPI Flash Size : 4MB D (42) bootloader_flash: mmu set paddr=00000000 count=1 size=c00 src_addr=8000 src_addr_aligned=0 D (51) boot: mapped partition table 0x8000 at 0x3f408000 D (57) flash_parts: partition table verified, 6 entries I (62) boot: Partition Table: I (66) boot: ## Label Usage Type ST Offset Length D (73) boot: load partition table entry 0x3f408000 D (78) boot: type=1 subtype=1 I (81) boot: 0 phy_init RF data 01 01 0000f000 00001000 D (88) boot: load partition table entry 0x3f408020 D (93) boot: type=1 subtype=0 I (96) boot: 1 otadata OTA data 01 00 00010000 00002000 D (104) boot: load partition table entry 0x3f408040 D (108) boot: type=1 subtype=2 I (112) boot: 2 nvs WiFi data 01 02 00012000 0000e000 D (119) boot: load partition table entry 0x3f408060 D (124) boot: type=40 subtype=0 .... |
Он автоматически подключается к последовательной консоли от модуля ESP32 на нашей плате. Довольно аккуратно. Но есть также последовательная консоль для микроконтроллера SiFive Freedom E310, к которой мы можем получить доступ, указав устройство:
1 2 3 4 5 6 7 8 |
sudo bt /dev/ttyACM0 Trying port /dev/ttyACM0... Connected to /dev/ttyACM0 at 115200 bps. Escape character is 'Ctrl-]'. Use escape followed by '?' for help. Hardware: HiFive Inventor Board Bootloader Version: 2.40 09/10/2020 12:17:19 Mfg. Test Version: 1.81 09/10/2020 12:17:19 Mfg |
Если мы нажмем кнопку сброса и плату, мы можем получить журнал загрузки с RISC-V MCU:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Bootloader version: 2.40 09/10/2020 12:17:19 Sleep BK1 0x00000000 BK15 0xbed0bed0 After BK1 0x00000000 BK15 0xbed0bed0 PMU IE 0x0000000b CAUSE 0x00000101 BK1 0x00000000 BK15 0xbed0bed0 Hardware: HiFive Inventor Board Bootloader Version: 2.40 09/10/2020 12:17:19 Mfg. Test Version: 1.81 09/10/2020 12:17:19 Mfg. Location: SX Board Assembly: HFB05 Board Version: 5 Board Revision: A Serial Number: 001331 Date Code (WW/YY): 32/20 WiFi MAC: 24:6F:28:6C:D0:44 BLE MAC: 24:6F:28:6C:D0:46 Board Status: PASS Checksum: 5581 Hardware - Default BLE serial Boot - Tynker VM Version: 1.4 Boot - Default Name: HiFive Boot - Default Passcode: 0x30303030 Boot - Allocated 49168 bytes of memory **** Tynker VM is ready **** |
Его намного проще использовать по сравнению с minicom, где нам пришлось войти в режим настройки, ввести последовательную плату, выбрать скорость передачи и отключить аппаратное управление потоком перед доступом к последовательной консоли. Не будем забывать, как легко забыть и команду выхода из программы. Но подождите … как нам выйти из bootterm? Нам сообщают о команде каждый раз, когда мы запускаем программу:
1 |
Escape character is 'Ctrl-]'. Use escape followed by '?' for help. |
Так что получить доступ к справке не так уж сложно:
1 2 3 4 5 6 7 8 9 10 |
BootTerm supports several single-character commands after the escape character: H h ? display this help Q q . quit P p show port status D d flip DTR pin R r flip RTS pin F f flip both DTR and RTS pins B b send break C c enable / disable capture Enter the escape character again after this menu to use these commands. |
Будем надеяться, что использование правой квадратной скобки ‘]’ не вызовет проблем с некоторыми раскладками клавиатуры. Но Вилли, должно быть, уже подумал об этой потенциальной проблеме и предоставил способ изменить escape-символ …
Вы можете настроить escape-символ с помощью команды bt -exx с параметрами, перечисленными в таблице справа.
По умолчанию программа будет использовать скорость передачи 115 200 бит/с, но вы можете изменить ее:
1 |
bt -b 74880 |
Bootterm также может использоваться в качестве детектора последовательного порта в сочетании с другими сценариями, поскольку следующая командная строка сообщает о последнем подключенном USB-устройстве без каких-либо посторонних строк:
1 2 |
bt -npq ttyUSB2 |
Программа Bootterm C все еще находится в разработке, и Вилли планирует реализовать автоматическое переключение скорости и макросы. Он предлагает всем попробовать и сообщить о проблемах на Github.
Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.