rp2040

RP2040 Programming without SDK
Log | Files | Refs

commit dd49d82ab646572957be1fe7acbf5f59f7a73fec
parent a30b22d7fb523247f4c577ddf427381a903813b4
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Wed, 12 Apr 2023 09:30:32 +0900

rewrite bincrc

Diffstat:
MMakefile | 6++++--
Mtools/bincrc.c | 28++++++++++++----------------
2 files changed, 16 insertions(+), 18 deletions(-)

diff --git a/Makefile b/Makefile @@ -30,11 +30,13 @@ mach.o: mach.s led.elf: boot2.o main.o mach.o memmap.ld $(LD) $(LDFLAGS) -o led.elf -T memmap.ld boot2.o mach.o main.o + led.bin: led.elf $(OBJCOPY) -O binary led.elf led.bin -led.uf2: led.bin bin2uf2 - ./bin2uf2 led.bin led.uf2 +led.uf2: led.bin bincrc bin2uf2 + ./bincrc led.bin led_crc.bin + ./bin2uf2 led_crc.bin led.uf2 flash: led.uf2 mount /dev/disk/by-label/RPI-RP2 /mnt diff --git a/tools/bincrc.c b/tools/bincrc.c @@ -55,15 +55,8 @@ main(int argc, char *argv[]) } isize = read(src, idata, osize); - if (isize > osize - 4) { - fprintf(stderr, "Input file too big.\n"); - exit(1); - } - for (int i = isize; i < osize - 4; i++) idata[i] = 0; - - close(src); if((dst = open(argv[2], O_CREAT | O_WRONLY, 0777)) < 0) { fprintf(stderr, "Could not open %s.\n", argv[2]); @@ -74,17 +67,20 @@ main(int argc, char *argv[]) for (int i = 0; i < 4; i++) idata[osize - 4 + i] = cs >> i * 8; - dprintf(dst, ".cpu cortex-m0plus\n"); - dprintf(dst, ".thumb\n\n"); - dprintf(dst, ".section .boot2, \"ax\"\n\n"); - for (int i = 0; i < osize / 16; i++) { - dprintf(dst, ".byte "); - for (int j = 0; j < 16; j++) { - dprintf(dst, "0x%02x%s", idata[i * 16 + j], - j == 15 ? "\n" : ", "); - } + if ((isize = write(dst, idata, osize)) != osize) { + fprintf(stderr, "Write error.\n"); + exit(1); } + while ((isize = read(src, idata, osize)) > 0) + write(dst, idata, isize); + + if (isize < 0) { + fprintf(stderr, "IO error.\n"); + exit(1); + } + + close(src); close(dst); return 0; }