summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkshay Srivatsan <srivatsan@cs.stanford.edu>2023-03-19 18:15:02 -0700
committerAkshay Srivatsan <srivatsan@cs.stanford.edu>2023-03-19 18:15:02 -0700
commit3952b69cf91fd14d74d5d9882cfed5c4f1542d4e (patch)
tree944f749876b4ded5520aad60a52c3cc7e3b1eae9
parent868b71680667f55144bd4f85edbfb0b4373a4eb3 (diff)
Make flashing tool command-line arguments more suitable for payloads
-rw-r--r--ox-flash/ox-flash.go59
1 files changed, 39 insertions, 20 deletions
diff --git a/ox-flash/ox-flash.go b/ox-flash/ox-flash.go
index 331c979..3dc9789 100644
--- a/ox-flash/ox-flash.go
+++ b/ox-flash/ox-flash.go
@@ -28,9 +28,12 @@ func exists(f string) bool {
var baud = flag.Uint("baud", 2000000, "baud rate")
var file = flag.String("port", "", "serial port")
-var keep_open = flag.Bool("keep-open", false, "keep the serial port open after flashing")
-var payload = flag.Bool("payload", false, "flash a payload (not firmware)")
-var addr = flag.Uint("addr", 0, "the address to flash to (0x0 for firmware, 0x10000 for a payload)")
+var run = flag.Bool("run", false, "exit the bootrom and run the program from flash")
+var echo = flag.Bool("echo", false, "echo bytes received from the serial port after flashing")
+var echo_baud = flag.Uint("echo-baud", 115200, "baud rate for echoing")
+var bootloader = flag.Bool("bootloader", false, "flash a bootloader")
+var payload = flag.Bool("payload", false, "flash a payload")
+var addr = flag.Uint("addr", 0, "the address to flash to (default: 0x0 for firmware, 0x10000 for a payload)")
var autodetect = []string{
"/dev/ttyACM0",
@@ -53,8 +56,12 @@ func main() {
}
}
- if *keep_open && *payload {
- log.Fatal("the --keep-open and --payload")
+ if !*bootloader && !*payload {
+ log.Fatal("must specify one of --bootloader or --payload")
+ }
+
+ if *echo && !*run {
+ log.Fatal("the --echo option requires the --run option")
}
filetype := "firmware"
@@ -92,17 +99,14 @@ func main() {
log.Fatalf("uart open: %v", err)
}
- fmt.Printf("Connected to %s, baud: %d\n", options.PortName, options.BaudRate)
- if *keep_open {
- fmt.Println("Keeping connection open after flashing.")
- }
+ log.Printf("Connected to %s, baud: %d\n", options.PortName, options.BaudRate)
jedec, err := handshake(port, options.BaudRate)
if err != nil {
log.Fatal(err)
}
- fmt.Printf("Have %s file: %s\n", filetype, fw)
+ log.Printf("Have %s file: %s\n", filetype, fw)
fw_data, err := os.ReadFile(fw)
if err != nil {
log.Fatal(err)
@@ -120,33 +124,48 @@ func main() {
log.Fatal(err)
}
- fmt.Println("Writing bootrom-compatible header at 0x0000")
+ log.Println("Writing bootrom-compatible header at 0x0000")
err = flash(port, 0, bh.Bytes())
if err != nil {
log.Fatal(err)
}
- fmt.Printf("Writing firmware at 0x%x\n", *addr)
+ log.Printf("Writing firmware at 0x%x\n", *addr)
err = flash(port, uint32(*addr)+0x2000, fw_data)
if err != nil {
log.Fatal(err)
}
-
- err = boot(port)
- if err != nil {
- log.Fatal(err)
- }
} else {
- fmt.Printf("Writing payload at 0x%x\n", *addr)
+ log.Printf("Writing payload at 0x%x\n", *addr)
err = flash(port, uint32(*addr)+0x2000, fw_data)
if err != nil {
log.Fatal(err)
}
}
- fmt.Println("Done flashing!")
+ log.Println("Done flashing!")
- if *keep_open {
+ if *run {
+ log.Println("Running binary from flash.")
+ err = boot(port)
+ if err != nil {
+ log.Fatal(err)
+ }
+ }
+
+ if *echo {
+ if *echo_baud != *baud {
+ log.Printf("Switching from %d baud to %d baud.\n", *baud, *echo_baud)
+ options.BaudRate = *echo_baud
+ err := port.Close()
+ if err != nil {
+ log.Fatal(err)
+ }
+ port, err = serial.Open(options)
+ if err != nil {
+ log.Fatal(err)
+ }
+ }
fmt.Println("Echoing from board...")
fmt.Println("---------------------")
carriage_return := false
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback