1
0
mirror of git://projects.qi-hardware.com/ben-wpan.git synced 2024-12-02 01:36:14 +02:00
Commit Graph

322 Commits

Author SHA1 Message Date
Werner Almesberger
7fd9044d94 atusb/fw/: add SPI block reception
This decreases the retrieval time for a frame of 102 bytes from
660 us to 384 us, corresponding to a speed change from about
1.26 Mbps to 2.17 Mbps (102 bytes plus 2 bytes overhead).
2013-07-30 19:52:54 -03:00
Werner Almesberger
0706773e38 atusb/fw/Makefile: improve size reporting (show segment sizes) 2013-07-24 17:19:55 -03:00
Werner Almesberger
998ac7e5c6 atusb/fw/mac.c (next_buf): dedicated function for incrementing buffer indices 2013-07-24 16:21:38 -03:00
Werner Almesberger
b73d5fc1af atusb/fw/mac.c: remove queued_rx; buffer frames in the MCU instead
queued_rx held a frame in the transceiver's receive buffer until we could
transfer it. This may cause frame loss if a new reception begins.

We now retrieve frames from the transceiver immediately and buffer them
in the MCU.
2013-07-24 07:57:35 -03:00
Werner Almesberger
6416fa8d0b atusb/fw/mac.c: add section titles 2013-07-23 12:50:42 -03:00
Werner Almesberger
367c1abb0e atusb/fw/: echo back TX ACK sequence number; don't panic if driver times out TX 2013-04-01 22:04:05 -03:00
Werner Almesberger
9b2696b848 atusb/fw/usb/: enable MCU reset on USB bus reset after config selection
This way the host can reset the MCU if it's hung (for example, in the
panic loop) and we don't need to unplug-replug.
2013-04-01 15:54:44 -03:00
Werner Almesberger
65722d417a atusb/fw/mac.c: queue frame reception if USB is busy
This way we we make sure we retrieve the frame and thus release dynamic
buffer protection (if enabled).
2013-04-01 15:17:37 -03:00
Werner Almesberger
ad70d7c129 include/atusb/atusb.h: salvage cute explanation of 0x1540 from usb-ids.h 2013-04-01 14:43:36 -03:00
Werner Almesberger
dab0d183a2 atusb/fw/include/atusb/usb-ids.h: remove (and adapt former users) 2013-04-01 14:40:14 -03:00
Werner Almesberger
d76bdf6a82 atusb/fw/mac.c (handle_irq): move frame reception to separate function 2013-04-01 14:29:57 -03:00
Werner Almesberger
60ee82ba93 atusb/fw/mac.c (handle_irq): only handle TRX_END; never fall back to seq ints 2013-04-01 12:48:30 -03:00
Werner Almesberger
3e749c3140 fw/include/atusb/ep0.h: protect also USB_DIR_IN and USB_DIR_OUT
They're currently not defined by libusb, but since the kernel has them,
they may eventually also end up in user space.
2013-04-01 11:23:48 -03:00
Werner Almesberger
16dd767857 fw/include/atusb/ep0.h (USB_TYPE_VENDOR): avoid conflict with /usr/include/usb.h 2013-04-01 05:59:18 -03:00
Werner Almesberger
2d43876e4a atusb/fw/board.h: de-duplicate USB ID definitions (now originate from atusb.h) 2013-04-01 05:54:58 -03:00
Werner Almesberger
12d3401f64 fw/include/atusb/: move shared protocol definitions from ep0.h to atusb.h 2013-04-01 05:47:53 -03:00
Werner Almesberger
647f3c0375 atusb/fw/: get rid of some more "int"s
No size change this time.
2013-03-29 19:19:49 -03:00
Werner Almesberger
a8db238cbb atusb/fw/: convert functions returning "int" to "bool"
Firmware size is down from 5612 to 3590 bytes. Wow !
2013-03-29 19:14:11 -03:00
Werner Almesberger
c9ab070ffd atusb/fw/mac.c (do_tx): add timeout for transition to TRX_STATUS_RX_[AACK_]ON 2013-03-29 18:50:54 -03:00
Werner Almesberger
211280356d atusb/fw/mac.c: check CRC and auto-discard bad frames 2013-03-29 17:02:24 -03:00
Werner Almesberger
5fc9575e4e atusb/fw/mac.c (do_tx): pulse SLP_TR instead of sending TRX_CMD_TX_START 2013-03-29 15:03:03 -03:00
Werner Almesberger
88c7e64e38 atusb/fw/mac.c (txing, queued_tx_ack): change from "int" to "bool" 2013-02-20 18:48:53 -03:00
Werner Almesberger
de8bcc1925 atusb/fw/mac.c: always wait for stability before changing transceiver state 2013-02-20 13:05:33 -03:00
Werner Almesberger
852aaf1b66 atusb/fw/: reset MAC state on ATUSB_RF_RESET 2013-02-13 09:30:21 -03:00
Werner Almesberger
911eb4d4b5 fw/mac.c (handle_irq): read REG_IRQ_STATUS also if we ignore the value
Else, we won't get any further interrupts.
2013-02-13 01:35:23 -03:00
Werner Almesberger
42f1a78807 atben/atben.sch, atusb/atrf.sch: correct and clarify ESR of X1 (reported by Wolfgang Spraul)
The maximum ESR is 100 Ohm, not 80 Ohm. Also changes "=" to "<=" to
make it clear that this is a maximum value.
2012-05-29 02:48:31 -03:00
Werner Almesberger
65f1454d87 atusb/usb.sch: bring back USB_A_PLUG (was lost for an unknown reason)
The symbol/component name got changed to USB_A_PLUG~ and the component
was no longer found. Re-inserting it seem to have solved that problem.
2012-05-23 23:49:31 -03:00
Werner Almesberger
b401a53bf5 Updated profiles (atusb, atusb-sil, cntr) for move of USB symbols 2011-08-14 04:43:12 -03:00
Werner Almesberger
c699a921c1 Updated profiles (atusb, atusb-sil, cntr) for move of usb_a_plug_smt.fpd 2011-08-14 03:09:00 -03:00
Werner Almesberger
e87ad08097 Updated profiles (atusb, atusb-sil, cntr) for move of MCU symbols 2011-08-14 01:25:53 -03:00
Werner Almesberger
7a8ca1b50b Updated profiles (atben, atusb, atusb-sil, cntr) for move of qfn.fpd and qfp.fpd 2011-08-14 00:47:17 -03:00
Werner Almesberger
eeeb5599f8 atusb/fw/mac.c: reserved code 0 and added notification of TX completion
- mac.c (queued_tx_ack, rx_done, handle_irq): on TX completion, send a
  a zero byte on EP 1
