With warnings treated as errors I get this:
In file included from flash.c:19:0:
usb/dfu.h:107:35: error: 'struct setup_request' declared inside parameter list
usb/dfu.h:107:35: error: its scope is only this definition or declaration, which
is probably not what you want
make: *** [flash.o] Error 1
Struct setup_request is declared in usb.h so include it.
Signed-off-by: Stefan Schmidt <stefan@datenfreihafen.org>
This saves about 2 mA, leaving about 8 mA when idle. The transceiver
should consume 0.5 mA in TRX_OFF, CLKM up to 4 mA, and the idle MCU
core 1 mA. USB current is unknown.
- boot.c (MS_TO_LOOPS): increased loop count now that we no longer
have to poll
- boot.c (main): increased delay from 2.0 s to 2.5 s, because we were
racing with a sleep(2) in dfu-util
- usb/usb.h (usb_ep_change), usb/atu2.c (usb_ep_change): new function
called by the USB stack to notify the hardware-specific driver of
an endpoint state change (EP_TX or EP_RX)
- usb/usb.c (usb_io): call usb_ep_change
- usb/atu2.c (handle_ep): mask TXINI if we have nothing to send
Note: this change surprisingly _increases_ the DFU wait in the boot
loader. Not yet sure why.
- boot.c (main): move the interrupt vectors to the boot loader
section
- atusb.c (main): move the interrupt vectors to the application
section
- boot.c (main): enable global interrupts while looping (disable
them before jumping to the application)
- board_app.c (__timer_read, timer_read): removed wrapped since
we're now always called with interrupts disabled
- usb/atu2.c (ep_init): enable endpoint interrupts
- usb/atu2.c (usb_init): enable device interrupts
- usb/atu2.c (usb_poll, USB_GEN_vect, USB_COM_vect): moved poll
loop code into separate handlers for device and endpoint
interrupts
- boot.c (main), atusb.c (main): removed call to usb_poll
The old code could accidently acknowledge interrupts that appeared
between the read and the write in UxINTx &= mask.
- atu2.c (handle_ep): writing to UEINTX implies a race-free "and"
- atu2.c (usb_poll): writing to UDINT implies a race-free "and"
- board.c (board_init), board_app.h (timer_init), board_app.c
(timer_init): moved timer initialization from board_init to
new function timer_init
- atusb.c (main): call timer_init
This allows us to do other things as well, e.g., change state.
- ep0.c (ep0_init), usb/dfu.c (dfu_init): use user_setup
- usb/atu2.c (usb_poll): no need to reset user_setup - the user's
reset function can do that
- usb/usb.h (user_setups), usb/usb.c (handle_setup): removed
user_setups
- usb/usb.h (user_set_interface), usb/usb.c (user_set_interface,
handle_setup): callback for SET_INTERFACE
The measured values are:
board idle, looping 9 mA
LED on + 5 mA
TX CW (+3 dBm) +14 mA
------
28 mA
======
Adding a margin of 12 mA, we get 40 mA. DFU used 30 mA so far, the
application 50 mA.
- board.h (BOARD_MAX_mA): define maximum USB bus current
- descr.c (config_descriptor), usb/dfu.c (config_descriptor):
use BOARD_MAX_mA for bMaxPower instead of hard-coding values
- ep0.c (ep0_init), usb/dfu.c (dfu_init): set user_setups[0] instead
of user_setup
- usb/atu2.c (usb_poll): reset user_setup on bus reset
- usb/usb.h (user_setups), usb/usb.c (user_setups): array of
interface-specific setup functions
- usb/usb.c (handle_setup): in SET_INTERFACE, select setup function
from user_setups according to interface
- usb/usb.c (handle_setup): if user_setup is not set (e.g., the
optional SET_INTERFACE was never issued), fall back to user_setups[0]
- spi.h (spi_off), spi.c: disable the UART
- spi.c (spi_initialized, spi_begin, spi_init): initialize the UART
if necessary
- board_app.c (gpio): call spi_off to disable the UART instead of
open-coding the operation
- board_app.c (gpio): don't explicitly re-enable the UART but defer it
to the next communication
The SMT fab was looking there for the positions (alas, in vain).
Seems as good a place as any.
- atusb.brd: bumped file version to 20110607 (didn't change the version
printed on the layout since the layout itself didn't change)
- atusb.brd: changed fiducials from "virtual" to "normal+insert", to
include them in the position report
- atusb.brd: renamed the fiducials to give them unique names
- Makefile: bumped fab files version to 20110607
reset_rf now resets all GPIOs to their default state. This way, we
can easily recover from an incomplete or incorrect use of ATUSB_GPIO.
- atusb.c (main), board.c (reset_rf): moved call to spi_init into
reset_rf
- board.c (reset_rf, board_init): moved GPIO setup to reset_rf
- board.c (reset_rf): set GPIOs to reset defaults
- board.h (gpio), board.c: read/modify/write all settings of GPIO
ports
- include/atusb/ep0.h (enum atspi_requests): added new request
ATUSB_GPIO
- ep0.c (my_setup): ATUSB_GPIO reads/reconfigures a GPIO port
- ep0.c (my_setup): ATUSB_SRAM_READ is FROM_DEV, not TO_DEV
- ep0.c (my_setup): in ATUSB_SRAM_READ, write setup->wLength bytes,
not "size" (which is uninitialized)
- atusb.c (main): poll the 16 bit timer for overflows
- board.h (timer_poll, timer_read), (board.c (timer_h, timer_poll,
timer_read, board_init): added support for a free-running 48 bit timer
(16 bits in hardware, 32 bits in software)
- include/atusb/ep0.h (ATUSB_TIMER), ep0.c (my_setup): new request
ATUSB_TIMER to retrieve the value of the 8 MHz counter
- include/atusb/ep0.h (enum atspi_requests): describe what the groups
of requests do
- atrf.sch: C10 (EVDD bypass) and C13 (DEVDD bypass) had their roles
swapped in the layout. Swapped them in the schematics to match the
layout.
- atusb.brd: updated the netlist
- atusb.sch, usb.sch: commit noise
- atusb/atusb.sch, atusb/usb.sch, atusb/atrf.sch: bumped schematics
version to 20110519
- atusb/usb.sch (VR1, VR2, VR3): changed voltage from 5.6 V to 5.5 V
- atusb/usb.sch (VR1, VR2, VR3): clarified that the voltage is Vdc, not Vb
- bom/atrf.chr (AVR-M1005C080MTACB): Vdc is 5.5 V, not 5.6 V
- bom/atrf.sub (VR[0-9]*): allow #.#Vdc as an alternative to #V#
- usb/usb.h (USB_LANGID_ENGLISH_US): added USB LANGID for US-English
- board.h (board_sernum), board.c (board_sernum, hex, get_sernum,
board_init): provide the board's serial number in "board_sernum"
(UTF-encoded)
- sernum.h (sernum_get_descr), sernum.c (sernum_get_descr): return
string descriptors for the serial number
- descr.c (device_descriptor), usb/dfu.c (device_descriptor):
set iSerialNumber if serial number is available
- atusb.c (main), usb/dfu.c (my_descr): call sernum_get_descr for
unknown descriptors
- Makefile (OBJS, BOOT_OBJS): added sernum.o
What caused the error that looked like a problem with the functional
descriptor was in fact the boot loader resetting between the bus scan
and retrieval of the descriptor.
- board.c (board_init): disable the watchdog timer (tricky !)
- board.h (reset_cpu), board.c: enable the watchdog timer to cause a
CPU reset
- ep0.c (my_setup): uncommented and updated ATUSB_RESET handler
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.
- usb/atu2.c (ep_init): moved before usb_poll
- usb/atu2.c (usb_poll): register bit was used as mask, not as shift
- usb/atu2.c (usb_poll): call ep_init on USB bus reset
- usb/atu2.c (usb_reset): don't make USB bus reset force a hardware reset
- Makefile (.PHONY, dfu): new target to upload the application with DFU
- modules/usb_a_plug_smt.fpd: enlarged hole for positioning pins from
1.1 mm to 1.15 mm
- atusb/usb.sch, atusb/atusb.cmp, atusb/atusb.brd: removed trailing space
from CON1's value
- atusb/atusb.sch, atusb/usb.sch, atusb/atrf.sch: schematics title still
said AT86RF230, not 231
- atusb/README-SMT: corrected a typo
- atusb/README-PCB: specified the tolerance of the hole for the positioning
pins of the USB connector
- atusb/README-PCB: added the 16-17 mm hole for the USB connector to the
specification
- atusb/: bumped all version numbers to 20110330
- atben/README-SMT, atusb/README-SMT: added "component to "orientation"
- atben/README-SMT, atusb/README-SMT: added "drawings" to "footprint
reference"
- atben/README-SMT, atusb/README-SMT: mention once more that the automatic
insertion file is for the front only
- atben/atben.brd, atusb/atusb.brd: set solder mask clearance of fiducials
to 0.1 mil, so that the real solder mask opening has a diameter of
almost) exactly 2 mm (instead of 2 mm plus 10 mil)
- atusb.pro: added fiducial.mod
- atusb.brd: added two fiducial marks
- atusb.brd: adjusted RF and RF power ground zones
- atusb.brd (CON1): moved component reference out of the way
- atusb.brd: bumped version to 110323
- atusb.brd (C22): properly aligned reference with component center
- atusb.brd (P11, P12, P13, P14): moved reference below the pad, for
consistency with P15 and P16
- atusb.brd (CON1): centered the component reference
- makefiles/Makefile.kicad ($(NAME)-PCB_Edges.dxf, $(NAME).drl): since we
now name the files explicitly, we need to generate them explicitly as
well
- makefiles/Makefile.kicad (upload): added SMT fab package
- atben/Makefile (VERSION), atusb/Makefile (VERSION): bumped fab file
version to 110323
- atben/README-PCB, atusb/README-PCB: added overview images for PCB front
and back
- atben/README-SMT, atusb/README-SMT: added overview image for PCB front
- atben/README-SMT, atusb/README-SMT: clarified that the Gerbers are in
the PCB archive
- makefiles/Makefile.kicad (PCB_FILES): moved list of gerbers to
$(GERBERS)
- makefiles/Makefile.kicad (gerber): generate Gerbers only if necessary
- makefiles/Makefile.kicad (overview, uoverview, clean): renamed
overview.png to $(NAME)-overview.png and turned phony target into file
target
- makefiles/Makefile.kicad ($(NAME)-front.png, $(NAME)-back.png, clean):
added generation of front and back images
- atben/README-SMT, atusb/README-SMT: description for SMT fab files
- bom/Makefile (%-smt.csv, spotless): renamed *-smt.csv to *-bom.csv
- makefiles/Makefile.kicad (fab): split into "fab" (PCB and SMT) and
fab-pcb (previous "fab"; only PCB)
- makefiles/Makefile.kicad (fab-smt): added packaging process for SMT
fab files
- Makefile (overview): run prettygerbv to generate an overview image
- Makefile (uoverview): copy the overview image to
downloads.qi-hardware.com and version it
- Makefile (clean): remove overview.png
- atben/Makefile (gerbv), atusb/Makefile (gerbv): show also the back
solder mask layer
- atben/README-PCB, atusb/README-PCB: don't claim the back solder mask
is empty
- atben/Makefile, atusb/Makefile (SCH, BRD): abstract path to .sch and
.brd via variables
- atben/Makefile, atusb/Makefile (gerber, fab): pass absolute path to
board file to pcbnew
- atben/Makefile, atusb/Makefile (gerber): put all options before the
file name argument
- atusb.brd: enabled Drawings layer
- atusb.brd: moved board dimensions to Drawings layer
- Makefile (clean): added $(NAME)-Drawings.gbr
- Makefile (GMERGE, gerber): use "gmerge" to merge Comments (which now
only contains the component references) into SilkS_Front
- Makefile (gerbv): Comments is now redundant; removed it
- Makefile (VERSION): bumped version from 110314 to 110314
- atusb.brd: bumped version on copper and re-generated version on silk
screen
- atusb.brd: bumped version in board meta-data
- README-PCB: added imperial units for board thickness
- README-PCB: changed surface finish recommendation to prefer ENIG more
strongly
- README-PCB: removed instructions for Gerber file generation from
"interpretation of files section"
- README-PCB: mention common coordinate system origin
- atusb/Makefile (gerber, fab): use pcbnew with --origin=aux for Gerber,
drill, and DXF
- atusb/atusb.brd: set auxiliary origin to lower left corner of board
- Makefile (cptx): new target to update the version number on the silk
screen
- atusb.brd: duplicated the version number from the back copper on the
front silk screen
- atusb.brd: moved author tag to make room for front version number
- atben.brd (B1), atusb.brd (B1): marked pin 1 location with a circle
- atusb.brd (D1): marked anode with a plus sign and moved the component
reference
- atben/Makefile (fab), atusb/Makefile (fab): changed name of PCB fab
archives from $(NAME)-$(VERSION)... to $(NAME)-pcb-$(VERSION)...
- atben/Makefile (upload), atusb/Makefile (upload): new target to
upload PCB fab archives to
http://downloads.qi-hardware.com/people/werner/wpan/fab/
- Makefile (VERSION, DIR): added board version and parent directory name
- Makefile: added generation of Gerbers and other fab files
- Makefile (gen): this never worked, changed --plot to --plot=ps
- Makefile: added section titles
- README-PCB: PCB making instructions
- usb/usb.h, usb/atu2.c (usb_reset): reset the USB bus by detaching and
re-attaching the device
- boot.c (main): force a USB reset before running the payload
- usb/atu2.c (usb_poll): test for USB reset from the host (in progress)
- usb/dfu.c (my_reset, dfu_init): register user USB reset handler
- dfu.h (flash_end_write), flash.c (flash_end_write): write any incomplete
buffer
- flash.c (flash_write, flash_end_write): call boot_rww_enable only at the
very end, it won't erase our buffer in mid-page
- usb/dfu.c (my_setup): call flash_end_write at the end of a download
- flash.c (flash_write): we don't use eeprom_busy_wait, removed it
- flash.c (flash_write): write the page only at one place
- flash.c (flash_write): corrected the address of the page write
- flash.c (flash_write): value being added to word wasn't shifted
- Makefile (BOOT_ADDR, boot.elf): use variable instead of hiding the
address in a command
- Makefile (CFLAGS): pass BOOT_ADDR as a macro
- Makefile: removed commented-out application flashing code
- boot.c: basic boot loader that runs DFU for 2 s, then starts the payload
- board.h (DFU_USB_VENDOR, DFU_USB_PRODUCT): added USB IDs for DFU
- flash.c: stubs for board-specific Flash functions
- Makefile: build boot.hex for the boot loader
- Makefile (prog): load the boot loader at its rightful place
- Makefile (prog): also set hfuse and the lock fuse
- dfu.c: updated includes
- dfu.c (device_descriptor): renamed USB IDs from USB_VENDOR/PRODUCT to
DFU_USB_VENDOR/PRODUCT to allow differentiation
- dfu.c: changed all __bit to "int"
- dfu.c: removed all __xdata and __reentrant
- dfu.c: changed "ep0" to "eps[0]"
- dfu.c (payload, flash_erase_page, flash_write_byte, block_write,
block_receive, block_transmit, my_setup): abstracted Flash interface
and removed target-specific operations
- dfu.h: added prototypes for target-specific Flash operations
- dfu,c (my_setup, my_descr): removed SDCC-specific hacks
- dfu.c (my_reset): commented out - did we actually use this ?
- Makefile, atusb.pro, atusb.sch, atrf.sch, usb.sch, atusb.cmp, atusb.brd:
resurrected from git history (commit
14b00823b0)
- fw/: moved all C8051F326-specific files over from atusb/fw/
- fw/include/: copied MCU-independent files over from atusb/fw/include/
- atben/cam/mkmk: introduced variables for board corner
- atben/cam/mkmk: updated for new raw board
- atusb-pgm/cam/Makefile: updated for new board
- atusb/cam/Makefile: introduced abstraction with $(NAME)
- atusb/cam/Makefile: use cameo/templates/mkmk-simple instead of local mkmk
- atusb/cam/mkmk: removed
- atusb/cam/Makefile: updated for new board
- usb/usb.c: moved chip-specific functions to usb/atu2.c
- Makefile (USB_OBJS): added usb/atu2.c
- usb/usb.h, usb/usb.c, ep0.c: made argument to my_setup and user_setup
"const"
- usb/ubs.h (handle_setup): call from chip driver to generic stack
- usb/ubs.h (set_addr): call from generic stack to chip driver
- Makefile (atusb.elf): generate a new version iff generating a new
executable
- Makefile (atusb.bin): print the build number and the file size
- Makefile (clean): remove the various constituend files of the version
- Makefile (version.c): generate version.c
- version.h: definitions for the generated version.c
- ep0.c (build_number, build_date): removed dummy version information
and include version.h instead
- usb2/: renamed to usb/
- Makefile (FreakUSB): removed $(FreakUSB) and commented-out items for
FreakUSB
- Makefile: changed vpath from usb2/ to usb/
- Makefile (CFLAGS): changed include from -Iusb2 to -Iusb
- Makefile (CFLAGS): don't define NUM_EPS (it's already in usb/usb.c)
- atusb.brd: updated for schematics changes
- atusb.brd: rearranged component references and values for
printing/display
- atusb.brd: bumped version to 20110214
- usb.sch (R1): changed from 68 Ohm to 180 Ohm, to decrease BOM size
- atrf.sch (C17): changed from 1 pF to 2.2 pF (value is more common,
and it can only help to reduce harmonics)
- atusb.sch, usb.sch, atrf.sch: bumped version to 20110214
- atusb.cmp: updated
The Makefile didn't see the FreakUSB object files at the expected place,
so it always rebuild them.
- Makefile (USB_OBJS): removed paths from object file names
- Makefile: added vpaths for the FreakUSB source file locations
- Makefile (atusb.elf, clean): we no longer need $(notdir ...) for the
object files
- atusb.c (main), board.h (board_init), board.c (board_init): moved
clock and I/O initialization to board file
- board.h (led), board.c (led), atusb.c (main): abstracted LED setting
in function "led" instead of open-coding it
- spi.c (spi_init): set nSS to 1 before enabling the output, so that we
don't generate what looks like an empty SPI transaction
- atusb.brd: moved C14 and adjacent via 10 mil away from the transceive,
for improved solderability
- atusb.brd: moved nRST_RF via and trace by 5 mil, for better access to
the trace
- atusb.brd: reduced crystal front ground zone such that it does not
creep under XTAL2 corner (where it might meet exposed metal)
- board.h (read_irq), board.c: return status of the RF IRQ
- board.h (PIN, PIN_1, PIN_2): macros to read port pins
- ep0.c (my_setup): make ATUSB_POLL_INT return the real interrupt
- fw/include/atusb/ep0.h (HW_TYPE_110131): defined hardware type 2 for
ATmega32U2-based boards
- fw/ep0.c: define HW_TYPE as HW_TYPE_110131, not directly as 2
- fw2/atusb.c: include atusb/ep0.h instead of declaring ep0_init locally
- io.h: renamed to board.h
- Makefile (OBJS): added board.o
- atusb.c (reset_rf): moved to board.c
- board.h (reset_rf): give reset_rf a proper declaration
- atusb.c, ep.c, spi.c: include board.h instead of io.h
- ep0.c (do_usb_recv, usb_recv): implemented creepy buffer reception
- ep0.c (my_setup): added dummy for ATUSB_POLL_INT (always return 0)
- ep0.c (my_setup): send a zero-length packet at the end of
ATUSB_RF_RESET and ATUSB_REG_WRITE to indicate status stage
- Makefile (OBJS): added spi.o
- spi.h, spi.c, atusb.c: moved SPI functions to new file
- spi.h (spi), spi.c (spi), atusb.c (main): renamed function "spi" to
"spi_io"
- atusb.c (reset_rf, main): moved transceiver reset to separate function
- ./: basic framework to build a firmware that can enumerate
- usb/patches/: patches to make FreakUSB 0.7 compile cleanly and to make
it work in our context
- usb.sch: cleaned up programming/auxiliary/LED signals
- usb.sch: swapped LED and nRST_RF (tracking the layout)
- atusb.brd: updated for corrected netlist
- atusb.brd: moved date code which overlapped with traces
- atusb.brd: reduced front RF and power ground zones to avoid ground
fill between transceiver pads
- atusb.brd: added ground traces around crystal to widen ground zone
- atusb.pro, atusb.cmp: updated for ATmega32U2-based design
- usb.sch: rearranged LED, nRST_RF, and SLP_TR, to make layout easier
- atusb.brd: redid layout for the ATmega32U2-based design
- usb.sch: renumbered test points for serial programming
- usb.sch: moved everything down to make room on top
- usb.sch: moved description of pad placement near the pads
- usb.sch: added footprint of U1
- atusb.pro (LibName5): changed from c8051f326 to atmega8u2
- atrf.sch: export CLKM and added filter for 8 MHz clock
- atusb.sch: connect CLK between RF and USB side
- usb.sch: changed design frim C8051F326 to ATmega32U2 (needs cleanup)
Settings according to
http://www.nxp.com/documents/mounting_and_soldering/AN10365.pdf
- atben.pro, atben.brd, atusb.pro, atusb.brd: set solder mask clearance
to 50 um (copper-defined pads)
- atben.pro, atben.brd, atusb.pro, atusb.brd: set solder paste clearance
to 25 um
- atusb.brd: moved component references for proper printing on silk screen
- atusb.brd: moved component values for easy display (do not print on
silk screen !)
- atusb.brd, atusb.cmp: changed all 0402-M to the new 0402
- atusb.brd, atusb.cmp: changed 0603-M to the new 0603
- atusb.brd: updated layout for component changes