Skip to content

Commit ed06362

Browse files
committed
Added Arduino Nano RP2040 Connect support
1 parent 85e84e2 commit ed06362

File tree

4 files changed

+54
-0
lines changed

4 files changed

+54
-0
lines changed
1.24 MB
Binary file not shown.

Diff for: modules/nina/main.go

+3
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030

3131
"github.com/arduino/FirmwareUpdater/programmers/avrdude"
3232
"github.com/arduino/FirmwareUpdater/programmers/bossac"
33+
"github.com/arduino/FirmwareUpdater/programmers/rp2040load"
3334
"github.com/arduino/FirmwareUpdater/utils/context"
3435
)
3536

@@ -44,6 +45,8 @@ func Run(ctx *context.Context) {
4445
programmer = &bossac.Bossac{}
4546
} else if strings.Contains(filepath.Base(ctx.ProgrammerPath), "avrdude") {
4647
programmer = avrdude.NewAvrdude(ctx)
48+
} else if strings.Contains(filepath.Base(ctx.ProgrammerPath), "rp2040load") {
49+
programmer = rp2040load.NewRP2040Load(ctx)
4750
} else {
4851
log.Fatal("Programmer path not specified correctly, programmer path set to: " + ctx.ProgrammerPath)
4952
}

Diff for: programmers/rp2040load/rp2040load.go

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package rp2040load
2+
3+
import (
4+
"log"
5+
"os"
6+
7+
"github.com/arduino/FirmwareUpdater/utils/context"
8+
"github.com/arduino/arduino-cli/arduino/serialutils"
9+
"github.com/arduino/arduino-cli/executils"
10+
"github.com/arduino/go-paths-helper"
11+
)
12+
13+
type RP2040Load struct {
14+
rp2040LoadPath *paths.Path
15+
portName string
16+
}
17+
18+
func NewRP2040Load(ctx *context.Context) *RP2040Load {
19+
return &RP2040Load{
20+
rp2040LoadPath: paths.New(ctx.ProgrammerPath),
21+
portName: ctx.PortName,
22+
}
23+
}
24+
25+
func (b *RP2040Load) Flash(filename string) error {
26+
log.Println("Entering board into bootloader mode")
27+
port, err := serialutils.Reset(b.portName, true)
28+
if err != nil {
29+
return err
30+
}
31+
32+
log.Println("Flashing " + filename)
33+
if err := b.invoke("-v", "-D", filename); err != nil {
34+
log.Fatalf("Error flashing %s: %s", filename, err)
35+
}
36+
37+
b.portName, err = serialutils.WaitForNewSerialPortOrDefaultTo(port)
38+
log.Println("Board is back online " + b.portName)
39+
return err
40+
}
41+
42+
func (b *RP2040Load) invoke(args ...string) error {
43+
cmd, err := executils.NewProcessFromPath(b.rp2040LoadPath, args...)
44+
if err != nil {
45+
return err
46+
}
47+
cmd.RedirectStdoutTo(os.Stdout)
48+
cmd.RedirectStderrTo(os.Stderr)
49+
return cmd.Run()
50+
}

Diff for: utils/utils.go

+1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ func GetCompatibleWith(name string, rootPath string) map[string][]firmware {
4545
knownBoards["mkrvidor4000"] = combo{match: "(NINA)", loader: "NINA/Firmware.*mkrvidor.*", avoid: "uno"}
4646
knownBoards["uno2018"] = combo{match: "(NINA)", loader: "NINA/Firmware.*unowifi.*", prefer: "uno", avoid: "mkr"}
4747
knownBoards["mkrnb1500"] = combo{match: "SARA", loader: "SARA/SerialSARAPassthrough*"}
48+
knownBoards["nanorp2040connect"] = combo{match: "(NINA).*(Nano_RP2040_Connect)", loader: "NINA/Firmware.*nanorp2040connect.*"}
4849

4950
listAll := false
5051

0 commit comments

Comments
 (0)