已解决 - 使用TinyGo构建并简单部署UF2文件的最佳实践(Golang实现)

已解决 - 使用TinyGo构建并简单部署UF2文件的最佳实践(Golang实现) 我在撰写问题时解决了这个问题——觉得可能对其他人有所帮助……

我可以用TinyGo刷写设备,但我需要一个更“简单”的部署方式——例如,只需复制一个二进制文件。

已在Badger2040上测试并验证可行。 以下是我使用的步骤:

  1. 使用以下命令构建一个uf2二进制格式文件:
    tinygo build -target=badger2040 -o badger2040_button.uf2 button.go
    
  2. 按住用户按钮重置Badger2040
    • Badger会显示为(在我的WIN11系统上)RPI RP2 (D:)
  3. badger2040_button.uf2 复制到D:驱动器

这应该也能在其他设备上工作——但未经测试。


更多关于已解决 - 使用TinyGo构建并简单部署UF2文件的最佳实践(Golang实现)的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于已解决 - 使用TinyGo构建并简单部署UF2文件的最佳实践(Golang实现)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这是一个非常实用的解决方案,直接通过复制UF2文件来部署固件确实比使用刷写工具更便捷。你的方法完全正确,是使用TinyGo为RP2040系列设备(如Badger2040)进行开发的标准部署流程。

UF2(USB Flashing Format)是微软为RP2040等微控制器设计的特殊文件格式,当设备进入USB大容量存储模式时,直接将.uf2文件复制到虚拟驱动器即可完成固件烧录。

以下是一个更完整的示例,展示如何构建一个带有多功能按钮处理的程序:

// main.go - Badger2040按钮控制LED示例
package main

import (
    "machine"
    "time"
)

func main() {
    // 初始化LED(Badger2040上的用户LED)
    led := machine.LED
    led.Configure(machine.PinConfig{Mode: machine.PinOutput})
    
    // 初始化A按钮(Badger2040上的用户按钮)
    button := machine.BUTTON_A
    button.Configure(machine.PinConfig{Mode: machine.PinInputPullup})
    
    // 初始化B按钮(如果有)
    buttonB := machine.BUTTON_B
    buttonB.Configure(machine.PinConfig{Mode: machine.PinInputPullup})
    
    ledState := false
    lastPress := time.Now()
    
    for {
        // 检测A按钮按下
        if !button.Get() {
            ledState = !ledState
            led.Set(ledState)
            time.Sleep(200 * time.Millisecond) // 防抖延迟
        }
        
        // 检测B按钮长按(重置功能)
        if !buttonB.Get() {
            pressDuration := time.Since(lastPress)
            if pressDuration > 3*time.Second {
                // 执行设备重置
                machine.Reset()
            }
        } else {
            lastPress = time.Now()
        }
        
        time.Sleep(50 * time.Millisecond)
    }
}

构建命令:

tinygo build -target=badger2040 -size=short -o firmware.uf2 main.go

参数说明:

  • -target=badger2040:指定目标设备
  • -size=short:显示编译后的内存使用情况
  • -o firmware.uf2:直接输出UF2格式文件

对于需要监控构建过程的场景,可以添加详细输出:

tinygo build -target=badger2040 -v -x -o firmware.uf2 main.go

如果需要为其他RP2040设备构建,只需更改target参数:

# 为Raspberry Pi Pico构建
tinygo build -target=pico -o pico_firmware.uf2 main.go

# 为Adafruit ItsyBitsy RP2040构建
tinygo build -target=itsybitsy-rp2040 -o itsybitsy.uf2 main.go

这种UF2部署方式确实简化了开发流程,特别是在频繁迭代测试时,避免了每次都要运行刷写命令的麻烦。

回到顶部