mirror of
git://projects.qi-hardware.com/ben-wpan.git
synced 2024-11-23 04:23:10 +02:00
0db361d49d
We currently don't provide the DFU Functional Descriptor, which modern versions of dfu-util request to determine the transfer size. Luckily, they don't do this if the transfer size is given on the command line.
158 lines
4.0 KiB
Makefile
158 lines
4.0 KiB
Makefile
#
|
|
# Makefile - Makefile of the ATUSB firmware
|
|
#
|
|
# Written 2010-2011 by Werner Almesberger
|
|
# Copyright 2010-2011 by Werner Almesberger
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
|
|
SHELL = /bin/bash
|
|
|
|
NAME = atusb
|
|
|
|
CFLAGS = -g -mmcu=$(CHIP) -DBOOT_ADDR=$(BOOT_ADDR) \
|
|
-Wall -Wextra -Wshadow -Werror -Wno-unused-parameter \
|
|
-Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes
|
|
|
|
CHIP=atmega32u2
|
|
HOST=jlime
|
|
BOOT_ADDR=0x7000
|
|
|
|
AVR_PREFIX = $(BIN_PATH) avr-
|
|
CC = $(AVR_PREFIX)gcc
|
|
OBJCOPY = $(AVR_PREFIX)objcopy
|
|
#OBJDUMP = $(AVR_PREFIX)objdump
|
|
SIZE = $(AVR_PREFIX)size
|
|
|
|
USB_OBJS = usb.o atu2.o
|
|
OBJS = atusb.o board.o spi.o descr.o ep0.o $(USB_OBJS)
|
|
BOOT_OBJS = boot.o board.o spi.o flash.o dfu.o $(USB_OBJS)
|
|
|
|
vpath %.c usb/
|
|
|
|
CFLAGS += -Iinclude -Iusb
|
|
|
|
# ----- Verbosity control -----------------------------------------------------
|
|
|
|
CC_normal := $(CC)
|
|
BUILD_normal :=
|
|
DEPEND_normal := $(CPP) $(CFLAGS) -MM -MG
|
|
|
|
CC_quiet = @echo " CC " $@ && $(CC_normal)
|
|
BUILD_quiet = @echo " BUILD " $@ && $(BUILD_normal)
|
|
DEPEND_quiet = @$(DEPEND_normal)
|
|
|
|
ifeq ($(V),1)
|
|
CC = $(CC_normal)
|
|
BUILD = $(BUILD_normal)
|
|
DEPEND = $(DEPEND_normal)
|
|
else
|
|
CC = $(CC_quiet)
|
|
BUILD = $(BUILD_quiet)
|
|
DEPEND = $(DEPEND_quiet)
|
|
endif
|
|
|
|
# ----- Rules -----------------------------------------------------------------
|
|
|
|
.PHONY: all clean upload prog dfu version.c
|
|
.PHONY: prog-app prog-read on off reset
|
|
|
|
all: $(NAME).bin boot.hex
|
|
|
|
$(NAME).elf: $(OBJS)
|
|
$(MAKE) version.o
|
|
$(CC) $(CFLAGS) -o $@ $(OBJS) version.o
|
|
|
|
boot.elf: $(BOOT_OBJS)
|
|
$(CC) $(CFLAGS) -o $@ $(BOOT_OBJS) \
|
|
-Wl,--section-start=.text=$(BOOT_ADDR)
|
|
|
|
%.bin: %.elf
|
|
$(BUILD) $(OBJCOPY) -j .text -j .data -O binary $< $@
|
|
@echo "build #`cat .version`, `ls -l $@`"
|
|
|
|
%.hex: %.elf
|
|
$(BUILD) $(OBJCOPY) -j .text -j .data -O ihex $< $@
|
|
$(SIZE) $@
|
|
|
|
# ----- Cleanup ---------------------------------------------------------------
|
|
|
|
clean:
|
|
rm -f $(NAME).bin $(NAME).elf
|
|
rm -f $(OBJS) $(OBJS:.o=.d)
|
|
rm -f boot.hex boot.elf
|
|
rm -f $(BOOT_OBJS) $(BOOT_OBJS:.o=.d)
|
|
rm -f version.c version.d version.o
|
|
|
|
# ----- Build version ---------------------------------------------------------
|
|
|
|
version.c:
|
|
@if [ -f .version ]; then \
|
|
v=`cat .version`; \
|
|
expr $$v + 1 >.version; \
|
|
else \
|
|
echo 0 >.version; \
|
|
fi
|
|
@[ -s .version ] || echo 0 >.version
|
|
@echo '/* MACHINE-GENERATED. DO NOT EDIT ! */' >version.c
|
|
@echo '#include "version.h"' >>version.c
|
|
@echo "const char *build_date = \"`date`\";" >>version.c
|
|
@echo "const uint16_t build_number = `cat .version`;" \
|
|
>>version.c
|
|
|
|
# ----- Dependencies ----------------------------------------------------------
|
|
|
|
%.o: %.c
|
|
$(CC) $(CFLAGS) -Os -c $<
|
|
$(DEPEND) $< | \
|
|
sed -e \
|
|
'/^\(.*:\)\? */{p;s///;s/ *\\\?$$/ /;s/ */:\n/g;H;}' \
|
|
-e '$${g;p;}' -e d >$*.d; \
|
|
[ "$${PIPESTATUS[*]}" = "0 0" ] || { rm -f $*.d; exit 1; }
|
|
|
|
-include $(OBJS:.o=.d)
|
|
|
|
# ----- Programming and device control ----------------------------------------
|
|
|
|
upload: $(NAME).bin boot.hex
|
|
scp $(NAME).bin boot.hex $(HOST):
|
|
|
|
# lfuse: external clock, slow start-up
|
|
# hfuse: 4 kB boot loader, reset into boot loader
|
|
# lock: allow everything but SPM to the boot loader
|
|
# Note: when trying to program 0xef, we get back 0x2f, failing
|
|
# verification. So we just program 0x2f.
|
|
|
|
prog-app:
|
|
ssh $(HOST) avrdude -F -p $(CHIP) -c nanonote_atusb -e \
|
|
-U flash:w:atusb.bin:r \
|
|
-U lfuse:w:0x60:m
|
|
|
|
prog:
|
|
ssh $(HOST) avrdude -F -p $(CHIP) -c nanonote_atusb -e \
|
|
-U flash:w:boot.hex:i \
|
|
-U lfuse:w:0x60:m \
|
|
-U hfuse:w:0xd8:m \
|
|
-U lock:w:0x2f:m
|
|
|
|
prog-read:
|
|
ssh $(HOST) avrdude -F -p $(CHIP) -c nanonote_atusb \
|
|
-U flash:r:mcu.bin:r
|
|
|
|
dfu: $(NAME).bin
|
|
dfu-util -d 20b7:1540 -t 64 -D $(NAME).bin
|
|
|
|
on:
|
|
ssh $(HOST) poke 0x10010318 4
|
|
|
|
off:
|
|
ssh $(HOST) poke 0x10010314 4
|
|
|
|
reset:
|
|
ssh $(HOST) poke 0x10010318 2048
|
|
ssh $(HOST) poke 0x10010314 2048
|