- mac.c (handle_irq): don't receive zero-sized frames (they're
  malformed anyway), so that size zero can be used to signal TX
  completion
2011-07-13 14:22:49 -03:00
Werner Almesberger
da7803a746 atusb/fw/: some small "HardMAC" fixes 2011-07-12 17:48:17 -03:00
Werner Almesberger
862b554e2d libatrf: added HardMAC functions
This function set isn't really usable for real communication. Its main
purpose is to help with testing the firmware.

- tools/lib/driver.h (struct atrf_driver): added driver functions for
  HardMAC access
- tools/include/atrf.h (atrf_rx_mode, atrf_rx, atrf_tx),
  tools/lib/atrf.c: functions to enable/disable HardMAC mode and to
  send/receive frames
2011-07-12 17:45:59 -03:00
Werner Almesberger
c1071309d8 atusb/fw/: added "HardMAC" support (not yet using the TRX's MAC)
- include/atusb/ep0.h (enum atspi_requests), ep0.c (my_setup): added
  new "HardMAC" requests ATUSB_RX_MODE and ATUSB_TX
- mac.h, mac.c: basic "HardMAC" procedure
- board_app.c (INT0_vect): call MAC-specific interrupt handler if
  provided
- Makefile (OBJS): added mac.o
2011-07-12 12:26:07 -03:00
Werner Almesberger
e700b81642 atusb/fw/Makefile (bindist): new target to upload and describe atusb.bin 2011-07-12 12:26:07 -03:00
Werner Almesberger
7cae01bc0e atusb/fw/board_app.c (INT0_vect): limit interrupt serials to 0x80-0xff
This leaves the range 0x00-0x7f for other uses.
2011-07-12 12:25:53 -03:00
Werner Almesberger
42483d67b4 atusb/fw/: added improved support for interrupt synchronization
At an interrupt barrier, the host must be able to ensure that no
interrupt generated before reaching the barrier is still pending and
will be delivered after crossing the barrier.

For this, we introduce the following concept:

- interrupts have a serial number. This number is sent to the host
  on EP 1 (currently bulk) to signal the interrupt, instead of the
  zero byte we used previously.

- the new request ATUSB_SPI_WRITE2_SYNC returns the interrupt
  serial number from after the register write (the register write
  itself is the interrupt barrier).

- the host can now check if the serial indicated from bulk and the
  serial from ATUSB_SPI_WRITE2_SYNC are the same. If yes, interrupts
  are synchronized. If not, it has to wait for the interrupt to be
  signaled on EP 1.

We should also consider the case that the interrupt serial has gotten
ahead of ATUSB_SPI_WRITE2_SYNC. But that seems to happen rarely. In
any case, it's something for the host driver to worry about, not for
the firmware.

- board.h (irq_serial), board_app.c (irq_serial, INT0_vect): count
  the interrupt serial number and return it when signaling the
  interrupt
- include/atusb/ep0.h (ATUSB_SPI_WRITE2_SYNC), ep0.c (my_setup):
  new request ATUSB_SPI_WRITE2_SYNC that does a register write, then
  returns the interrupt serial
2011-07-07 15:51:07 -03:00
Werner Almesberger
ead7ade51e Revert "atusb/fw/: added optional debug log with request ATUSB_READ_LOG"
This reverts commit 39e3d4e61a.

The log isn't so useful in its present state because we may have to
unplug/replug to get out of a troublesome condition.
2011-07-05 19:39:25 -03:00
Werner Almesberger
39e3d4e61a atusb/fw/: added optional debug log with request ATUSB_READ_LOG 2011-07-05 18:52:56 -03:00
Werner Almesberger
8f949842db atusb/fw/: remove unused items when building the USB driver for the boot loader
- usb/atu2.c (NUM_EPS), board.h (NUM_EPS): moved definition to
  board.h
- board.h (NUM_EPS): use one EP for the boot loader, two for the
  application
- usb/atu2.c (ep_init): initialize EP 1 only in an application build
2011-06-26 06:59:13 -03:00
Werner Almesberger
6909fc232a atusb/fw/Makefile: introduce target-specific compliation variants
- Makefile (USB_OBJS): moved into OBJS and BOOT_OBJS
- Makefile (OBJS): atu2.o is now app-atu2.o
- Makefile (BOOT_OBJS): atu2.o is now boot-atu2.o
- Makefile (MKDEP, %.o): moved dependency generation to macro $(MKDEP)
- Makefile (app-%.o): build from usb/%.c
- Makefile (boot -%.o): build from usb/%.c and set -DBOOT_LOADER
2011-06-26 06:56:01 -03:00
Werner Almesberger
23c592250e atusb/fw/board_app.c: do not read and accumulate IRQs; flash LED when EP1 busy
To indicate an interrupt, we just send a zero byte.
2011-06-23 13:03:34 -03:00
Werner Almesberger
27fc0a0e2c atusb/fw/: aggregate interrupts while waiting
- board_app.c (INT0_vect): always read IRQ_STATUS, even if an
  interrupt is already enqueued
- board_app.c (INT0_vect): if an interrupt is enqueued, accumulate
  the interrupts signaled since
- board_app.c (irqs_more): when a pending transfer completes, send
  interrupts accumulated since (if any)
2011-06-23 09:41:40 -03:00
Werner Almesberger
f7b9a18917 atusb/fw/: new request ATUSB_GPIO_CLEANUP to re-enable INT0
- board.h (gpio_cleanup), board_app.c (gpio_cleanup): restore INT0
  when done manipulating GPIOs
- board.c (gpio): updated comment explaining how to restore INT0
- include/atusb/ep0.h (enum atspi_requests), ep0.c
  (ATUSB_GPIO_CLEANUP): new request to return to normal operation
  after ATUSB_GPIO
2011-06-20 23:11:09 -03:00
Werner Almesberger
12fef1b196 atusb/fw/: disable INT0 if manipulating GPIOs (tentative)
Since GPIO manipulations may cause stray INT0 activity, we turn off
INT0 handing on ATUSB_GPIO. The MCU must be reset to restore access
to INT0.

There are still issues to resolve with the GPIO test. It may turn
out that there's a less invasive solution than just turning off
INT0 completely.

- board_app.c (gpio): mask INT0 before manipulating GPIOs
- board_app.c (board_app_init): make it clearer that EIMSK is a bit
  mask
2011-06-20 20:50:22 -03:00
Werner Almesberger
0120f62242 atusb/fw/: added reporting of RF interrupts via bulk EP1
- board.h (board_app_init), board_app.c (board_app_init): new function
  for application-specific board initialization
- atusb.c (main): call board_app_init
- board_app.c (INT0_vect): on RF interrupt, read REG_IRQ_STATUS and
  send the status byte on EP1
- board_app.c (board_app_init): set up interrupt on rising edge of
  INT0 (INT_RF)
- descr.c (config_descriptor): added EP1 as bulk IN
2011-06-20 15:49:33 -03:00
Werner Almesberger
244e449131 atusb/fw/usb/: added support for bulk IN EP 1
The code is quite special-cased. Some more changes will be necessary
for interrupt or OUT EPs.

- atu2.c (NUM_EPS): increased from 1 to 2
- atu2.c (ep_rx): send zero-length packet also for EPs != 0
- atu2.c (handle_ep): clear FIFOCON when sending data on EP != 0
- atu2.c (ep_init): configure EP 1 as bulk IN with size 64
- usb.c (NUM_EPS): we don't need to define NUM_EPS here
2011-06-20 14:34:08 -03:00
Werner Almesberger
3f74098ce2 atusb/fw/ep0.c (my_setup): fixed test for ATUSB_SPI_READ2 2011-06-20 13:43:17 -03:00
Werner Almesberger
9a0184cacb atusb/fw/: new mechanism for SPI commands (more general than reg/buf requests)
- ep0.c (setup_request): store combined request code in "req", for
  later reuse
- include/ep0.h (ATUSB_SPI_WRITE, ATUSB_SPI_READ1, ATUSB_SPI_READ2),
  ep0.c (setup_request): new requests that translate easily into
  general SPI operations
2011-06-19 15:50:49 -03:00
Stefan Schmidt
a48c6dcb30 usb/dfu.h: Include usb.h to avoid gcc warning
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>
2011-06-17 12:01:38 -03:00
Werner Almesberger
ce16a16f73 atusb/fw/atusb.c (main): sleep (idle mode) while waiting for interrupts
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.
2011-06-11 14:31:13 -03:00
Werner Almesberger
b42577bb72 atusb/fw/boot.c: adjusted the delay loop and don't race with dfu-util
- 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
2011-06-11 14:26:52 -03:00
Werner Almesberger
376236949b atusb/fw/usb/: we were busy-looping on TXINI. Mask the interrupt when idle.
- 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
2011-06-11 14:17:44 -03:00
Werner Almesberger
d03beb2257 atusb/fw/: changed USB stack to use interrupts instead of polling
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
2011-06-11 11:06:18 -03:00
Werner Almesberger
f9681e5b4f atusb/fw/usb/atu2.c: use implicit race-free "and" when writing to UDINT/UEINTX
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"
2011-06-11 08:16:23 -03:00
Werner Almesberger
a69916da52 atusb/fw/: make timer code use interrupts instead of polling
- board_app.c (timer_poll): replaced with interrupt handler
- board_app.c (__timer_read): merged polling of timer_poll into the
  read loop (so it works as before, provided that interrupts are
  disabled)
- board_app.c (timer_read): run __timer_read with interrupts disabled
- board_app.c (timer_init): enable timer 1 overflow interrupt
- atusb.c (main): enabled global interrupts
- atusb.c (main): don't call poll_timer anymore
- board.h (timer_poll): removed
2011-06-11 08:13:31 -03:00
Werner Almesberger
2acdaca218 atusb/fw/: moved timer initialization to board_app.c as well
- 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
2011-06-11 01:52:16 -03:00
Werner Almesberger
2d7ee91430 atusb/fw/: added transition from runtime to DFU mode according to DFU spec
- descr.c (config_descriptor): added DFU interface descriptor
- ep0.c (my_dfu_setup, my_set_interface, ep0_init): added DFU
  interface switching
- ep0.c (my_reset, ep0_init): CPU-reset (into boot loader) on
  USB bus reset when in appDETACH
- Makefile (OBJS): added dfu_common.o
2011-06-10 23:26:36 -03:00
Werner Almesberger
5f50611735 atusb/fw/usb/: DFU_ITF_DESCR also needs a protocol argument
- dfu.h (enum dfu_itf_proto): bInterfaceProtocol values for DFU
  functional descriptor
- dfu.h (DFU_ITF_DESCR): added protocol argument
- dfu.c (config_descriptor): pass protocol to DFU_ITF_DESCR
2011-06-10 23:15:51 -03:00
Werner Almesberger
2544004a86 atusb/fw/: moved common elements of DFU processing to dfu_common.c
- dfu.c (functional_descriptor, dfu, my_descr), dfu.h (dfu_my_descr):
  moved to dfu_common.c
- dfu.c (my_setup), dfu.h (dfu_setup_common), dfu_common.c
  (dfu_setup_common): moved handling of DFU_GETSTATUS, DFU_CLRSTATUS,
  and DFU_GETSTATE from my_setup to dfu_setup_common
- dfu_common.c (my_descr), dfu.c (dfu_init): renamed my_descr to
  dfu_my_descr
- Makefile (BOOT_OBJS): added dfu_common.o
2011-06-10 22:04:12 -03:00
Werner Almesberger
bbe27fc357 atusb/fw: revert most of the user_setups change and use simple callback instead
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
2011-06-10 21:50:42 -03:00
Werner Almesberger
7a2c785e29 atusb/fw/usb/dfu.h: define DFU interface descriptor, for later sharing
- dfu.h (DFU_ITF_DESCR): define DFU interface descriptor
- dfu.c (config_descriptor): use DFU_ITF_DESCR instead of open-coding
  the descriptor
2011-06-10 19:33:24 -03:00
Werner Almesberger
3cc92cc4a6 atusb/fw/: define USB bus current (40 mA) in board.h based on measured value
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
2011-06-10 19:33:24 -03:00
Werner Almesberger
89d13ce8f8 atusb/fw/: SET_INTERFACE can now select among interfaces (changes user_setup)
- 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]
2011-06-10 17:12:57 -03:00
Werner Almesberger
256ac01ab2 atusb/fw/board.c (reset_rf): increased 1 us delays to nominally 2 us
They should be at least 625 ns. Can't hurt to have a little tolerance.
2011-06-09 20:55:33 -03:00
Werner Almesberger
ec7c93789a atusb/fw/: added "lazy enabling" of UART-SPI after ATUSB_GPIO
- 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
2011-06-09 14:02:26 -03:00
Werner Almesberger
814cf6fd78 atusb/fw/boot.c (main): reset_rf implies spi_init - no need to call it here 2011-06-09 12:52:51 -03:00
Werner Almesberger
ed6d43bb35 atusb/fw/board_app.c: removed unnecessary includes 2011-06-09 12:51:13 -03:00
Werner Almesberger
e678401ac3 atusb/fw/: split board functions into app-only/shared part (boot overlflowed)
- board.c (timer_h, reset_cpu, read_irq, slp_tr, timer_poll,
  timer_read, gpio): moved to new file board_app.c
- Makefile (OBJS): added board_app.o
2011-06-09 12:48:44 -03:00
Werner Almesberger
b41076135c atusb: include the position of fiducials in atusb-pos.csv (for fab)
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
2011-06-07 16:51:26 -03:00
Werner Almesberger
e42203b723 atusb/fw/: new request ATUSB_SLP_TR to pulse SLP_TR
- include/atusb/ep0.h (enum atspi_requests): added ATUSB_SLP_TR
- ep0.c (my_setup): call slp_tr on ATUSB_SLP_TR
- board.h (slp_tr), board.c: pulse SLP_TR high
2011-06-05 22:34:49 -03:00
Werner Almesberger
e6f7d85e8a atudb/fw: disable the UART in ATUSB_GPIO
- board.c (gpio): split GPIO setup and probing
- board.c (gpio): disable the UART while probing GPIOs
2011-06-05 18:27:40 -03:00
Werner Almesberger
370cd320ef atusb/fw: new request ATUSB_GPIO for direct GPIO access
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
2011-06-04 10:29:10 -03:00
Werner Almesberger
b733431847 atusb/fw/ep0.c: fixed ATUSB_SRAM_READ
- 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)
2011-06-03 14:25:19 -03:00
Werner Almesberger
8c57277953 atusb/fw/: added free-running 48 bit 8 MHz counter for clock measurements
- 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
2011-05-29 21:05:28 -03:00
Werner Almesberger
8a436b8abd atusb/: swapped C10 and C13 in schematics, to match layout
- 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
2011-05-27 04:29:01 -03:00
Werner Almesberger
926ed26188 atusb: varistor Vdc was off by 100 mV; made it clearer that we use Vdc, not Vb
- 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#
2011-05-19 14:23:33 -03:00
Werner Almesberger
b82db55f4a atusb/fw/Makefile: new target "update" to update the application via DFU
- Makefile (USB_ID, dfu): moved USB ID to variable, for sharing
- Makefile (.PHONY, update): new target to reset atusb and to DFU new
  firmware
2011-05-11 05:29:54 -03:00
Werner Almesberger
85f60de9d5 atusb/fw: use the unique serial number of the ATmega8/16/32U2 for iSerialNumber
- 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
2011-05-10 17:23:08 -03:00
Werner Almesberger
fd91546c59 atusb/fw/Makefile (dfu): our functional descriptor is fine, no need for -t
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.
2011-05-10 11:53:32 -03:00
Werner Almesberger
ddd0022350 atusb/fw/boot.c (main): don't time out until there is an application
This prevents the boot loader from resetting all the time and makes
it easier to "catch" it with dfu-util.
2011-05-10 11:51:46 -03:00
Werner Almesberger
fc1a334bf6 atusb/fw/usb/dfu.c (dfu): lowered bwPollTimeout from 1 s to 100 ms and explained why 2011-05-10 08:32:12 -03:00
Werner Almesberger
42dae8dde2 atusb/fw: implemented ATUSB_RESET
- 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
2011-05-09 23:52:00 -03:00
Werner Almesberger
6179f31fc0 atusb/fw/README: boot loader flashing time was a bit too optimistic (15 -> 30 s) 2011-05-09 23:44:51 -03:00
Werner Almesberger
1f99435bba atusb/fw/README: updated for complete firmware upload process 2011-05-09 22:06:33 -03:00
Werner Almesberger
0db361d49d atusb/fw/Makefile (dfu): pass transfer size to hide DFU non-compliance
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.
2011-05-09 22:02:28 -03:00
Werner Almesberger
eeb3af6a03 atusb/fw: fixed USB bus reset handling by software
- 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
2011-05-09 21:13:41 -03:00
Werner Almesberger
c5992bc675 atusb/fw/Makefile (.PHONY): added development-only phony targets 2011-05-09 21:12:26 -03:00
Werner Almesberger
f4342f49ae atusb: enlarged USB positioning pin hole; general cleanup
- 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
2011-03-31 03:27:11 -03:00
Werner Almesberger
6487c32387 atben/README-PCB, atusb/README-PCB: clarifications regarding holes
- atben/README-PCB, atusb/README-PCB: illustrations now contain holes
- atben/README-PCB, atusb/README-PCB: clarified distinction antenna via
  vs. hole
