Bootterm — удобная для разработчиков программа последовательного терминала


Существует множество терминальных программ для доступа к последовательной консоли, таких как minicom или screen to Putty. Но Вилли Тарро не очень понравились эти инструменты, поэтому он решил написать свой собственный: Bootterm.

Мне ужасно надоело текущее состояние последовательных терминалов, которые либо плохо справляются с ошибками, либо запускаются долго, из-за чего вы теряете первые символы, либо не поддерживают нестандартные скорости и т. д. Наконец я написал свою собственную программу, чтобы решить все это сразу, плюс поддержка автоматического определения порта (последний зарегистрированный по умолчанию является хорошим), ожидание готовности порта, а также поддержка фиксированных или синхронизированных захватов. А несколько переменных среды позволяют вообще не вводить аргумент, но при этом имеют ожидаемое поведение. Если вас это интересует, вы можете проверить это здесь:

https://github.com/wtarreau/bootterm

Программа еще молодая (нет поддержки автоматического переключения скорости и макросов), но довольно удобная, и я уже перешел на нее.

Так случилось, что у нас есть Комплект BBC Doctor Who “HiFive Inventor” , поэтому мы попробовали его в Ubuntu 20.04:

git clone https://github.com/wtarreau/bootterm
cd bootterm
make
sudo make install

Обычно мы проверяем последовательный интерфейс, запустив dmesg сразу после подключения устройства:

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

 bt -l
 port |  age (sec) | device     | driver           | model                
------+------------+------------+------------------+----------------------
    0 |          0 | ttyACM0    | cdc_acm          | CDC              
 *  1 |          0 | ttyACM1    | cdc_acm          | CDC

Значок * в списке означает, что это последнее подключенное USB-устройство, что в большинстве случаев означает последовательную консоль, к которой вы хотите получить доступ. Он будет выбран по умолчанию, если вы не введете устройство в командной строке. Это означает, что вам не нужно даже проверять использование устройства, просто запустите bt, чтобы подключиться к плате:

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»:

sudo bt -n

Программа будет ждать нового USB-устройства, а затем автоматически подключится к последовательной консоли. Давайте попробуем это с помощью платы HiFive Inventor.

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, к которой мы можем получить доступ, указав устройство:

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:

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? Нам сообщают о команде каждый раз, когда мы запускаем программу:

Escape character is 'Ctrl-]'. Use escape followed by '?' for help.

Так что получить доступ к справке не так уж сложно:

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 бит/с, но вы можете изменить ее:

bt -b 74880

Bootterm также может использоваться в качестве детектора последовательного порта в сочетании с другими сценариями, поскольку следующая командная строка сообщает о последнем подключенном USB-устройстве без каких-либо посторонних строк:

bt -npq
ttyUSB2

Программа Bootterm C все еще находится в разработке, и Вилли планирует реализовать автоматическое переключение скорости и макросы. Он предлагает всем попробовать и сообщить о проблемах на Github.

Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.

Оригинал статьи вы можете прочитать здесь.

0 0 vote
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Inline Feedbacks
View all comments