Kermit - это приложение для последовательной связи, такое как minicom, и оно имеет собственный язык сценариев, и я использовал его для автоматической загрузки на встроенные устройства.Тем не менее, он довольно ограничен и / или содержит ошибки, поэтому я наконец-то переключился на использование python и pyserial.
Всякий раз, когда вы имеете дело с текстовым режимом, таким как набор команд AT или разговор с оболочкой по последовательной линии, он действительно мощный.
Если мне нужно выполнить двоичную передачу с использованием какого-либо стандартного протокола, я обычно использую инструменты командной строки в неинтерактивном режиме и порождаю их из своего скрипта Python.
Вот некоторая часть инструментовЯ построил: ожидание ввода, отправка данных через xmodem, отправка команды в u-boot и запуск передачи по протоколу kermit.Я использую его для автоматической перепрошивки и тестирования встроенных устройств.
class Parser :
def __init__(self, sport_name):
self.currentMsg = ''
if sport_name :
self.ser = serial.Serial(sport_name, 115200)
def WaitFor(self, s, timeOut=None):
self.ser.timeout = timeOut
self.currentMsg = ''
while self.currentMsg.endswith(s) != True :
# should add a try catch here
c=self.ser.read()
if c != '' :
self.currentMsg += c
sys.stdout.write(c)
else :
print 'timeout waiting for ' + s
return False
return True
def XmodemSend(self,fname):
if not self.WaitFor('C', 1) :
print 'RomBOOT did not launch xmodem transfer'
return
self.ser.flushInput()
self.ser.close()
call(["xmodem","-d",self.ser.port,"-T",fname])
self.ser.open()
def UbootLoad(self, fname):
self.ser.write('loadb 0x20000000\n')
if not self.WaitFor('bps...',1) :
print 'loadb command failed'
sys.exit()
self.ser.flushInput()
self.ser.close()
retcode=call(['kermit','-y','kermit_init','-s',fname])
if retcode != 0 :
print 'error sending' + fname
sys.exit()
self.ser.open()
self.UbootCmd('echo\n')