1
0
mirror of git://projects.qi-hardware.com/ben-wpan.git synced 2024-11-30 12:34:59 +02:00
Commit Graph

116 Commits

Author SHA1 Message Date
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
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
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
d233c04c86 atusb/fw: implemented USB bus reset (to host) and polling of reset from host
- 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
2011-03-11 17:56:41 -03:00
Werner Almesberger
e5571a26c3 atusb/fw/usb/atu2.c (handle_ep): cancel RX/TX if we receive a SETUP 2011-03-11 17:56:41 -03:00
Werner Almesberger
c265151d2b atusb/fw: introduced function flash_end_write to properly finish flashing
- 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
2011-03-11 17:56:41 -03:00
Werner Almesberger
2978afe92b atusb/fw/flash.c: simplified logic of flash_write and corrected several small bugs
- 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
2011-03-11 17:56:41 -03:00
Werner Almesberger
553c981551 atusb/fw/flash.c: implemented flash_can_write and flash_read (were stubs) 2011-03-11 17:56:41 -03:00
Werner Almesberger
f87bdce41f atusb/fw/Makefile: added auxiliary Flash programming target (for development)
- Makefile (prog-app): flash the application, without the boot loader
- Makefile (prog-read): retrieve the Flash content
2011-03-11 16:24:49 -03:00
Werner Almesberger
e29046d19b atusb/fw/Makefile (prog): corrected boot loader size in hfuse 2011-03-11 16:23:42 -03:00
Werner Almesberger
edfb8a94eb atusb/fw/Makefile: clean up handing of boot loader base address
- 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
2011-03-11 16:21:39 -03:00
Werner Almesberger
b5fd6e3132 atusb/fw/Makefile: lock fuse refuses 0xef; set it to 0x2f to pass verification 2011-03-09 03:11:15 -03:00
Werner Almesberger
b8fc1a7f54 atusb/fw/flash.c: added basic writing support (untested) 2011-03-09 02:02:05 -03:00
Werner Almesberger
1dcc83391e atusb/fw/Makefile: put -mmcu into CFLAGS so that DEPEND uses it, too
- Makefile ($(NAME).elf, boot.elf, %.o): don't pass -mmcu explicitly
- Makefile (CFLAGS): include -mmcu, so that it's also picked up by
  $(DEPEND)
2011-03-09 01:45:35 -03:00
Werner Almesberger
6ac82fc6c9 atusb/fw/README: avr-libc 1.17.1 has been released 2011-03-09 01:36:18 -03:00
Werner Almesberger
341b348ac0 atusb/fw/Makefile (clean): also remove the boot loader 2011-03-09 00:57:01 -03:00
Werner Almesberger
e8bed1f3c1 atusb/fw/: flash a boot loader instead of the application (in progress)
- 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
2011-03-09 00:41:32 -03:00
Werner Almesberger
f91738c306 atusb/fw/usb/: adapted DFU engine to current stack and abstracted Flash ops
- 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 ?
2011-03-08 19:10:58 -03:00
Werner Almesberger
fb2204ad84 usb/: added DFU implementation from f386base/fw/boot/ (unported) 2011-03-08 19:05:26 -03:00
Werner Almesberger
0676bef2c1 usb/fw/atusb.c (main): removed 100 ms LED flash 2011-03-08 19:03:25 -03:00
Werner Almesberger
79b5daf5a4 atusb/fw/: moved USB IDs from descr.c to board.h
- descr.c (USB_VENDOR, USB_PRODUCT): moved to board.h
- descr.c: include board.h
2011-03-08 19:01:54 -03:00
Werner Almesberger
0293911fed atusb/fw/usb/: corrected type of user-provided descriptor
- usb.h, usb.c (user_get_descriptor): "reply" is simply "const uint8_t *",
  not "const uint8_t * const *"
2011-03-08 18:56:52 -03:00
Werner Almesberger
4759ea6f0c atusb/fw/atusb.c (main): enabled blinking the LED for the prototypes 2011-03-04 21:51:18 -03:00
Werner Almesberger
2f85fa9d14 atusb/fw/Makefile: abstract host so that one can use HOST=ben instead of jlime 2011-03-04 21:50:01 -03:00
Werner Almesberger
313fb7c190 atusb/fw/Makefile (CFLAGS): simplify -I../fw/include to -Iinclude 2011-02-22 00:24:53 -03:00
Werner Almesberger
78cfc8ffeb moved atusb/fw3/ to atusb/fw/ 2011-02-22 00:24:07 -03:00
Werner Almesberger
2642b9e1c3 atusb-sil/: moved C8051F326-related material out of atusb/
- 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/
2011-02-22 00:17:13 -03:00
Werner Almesberger
dcfa689936 atusb/fw2/: assigned hardware revision code point; some cleanup
- 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
2011-02-10 07:24:37 -03:00
Werner Almesberger
309a5ed6d5 atusb/fw/include/at86rf230.h: make 231-centric
- at86rf230.h (TX_AUTO_CRC_ON): changed to TX_AUTO_CRC_ON_230
- at86rf230.h (TX_AUTO_CRC_ON_231): changed to TX_AUTO_CRC_ON
- tools/atrf-txrx/atrf-txrx.c: updated for above changes
2011-01-07 14:31:27 -03:00
Werner Almesberger
f67a79b04e atusb/fw/include/at86rf230.h: many corrections, some additions
- at86rf230.h (REG_BATMON): address is 0x11, not 0x10
- at86rf230.h (TRX_CMD_MASK): width is 5 bits, not 3
- at86rf230.h (CLKM_CTRL_MASK): width is 3 bits, not 2
- at86rf230.h (PA_EXT_EN, IRQ_2_EXT_EN, TX_AUTO_CRC_ON_231): shifted by one
  bit
- at86rf230.h (RX_BL_CTRL, AACK_DIS_ACK): added missing field
- at86rf230.h: added fields PA_BUF_LT and PA_LT
- at86rf230.h (ANT_DIV): added fields of this register
- at86rf230.h (NATMON_VTH_SHIFT, NATMON_VTH_MASK): corrected typo
2011-01-07 14:29:00 -03:00
Werner Almesberger
4387d844dc atusb/fw/include/at86rf230.h: added remaining AT86RF231 values 2011-01-07 11:52:45 -03:00
Werner Almesberger
bd5b008c44 atusb/fw/include/at86rf230.h: make one section per register, not one per field
Looked too confusing.
2011-01-07 09:16:51 -03:00
Werner Almesberger
337e5d227d atusb/fw/include/at86rf230.h: started updates for AT86RF231 2011-01-07 09:11:29 -03:00
Werner Almesberger
6a7b2de8b3 atusb/fw/atusb/Makefile: pass board version to cpp (when determining USB ID) 2010-12-29 20:42:06 -03:00
Werner Almesberger
d5f7820329 atusb/fw/common/config.h: corrected BOARD_xxx names in #if defined() 2010-12-19 21:19:16 -03:00
Werner Almesberger
ad2c72fa7f atusb: firmware update for the 2010-12-16 board series
- fw/Makefile: replaced "make" with $(MAKE) (just for style)
- common/Makefile.common: Makefile settings shared within project. For now,
  this contains only the board version, which defaults to 2010-12-16.
- fw/common/Makefile, fw/boot/Makefile, fw/atusb/Makefile: include
  common/Makefile.common
- fw/common/Makefile, fw/boot/Makefile, fw/atusb/Makefile: pass board
  version to cpp and gcc
- fw/atusb/atusb.c (init_io): individually set IRQ_RF to one, LED and TST
  to zero
- fw/atusb/atusb.c (init_io): added macros to set all unused pins to zero
  in a way that doesn't need updating if a signal moves from one pin to
  another
- include/atusb/ep0.h: added hardware type 1 (2010-12-16 design)
- common/config.h: set hardware type depending on board version
- common/io.h: assign pins depending on board version
2010-12-17 23:01:31 -03:00
Werner Almesberger
000c087789 fw/atusb/atusb.c: make the LED flash 1/4 the previous time in test mode
This is purely for esthetical reasons.
2010-11-11 21:40:03 -03:00
Werner Almesberger
d1953cd47f The Great ATSPI Renaming, part 10: more title comment fixes
- atusb/fw/boot/Makefile: still referred to the project as ATSPI (not ATRF)
  in title comment
- atusb/fw/include/atusb/usb-ids.h: still had old atspi path in title comment
2010-11-11 10:47:39 -03:00
Werner Almesberger
96b6a50b3a The Great ATSPI Renaming, part 2: rename ATSPI_* identifiers to ATUSB_*
- atusb/fw/include/atusb/ep0.h, atusb/fw/atusb/ep0.c: rename all ATSPI_*
  identifiers (EP0 commands, protocol revision, etc.) to ATUSB_*
- tools/lib/atusb.c, tools/atspi-id/atspi-id.c: track identifier change
2010-11-11 08:41:25 -03:00
Werner Almesberger
7e71f98007 The Great ATSPI Renaming, part 1: rename atusb firmware files from atspi to atusb
- atusb/fw/atspi/atspi.c: renamed to atusb/fw/atspi/atusb.c
- atusb/fw/atspi/Makefile: track above change
- atusb/fw/include/atspi/: renamed to atusb/fw/include/atusb/
- atusb/fw/common/config.h, atusb/fw/atspi/atspi.c, atusb/fw/atspi/descr.c,
  atusb/fw/atspi/ep0.c: track change of include location
- atusb/fw/atspi/: renamed to atusb
- atusb/fw/Makefile: track above change
- tools/atspi-id/atspi-id.c, tools/atspi-trim/atspi-trim.c,
  tools/lib/atusb.c: track change of include location
2010-11-11 08:26:01 -03:00
Werner Almesberger
2337557a8c atusd firmware now supports setting the TST pin.
- common/io.h: TST is connected to P0_7
- include/at86rf230.h: added test mode registers REG_CONT_TX_0 (0x36) and
  REG_CONT_TX_1 (0x3d), with their values
- atspi/atspi.c (set_test_mode): set or reset TST and the LED
- atspi/atspi.c (reset_rf): leave test mode
- atspi/atspi.c (test_mode): enter test mode
- atspi/atspi.c (main): flash the LED when in test mode
- include/atspi/ep0.h (enum atspi_requests), atspi/ep0.c (my_setup): new
  command ATSPI_TEST to enter test mode
- include/atspi/ep0.h (EP0ATSPI_MINOR): bumped protocol to version 0.1
- include/at86rf230.h: corrected comment before TRX_CMD field to indicate
  that the register is called TRX_STATE
2010-11-11 02:25:54 -03:00
Werner Almesberger
b493f09363 Great renaming: atrf/wpan-atrf* becomes atusb/atusb*
- atrf/: rename to atusb/
- atrf/wpan-atrf.pro, atrf/wpan-atrf.sch, atrf/wpan-atrf.brd,
  atrf/wpan-atrf.cmp: rename to atusb.*
- atrf/Makefile: change ben-wpan to atusb
- atrf/atusb.pro (LastNetListRead): update for name change
- tools/Makefile.common (CFLAGS): change fw/ include location from atrf/
  to atusb/
2010-10-25 00:10:00 -03:00