2011-03-29 07:53:03 -03:00
Werner Almesberger
74706cfae8 atusb.brd: updated USB-A-PLUG-SMT footprint (fped put the layers wrong) 2011-03-24 21:19:08 -03:00
Werner Almesberger
6ff2740e9b atusb.brd: moved FIDUCAL label away from mounting hole; bumped version number
- atusb.brd: "FIDUCIAL" label was on hole; moved it
- atusb.brd: bumped version to 110325
2011-03-24 13:17:04 -03:00
Werner Almesberger
269f77079a added the front solder paste to the PCB fab package (for stencil production)
- atben/README-PCB, atusb/README-PCB: added *-SoldP_Front.gtp
- makefiles/Makefile.kicad (GERBERS): added $(NAME)-SoldP_Front.gtp
- makefiles/Makefile.kicad (gerbv): also show the board edge
2011-03-24 13:12:00 -03:00
Werner Almesberger
1c4c78e110 atusb.brd: added two vias to connect front and back ground at USB shield 2011-03-24 12:45:35 -03:00
Werner Almesberger
38bea8ec54 README-SMT: various small clarifications
- 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
2011-03-24 12:18:14 -03:00
Werner Almesberger
f242368deb atben. atusb: bumped version numbers to 110324 2011-03-24 05:07:50 -03:00
Werner Almesberger
af6d563194 README-PCB: relaxed antenna via size from 8 mil to <= 15 mil 2011-03-24 00:26:10 -03:00
Werner Almesberger
7e20be97dc atben.brd, atusb.brd: set solder mask opening of fiducials to 2 mm
- 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)
2011-03-23 23:46:44 -03:00
Werner Almesberger
16ac7e5f4b miscellaneous integration of fiducials
- atben/atben.brd, atusb/atusb.brd: set insertion of fiducials to
  "virtual"
- makefiles/Makefile.kicad ($(NAME)-footprints.pdf): added FIDUCIAL
2011-03-23 17:44:59 -03:00