From e1e00a4b67fbdbae339219b35aefd44a1bcf9486 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 8 Mar 2014 21:39:33 -0800 Subject: Add USB True Random Number Generator product Just basic device support Signed-off-by: Keith Packard --- src/usbtrng/Makefile | 70 +++++++++++++++++++++++++++++++++++++++ src/usbtrng/flash-loader/Makefile | 8 +++++ 2 files changed, 78 insertions(+) create mode 100644 src/usbtrng/Makefile create mode 100644 src/usbtrng/flash-loader/Makefile (limited to 'src/usbtrng') diff --git a/src/usbtrng/Makefile b/src/usbtrng/Makefile new file mode 100644 index 00000000..80e137e7 --- /dev/null +++ b/src/usbtrng/Makefile @@ -0,0 +1,70 @@ +# +# AltOS build +# +# + +include ../lpc/Makefile.defs + +INC = \ + ao.h \ + ao_arch.h \ + ao_arch_funcs.h \ + ao_pins.h \ + ao_product.h \ + lpc.h + +# +# Common AltOS sources +# +ALTOS_SRC = \ + ao_interrupt.c \ + ao_boot_chain.c \ + ao_romconfig.c \ + ao_product.c \ + ao_mutex.c \ + ao_panic.c \ + ao_stdio.c \ + ao_task.c \ + ao_cmd.c \ + ao_timer_lpc.c \ + ao_exti_lpc.c \ + ao_usb_lpc.c \ + ao_serial_lpc.c \ + ao_spi_lpc.c \ + ao_led_lpc.c + +PRODUCT=usbtrng-v0.1 +PRODUCT_DEF=-DUSBTRNG_V_0_1 +IDPRODUCT=0x0028 + +CFLAGS = $(PRODUCT_DEF) $(LPC_CFLAGS) -g -Os + +PROGNAME=usbtrng-v0.1 +PROG=$(PROGNAME)-$(VERSION).elf +HEX=$(PROGNAME)-$(VERSION).ihx + +SRC=$(ALTOS_SRC) ao_usbtrng.c +OBJ=$(SRC:.c=.o) + +all: $(PROG) $(HEX) + +$(PROG): Makefile $(OBJ) altos.ld + $(call quiet,CC) $(LDFLAGS) $(CFLAGS) -o $(PROG) $(OBJ) $(LIBS) + +ao_product.h: ao-make-product.5c ../Version + $(call quiet,NICKLE,$<) $< -m altusmetrum.org -i $(IDPRODUCT) -p $(PRODUCT) -v $(VERSION) > $@ + +$(OBJ): $(INC) + +load: $(PROG) + lpc-load $(PROG) + +distclean: clean + +clean: + rm -f *.o $(PROGNAME)-*.elf $(PROGNAME)-*.ihx + rm -f ao_product.h + +install: + +uninstall: diff --git a/src/usbtrng/flash-loader/Makefile b/src/usbtrng/flash-loader/Makefile new file mode 100644 index 00000000..e34f1089 --- /dev/null +++ b/src/usbtrng/flash-loader/Makefile @@ -0,0 +1,8 @@ +# +# AltOS flash loader build +# +# + +TOPDIR=../.. +HARDWARE=usbtrng-v0.1 +include $(TOPDIR)/lpc/Makefile-flash.defs -- cgit v1.2.3 From b5ac64bc0a6fd0fc23f39283e469c9820bdc88fe Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 9 Mar 2014 21:08:25 -0700 Subject: altos: Missing ao_pins files for usbtrng Signed-off-by: Keith Packard --- src/usbtrng/ao_pins.h | 74 ++++++++++++++++++++++++++++++++++++++ src/usbtrng/flash-loader/ao_pins.h | 33 +++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 src/usbtrng/ao_pins.h create mode 100644 src/usbtrng/flash-loader/ao_pins.h (limited to 'src/usbtrng') diff --git a/src/usbtrng/ao_pins.h b/src/usbtrng/ao_pins.h new file mode 100644 index 00000000..9c8fa831 --- /dev/null +++ b/src/usbtrng/ao_pins.h @@ -0,0 +1,74 @@ +/* + * Copyright © 2013 Keith Packard + * + * 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; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#define HAS_BEEP 0 +#define HAS_LED 1 + +#define AO_STACK_SIZE 384 + +#define IS_FLASH_LOADER 0 + +/* Crystal on the board */ +#define AO_LPC_CLKIN 12000000 + +/* Main clock frequency. 48MHz for USB so we don't use the USB PLL */ +#define AO_LPC_CLKOUT 48000000 + +/* System clock frequency */ +#define AO_LPC_SYSCLK 24000000 + +#define HAS_USB 1 + +#define HAS_USB_CONNECT 0 +#define HAS_USB_VBUS 0 +#define HAS_USB_PULLUP 1 +#define AO_USB_PULLUP_PORT 0 +#define AO_USB_PULLUP_PIN 6 + +/* USART */ + +#define HAS_SERIAL 1 +#define USE_SERIAL_0_STDIN 0 +#define SERIAL_0_18_19 1 +#define SERIAL_0_14_15 0 +#define SERIAL_0_17_18 0 +#define SERIAL_0_26_27 0 + +/* SPI */ + +#define HAS_SPI_0 0 +#define SPI_SCK0_P0_6 0 +#define HAS_SPI_1 1 +#define SPI_SCK1_P1_15 0 +#define SPI_MISO1_P0_22 1 +#define SPI_MOSI1_P0_21 0 + +/* LED */ + +#define LED_PORT 0 +#define LED_PIN_RED 3 +#define LED_PIN_GREEN 21 +#define AO_LED_RED (1 << LED_PIN_RED) +#define AO_LED_GREEN (1 << LED_PIN_GREEN) + +#define LEDS_AVAILABLE (AO_LED_RED|AO_LED_GREEN) + +/* Kludge the SPI driver to not configure any + * pin for SCK or MOSI + */ +#define HAS_SCK1 0 +#define HAS_MOSI1 0 diff --git a/src/usbtrng/flash-loader/ao_pins.h b/src/usbtrng/flash-loader/ao_pins.h new file mode 100644 index 00000000..a8046009 --- /dev/null +++ b/src/usbtrng/flash-loader/ao_pins.h @@ -0,0 +1,33 @@ +/* + * Copyright © 2013 Keith Packard + * + * 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; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#ifndef _AO_PINS_H_ +#define _AO_PINS_H_ + +#include + +#define AO_BOOT_PIN 1 +#define AO_BOOT_APPLICATION_GPIO 0 +#define AO_BOOT_APPLICATION_PIN 19 +#define AO_BOOT_APPLICATION_VALUE 1 +#define AO_BOOT_APPLICATION_MODE AO_EXTI_MODE_PULL_UP + +#define HAS_USB_PULLUP 1 +#define AO_USB_PULLUP_PORT 0 +#define AO_USB_PULLUP_PIN 6 + +#endif /* _AO_PINS_H_ */ -- cgit v1.2.3 From 3b50e50fb814a572f7b4ea9e268a1ae150fe678c Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 9 Mar 2014 21:10:10 -0700 Subject: altos: Another missing usbtrng file --- src/usbtrng/ao_usbtrng.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/usbtrng/ao_usbtrng.c (limited to 'src/usbtrng') diff --git a/src/usbtrng/ao_usbtrng.c b/src/usbtrng/ao_usbtrng.c new file mode 100644 index 00000000..6b4d20fe --- /dev/null +++ b/src/usbtrng/ao_usbtrng.c @@ -0,0 +1,63 @@ +/* + * Copyright © 2014 Keith Packard + * + * 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; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#include + +#define AO_TRNG_SPI_BUS 1 +#define AO_TRNG_SPI_SPEED AO_SPI_SPEED_250kHz + +static void +ao_trng_test(void) +{ + static uint8_t random[32]; + uint8_t i; + + ao_spi_get(AO_TRNG_SPI_BUS, AO_TRNG_SPI_SPEED); + ao_spi_recv(random, sizeof (random), AO_TRNG_SPI_BUS); + ao_spi_put(AO_TRNG_SPI_BUS); + for (i = 0; i < sizeof (random); i++) + printf (" %02x", random[i]); + printf ("\n"); +} + +static const struct ao_cmds ao_trng_cmds[] = { + { ao_trng_test, "R\0Dump some random numbers" }, + { 0, NULL } +}; + +void +main(void) +{ + ao_clock_init(); + ao_task_init(); + ao_timer_init(); + + ao_spi_init(); + ao_usb_init(); + + ao_serial_init(); + + ao_led_init(LEDS_AVAILABLE); + + ao_led_on(AO_LED_GREEN); + + ao_cmd_init(); + + ao_cmd_register(ao_trng_cmds); + + ao_start_scheduler(); +} -- cgit v1.2.3 From ff4deb417a460d96645fb6934890c2c195142be3 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 28 Mar 2014 23:33:25 -0700 Subject: altos: HAS_LED is useless; remove it ao_flight was trying to decide whether to turn off the red LED by checking whether HAS_LED was defined. And yet, none of the flight firmware defines that anymore, except for easymini which defines it to zero. Remove all uses and defines of this value, substituting AO_LED_RED in ao_flight.c, which has to be defined for the ao_led_off call to work. Signed-off-by: Keith Packard --- src/core/ao_flight.c | 4 ++-- src/easymini-v1.0/ao_pins.h | 1 - src/lpcxpresso/ao_pins.h | 1 - src/usbtrng/ao_pins.h | 1 - 4 files changed, 2 insertions(+), 5 deletions(-) (limited to 'src/usbtrng') diff --git a/src/core/ao_flight.c b/src/core/ao_flight.c index 702c3403..24099347 100644 --- a/src/core/ao_flight.c +++ b/src/core/ao_flight.c @@ -143,7 +143,7 @@ ao_flight(void) ao_rdf_set(1); ao_telemetry_set_interval(AO_TELEMETRY_INTERVAL_PAD); #endif -#if HAS_LED +#if AO_LED_RED /* signal successful initialization by turning off the LED */ ao_led_off(AO_LED_RED); #endif @@ -160,7 +160,7 @@ ao_flight(void) ao_packet_slave_start(); #endif -#if HAS_LED +#if AO_LED_RED /* signal successful initialization by turning off the LED */ ao_led_off(AO_LED_RED); #endif diff --git a/src/easymini-v1.0/ao_pins.h b/src/easymini-v1.0/ao_pins.h index e721030d..6757047f 100644 --- a/src/easymini-v1.0/ao_pins.h +++ b/src/easymini-v1.0/ao_pins.h @@ -16,7 +16,6 @@ */ #define HAS_BEEP 1 -#define HAS_LED 0 #define AO_STACK_SIZE 384 diff --git a/src/lpcxpresso/ao_pins.h b/src/lpcxpresso/ao_pins.h index c0074ce2..0ffc2fad 100644 --- a/src/lpcxpresso/ao_pins.h +++ b/src/lpcxpresso/ao_pins.h @@ -16,7 +16,6 @@ */ #define HAS_BEEP 0 -#define HAS_LED 1 /* Crystal on the board */ #define AO_LPC_CLKIN 12000000 diff --git a/src/usbtrng/ao_pins.h b/src/usbtrng/ao_pins.h index 9c8fa831..b1fa6eb9 100644 --- a/src/usbtrng/ao_pins.h +++ b/src/usbtrng/ao_pins.h @@ -16,7 +16,6 @@ */ #define HAS_BEEP 0 -#define HAS_LED 1 #define AO_STACK_SIZE 384 -- cgit v1.2.3