-
Notifications
You must be signed in to change notification settings - Fork 167
Open
Description
When attempting to create a custom, project-specific board target for the XIAO RP2040 I found that it was very difficult to reuse parts from predefined boards that use the RP2040 chip. More specifically, it required a very roundabout way to setup the bootloader.
build.zig:
const std = @import("std");
const microzig = @import("microzig");
const MicroBuild = microzig.MicroBuild(.{
.rp2xxx = true,
});
pub fn build(b: *std.Build) void {
const mz_dep = b.dependency("microzig", .{});
const mb = MicroBuild.init(b, mz_dep) orelse return;
const pico_board = mb.ports.rp2xxx.boards.raspberrypi.pico.board orelse return;
const target = mb.ports.rp2xxx.chips.rp2040.derive(.{
.board = .{
.name = "XIAO RP2040",
.root_source_file = b.path("boards/xiao_rp2040.zig"),
.imports = pico_board.imports,
},
});
const firmware = mb.add_firmware(.{
.name = "main",
.target = target,
.optimize = .ReleaseSmall,
.root_source_file = b.path("src/main.zig"),
});
mb.install_firmware(firmware, .{});
}boards/xiao_rp2040.zig:
const microzig = @import("microzig");
const hal = microzig.hal;
pub const xosc_freq = 12_000_000;
pub const bootrom = @import("shared/rp2040_bootrom.zig");
comptime {
_ = bootrom;
}
pub const pin_config = hal.pins.GlobalConfiguration{
.GPIO12 = .{ .name = "rgb_led", .direction = .out },
.GPIO17 = .{ .name = "user_led_r", .direction = .out },
.GPIO16 = .{ .name = "user_led_g", .direction = .out },
.GPIO25 = .{ .name = "user_led_b", .direction = .out },
};I find I'm having to reference the generated bootloader for rp2040 boards though other boards (here the rp pico) and copy over the rp2040_bootrom.zig to my project for it to compile, which feels convoluted. Is it possible to streamline this process by, for example, exposing the bootloader generation to the user?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels