diff --git a/esp.py b/esp.py index c9a1a87..09e9ad8 100644 --- a/esp.py +++ b/esp.py @@ -1,15 +1,23 @@ from contextlib import contextmanager +from time import sleep from typing import Optional, Union class Esp: - def __init__(self, nand: bool = False, xavier: bool = False, device: Optional[str] = None) -> None: + def __init__(self, + nand: bool = False, + xavier: bool = False, + orin: bool = False, + device: Optional[str] = None, + ) -> None: print('Initializing ESP...') - self.en = 436 if xavier else 216 - self.g0 = 428 if xavier else 50 + self.en = 436 if xavier else 492 if orin else 216 + self.g0 = 428 if xavier else 460 if orin else 50 + self.gpio_en = f'gpio{self.en}' if not orin else 'PAC.06' + self.gpio_g0 = f'gpio{self.g0}' if not orin else 'PR.04' if device is None: - self.device = '/dev/ttyTHS' + ('0' if xavier else '1') + self.device = '/dev/ttyTHS' + ('0' if xavier else '0' if orin else '1') else: self.device = device self.on = 1 if nand else 0 @@ -20,7 +28,7 @@ def write(self, path: str, value: Union[str, int]) -> None: print(f'echo {value:3} > /sys/class/gpio/{path}') with open(f'/sys/class/gpio/{path}', 'w') as f: f.write(f'{value}\n') - except: + except Exception: print(f'could not write {value} to {path}') @contextmanager @@ -28,8 +36,8 @@ def pin_config(self) -> None: print('Configuring pins...') self.write('export', self.en) self.write('export', self.g0) - self.write(f'gpio{self.en}/direction', 'out') - self.write(f'gpio{self.g0}/direction', 'out') + self.write(f'{self.gpio_en}/direction', 'out') + self.write(f'{self.gpio_g0}/direction', 'out') yield self.write('unexport', self.en) self.write('unexport', self.g0) @@ -37,14 +45,18 @@ def pin_config(self) -> None: @contextmanager def flash_mode(self): print('Bringing microcontroller into flash mode...') - self.write(f'gpio{self.en}/value', self.on) - self.write(f'gpio{self.g0}/value', self.on) - self.write(f'gpio{self.en}/value', self.off) + self.write(f'{self.gpio_en}/value', self.on) + sleep(0.5) + self.write(f'{self.gpio_g0}/value', self.on) + sleep(0.5) + self.write(f'{self.gpio_en}/value', self.off) yield self.activate() def activate(self) -> None: print('Bringing microcontroller into normal operation mode...') - self.write(f'gpio{self.g0}/value', self.off) - self.write(f'gpio{self.en}/value', self.on) - self.write(f'gpio{self.en}/value', self.off) + self.write(f'{self.gpio_g0}/value', self.off) + sleep(0.5) + self.write(f'{self.gpio_en}/value', self.on) + sleep(0.5) + self.write(f'{self.gpio_en}/value', self.off) diff --git a/flash.py b/flash.py index 3772875..13ded9b 100755 --- a/flash.py +++ b/flash.py @@ -6,9 +6,10 @@ def help() -> None: - print(f'{sys.argv[0]} [nano | xavier] [nand]') + print(f'{sys.argv[0]} [nano | xavier | orin] [nand]') print(f' nano flashing Jetson Nano (default)') print(f' xavier flashing Jetson Xavier') + print(f' orin flashing Jetson Orin') print(f' nand Robot Brain has piggyboard with NAND gate (eg. older version)') print(f' usb use /dev/tty.SLAB_USBtoUART as serial device') print(f' /dev/ use /dev/ as serial device') @@ -24,7 +25,7 @@ def help() -> None: for p in sys.argv: if p.startswith('/dev/'): device = p -esp = Esp(nand='nand' in sys.argv, xavier='xavier' in sys.argv, device=device) +esp = Esp(nand='nand' in sys.argv, xavier='xavier' in sys.argv, orin='orin' in sys.argv, device=device) with esp.pin_config(), esp.flash_mode(): print('Flashing...')