From 975157c9d87d2277ddda6b10ebead836aead19f1 Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Thu, 9 Sep 2010 09:51:09 +0900 Subject: [PATCH] STM32 Primer 2 support. --- AUTHORS | 27 +++ ChangeLog | 9 + NEWS | 26 +++ boards/OLIMEX_STM32_H103/board.mk | 3 +- {src => boards/OLIMEX_STM32_H103}/hw_config.c | 11 +- {src => boards/OLIMEX_STM32_H103}/mcuconf.h | 0 boards/STM32_PRIMER2/board.c | 56 +++++++ boards/STM32_PRIMER2/board.h | 155 ++++++++++++++++++ boards/STM32_PRIMER2/board.mk | 6 + boards/STM32_PRIMER2/hw_config.c | 56 +++++++ boards/STM32_PRIMER2/mcuconf.h | 107 ++++++++++++ src/Makefile | 2 +- src/gnuk.h | 2 + src/main.c | 16 +- 14 files changed, 464 insertions(+), 12 deletions(-) create mode 100644 AUTHORS create mode 100644 NEWS rename {src => boards/OLIMEX_STM32_H103}/hw_config.c (85%) rename {src => boards/OLIMEX_STM32_H103}/mcuconf.h (100%) create mode 100644 boards/STM32_PRIMER2/board.c create mode 100644 boards/STM32_PRIMER2/board.h create mode 100644 boards/STM32_PRIMER2/board.mk create mode 100644 boards/STM32_PRIMER2/hw_config.c create mode 100644 boards/STM32_PRIMER2/mcuconf.h diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..4337719 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,27 @@ +Kaz Kojima: + Added STM32 Primer2 support: + boards/STM32_PRIMER2/board.c + boards/STM32_PRIMER2/board.h + boards/STM32_PRIMER2/board.mk + boards/STM32_PRIMER2/mcuconf.h + boards/STM32_PRIMER2/hw_config.c + +NIIBE Yutaka: wrote + src/ac.c + src/main.c + src/usb_lld.h + src/gnuk.h + src/usb_lld.c + src/usb-icc.c + src/openpgp-do.c + src/flash.c + src/debug.c + src/usb_desc.c + src/usb-cdc-vport.c + src/hardclock.c + src/openpgp.h + src/openpgp.c + src/call-rsa.c + src/random.c + * + and others. diff --git a/ChangeLog b/ChangeLog index a307ed9..c44fae1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2010-09-09 Kaz Kojima + + * boards/STM32_PRIMER2/{board.c,board.h,board.mk,hw_config.c,mcuconf.h}: + New files. + + * boards/OLIMEX_STM32_H103/{mcuconf.h,hw_config.c}: Moved from src. + + * src/main.c (main): Use set_led instead of palClearPad directly. + 2010-09-08 NIIBE Yutaka * src/ac.c (calc_md): Make SHA1 variable auto. diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..0f78dcc --- /dev/null +++ b/NEWS @@ -0,0 +1,26 @@ +Gnuk NEWS - User visible changes + +* Major changes in Gnuk 0.1 + + Released 2010-09-XX, by NIIBE Yutaka + +** New board support "STM32 Primer2" is added by Kaz Kojima. + +** Now, LED behavior is meaningful. "ON" during execution. + +** Fixed bcdCCID revision number. + +** Logo. + +** Decipher is supported. + + +* Major changes in Gnuk 0.0 + + Released 2010-09-06, by NIIBE Yutaka + +** This is initial release. Only it supports digital signing. + +Local Variables: +mode: outline +End: diff --git a/boards/OLIMEX_STM32_H103/board.mk b/boards/OLIMEX_STM32_H103/board.mk index 09b9505..c5f9dd4 100644 --- a/boards/OLIMEX_STM32_H103/board.mk +++ b/boards/OLIMEX_STM32_H103/board.mk @@ -1,5 +1,6 @@ # List of all the board related files. -BOARDSRC = ../boards/OLIMEX_STM32_H103/board.c +BOARDSRC = ../boards/OLIMEX_STM32_H103/board.c \ + ../boards/OLIMEX_STM32_H103/hw_config.c # Required include directories BOARDINC = ../boards/OLIMEX_STM32_H103 diff --git a/src/hw_config.c b/boards/OLIMEX_STM32_H103/hw_config.c similarity index 85% rename from src/hw_config.c rename to boards/OLIMEX_STM32_H103/hw_config.c index 8b762f9..61a4b26 100644 --- a/src/hw_config.c +++ b/boards/OLIMEX_STM32_H103/hw_config.c @@ -7,7 +7,7 @@ #include "ch.h" #include "hal.h" - +#include "board.h" #include "usb_lib.h" #include "usb_prop.h" #include "usb_desc.h" @@ -45,3 +45,12 @@ void Get_SerialNum (void) { } + +void +set_led (int value) +{ + if (value) + palClearPad (IOPORT3, GPIOC_LED); + else + palSetPad (IOPORT3, GPIOC_LED); +} diff --git a/src/mcuconf.h b/boards/OLIMEX_STM32_H103/mcuconf.h similarity index 100% rename from src/mcuconf.h rename to boards/OLIMEX_STM32_H103/mcuconf.h diff --git a/boards/STM32_PRIMER2/board.c b/boards/STM32_PRIMER2/board.c new file mode 100644 index 0000000..ae47ec9 --- /dev/null +++ b/boards/STM32_PRIMER2/board.c @@ -0,0 +1,56 @@ +/* + ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT 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 3 of the License, or + (at your option) any later version. + + ChibiOS/RT 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, see . + + --- + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes ChibiOS/RT, without being obliged to provide + the source code for any proprietary components. See the file exception.txt + for full details of how and when the exception can be applied. +*/ + +#include "ch.h" +#include "hal.h" + +/* + * Early initialization code. + * This initialization is performed just after reset before BSS and DATA + * segments initialization. + */ +void hwinit0(void) { + + stm32_clock_init(); +} + +/* + * Late initialization code. + * This initialization is performed after BSS and DATA segments initialization + * and before invoking the main() function. + */ +void hwinit1(void) { + + /* + * HAL initialization. + */ + halInit(); + + /* + * ChibiOS/RT initialization. + */ + chSysInit(); +} diff --git a/boards/STM32_PRIMER2/board.h b/boards/STM32_PRIMER2/board.h new file mode 100644 index 0000000..b295095 --- /dev/null +++ b/boards/STM32_PRIMER2/board.h @@ -0,0 +1,155 @@ +/* + ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT 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 3 of the License, or + (at your option) any later version. + + ChibiOS/RT 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, see . + + --- + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes ChibiOS/RT, without being obliged to provide + the source code for any proprietary components. See the file exception.txt + for full details of how and when the exception can be applied. +*/ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +/* + * Setup for the STM32 Primer2. + */ + +/* + * Board identifier. + */ +#define BOARD_STM32_PRIMER2 +#define BOARD_NAME "STM32 Primer2" + +/* + * Board frequencies. + */ +#define STM32_LSECLK 32768 +#define STM32_HSECLK 12000000 + +/* + * MCU type, this macro is used by both the ST library and the ChibiOS/RT + * native STM32 HAL. + */ +#define STM32F10X_MD + +/* + * IO pins assignments. + */ +#define GPIOA_BUTTON 8 +#define GPIOC_SHUTDOWN 13 +#define GPIOD_DISC 3 +#define GPIOE_LED 0 +#define GPIOE_LEDR 1 + +/* + * I/O ports initial setup, this configuration is established soon after reset + * in the initialization code. + * + * The digits have the following meaning: + * 0 - Analog input. + * 1 - Push Pull output 10MHz. + * 2 - Push Pull output 2MHz. + * 3 - Push Pull output 50MHz. + * 4 - Digital input. + * 5 - Open Drain output 10MHz. + * 6 - Open Drain output 2MHz. + * 7 - Open Drain output 50MHz. + * 8 - Digital input with PullUp or PullDown resistor depending on ODR. + * 9 - Alternate Push Pull output 10MHz. + * A - Alternate Push Pull output 2MHz. + * B - Alternate Push Pull output 50MHz. + * C - Reserved. + * D - Alternate Open Drain output 10MHz. + * E - Alternate Open Drain output 2MHz. + * F - Alternate Open Drain output 50MHz. + * Please refer to the STM32 Reference Manual for details. + */ + +/* + * Port A setup. + * Everything input with pull-up except: + * PA2 - Alternate output (USART2 TX). + * PA3 - Normal input (USART2 RX). + * PA8 - Input with pull-down (PBUTTON). + */ +#define VAL_GPIOACRL 0x88884B88 /* PA7...PA0 */ +#define VAL_GPIOACRH 0x88888888 /* PA15...PA8 */ +#define VAL_GPIOAODR 0xFFFFFEFF + +/* + * Port B setup. + * Everything input with pull-up except: + * PB13 - Alternate output (AUDIO SPI2 SCK). + * PB14 - Normal input (AUDIO SPI2 MISO). + * PB15 - Alternate output (AUDIO SPI2 MOSI). + */ +#define VAL_GPIOBCRL 0x88888888 /* PB7...PB0 */ +#define VAL_GPIOBCRH 0xB4B88888 /* PB15...PB8 */ +#define VAL_GPIOBODR 0xFFFFFFFF + +/* + * Port C setup. + * Everything input with pull-up except: + * PC6 - Normal input because there is an external resistor. + * PC7 - Normal input because there is an external resistor. + * PC13 - Push Pull output (SHUTDOWN) + */ +#define VAL_GPIOCCRL 0x44888888 /* PC7...PC0 */ +#define VAL_GPIOCCRH 0x88388888 /* PC15...PC8 */ +#define VAL_GPIOCODR 0xFFFFFFFF + +/* + * Port D setup. + * Everything input with pull-up except: + * PD3 - Push Pull output (USB_DISCONNECT) + */ +#define VAL_GPIODCRL 0x88883888 /* PD7...PD0 */ +#define VAL_GPIODCRH 0x88888888 /* PD15...PD8 */ +#define VAL_GPIODODR 0xFFFFFFFF + +/* + * Port E setup. + * Everything input with pull-up except: + * PE0 - Push Pull output (LED0). + * PD1 - Push Pull output (LED1). + */ +#define VAL_GPIOECRL 0x88888833 /* PE7...PE0 */ +#define VAL_GPIOECRH 0x88888888 /* PE15...PE8 */ +#define VAL_GPIOEODR 0xFFFFFFFF + +#if 0 +/* + * Port F setup. + * Everything input with pull-up except: + */ +#define VAL_GPIOFCRL 0x88888888 /* PF7...PF0 */ +#define VAL_GPIOFCRH 0x88888888 /* PF15...PF8 */ +#define VAL_GPIOFODR 0xFFFFFFFF + +/* + * Port G setup. + * Everything input with pull-up except: + */ +#define VAL_GPIOGCRL 0x88888888 /* PG7...PG0 */ +#define VAL_GPIOGCRH 0x88888888 /* PG15...PG8 */ +#define VAL_GPIOGODR 0xFFFFFFFF +#endif + +#endif /* _BOARD_H_ */ diff --git a/boards/STM32_PRIMER2/board.mk b/boards/STM32_PRIMER2/board.mk new file mode 100644 index 0000000..f8e6af1 --- /dev/null +++ b/boards/STM32_PRIMER2/board.mk @@ -0,0 +1,6 @@ +# List of all the board related files. +BOARDSRC = ../boards/STM32_PRIMER2/board.c \ + ../boards/STM32_PRIMER2/hw_config.c + +# Required include directories +BOARDINC = ../boards/STM32_PRIMER2 diff --git a/boards/STM32_PRIMER2/hw_config.c b/boards/STM32_PRIMER2/hw_config.c new file mode 100644 index 0000000..bc17937 --- /dev/null +++ b/boards/STM32_PRIMER2/hw_config.c @@ -0,0 +1,56 @@ +/* Hardware specific USB functions */ +/* + * For detail, please see the documentation of + * STM32F10x USB Full Speed Device Library (USB-FS-Device_Lib) + * by STMicroelectronics' MCD Application Team + */ + +#include "ch.h" +#include "hal.h" +#include "board.h" +#include "usb_lib.h" +#include "usb_prop.h" +#include "usb_desc.h" +#include "hw_config.h" +#include "platform_config.h" +#include "usb_pwr.h" + +void +Enter_LowPowerMode (void) +{ + bDeviceState = SUSPENDED; +} + +void +Leave_LowPowerMode (void) +{ + DEVICE_INFO *pInfo = &Device_Info; + + if (pInfo->Current_Configuration != 0) + bDeviceState = CONFIGURED; + else + bDeviceState = ATTACHED; +} + +void +USB_Cable_Config (FunctionalState NewState) +{ + if (NewState != DISABLE) + palClearPad (IOPORT4, GPIOC_DISC); + else + palSetPad (IOPORT4, GPIOC_DISC); +} + +void +Get_SerialNum (void) +{ +} + +void +set_led (int value) +{ + if (value) + palClearPad (IOPORT5, GPIOC_LEDR); + else + palSetPad (IOPORT5, GPIOC_LEDR); +} diff --git a/boards/STM32_PRIMER2/mcuconf.h b/boards/STM32_PRIMER2/mcuconf.h new file mode 100644 index 0000000..4db6cf6 --- /dev/null +++ b/boards/STM32_PRIMER2/mcuconf.h @@ -0,0 +1,107 @@ +/* + ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT 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 3 of the License, or + (at your option) any later version. + + ChibiOS/RT 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, see . + + --- + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes ChibiOS/RT, without being obliged to provide + the source code for any proprietary components. See the file exception.txt + for full details of how and when the exception can be applied. +*/ + +/* + * STM32 drivers configuration. + * The following settings override the default settings present in + * the various device driver implementation headers. + * Note that the settings for each driver only have effect if the driver + * is enabled in halconf.h. + * + * IRQ priorities: + * 15...0 Lowest...Highest. + * + * DMA priorities: + * 0...3 Lowest...Highest. + */ + +/* + * HAL driver system settings. + */ +#define STM32_SW STM32_SW_PLL +#define STM32_PLLSRC STM32_PLLSRC_HSE +#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV2 +#define STM32_PLLMUL_VALUE 12 +#define STM32_HPRE STM32_HPRE_DIV1 +#define STM32_PPRE1 STM32_PPRE1_DIV2 +#define STM32_PPRE2 STM32_PPRE2_DIV2 +#define STM32_ADCPRE STM32_ADCPRE_DIV4 +#define STM32_MCO STM32_MCO_NOCLOCK + +/* + * ADC driver system settings. + */ +#define USE_STM32_ADC1 TRUE +#define STM32_ADC1_DMA_PRIORITY 3 +#define STM32_ADC1_IRQ_PRIORITY 5 +#define STM32_ADC1_DMA_ERROR_HOOK() chSysHalt() + +/* + * CAN driver system settings. + */ +#define USE_STM32_CAN1 TRUE +#define STM32_CAN1_IRQ_PRIORITY 11 + +/* + * PWM driver system settings. + */ +#define USE_STM32_PWM1 TRUE +#define USE_STM32_PWM2 FALSE +#define USE_STM32_PWM3 FALSE +#define USE_STM32_PWM4 FALSE +#define STM32_PWM1_IRQ_PRIORITY 7 +#define STM32_PWM2_IRQ_PRIORITY 7 +#define STM32_PWM3_IRQ_PRIORITY 7 +#define STM32_PWM4_IRQ_PRIORITY 7 + +/* + * SERIAL driver system settings. + */ +#define USE_STM32_USART1 FALSE +#define USE_STM32_USART2 FALSE +#define USE_STM32_USART3 FALSE +#if defined(STM32F10X_HD) || defined(STM32F10X_CL) +#define USE_STM32_UART4 FALSE +#define USE_STM32_UART5 FALSE +#endif +#define STM32_USART1_PRIORITY 12 +#define STM32_USART2_PRIORITY 12 +#define STM32_USART3_PRIORITY 12 +#if defined(STM32F10X_HD) || defined(STM32F10X_CL) +#define STM32_UART4_PRIORITY 12 +#define STM32_UART5_PRIORITY 12 +#endif + +/* + * SPI driver system settings. + */ +#define USE_STM32_SPI1 TRUE +#define USE_STM32_SPI2 TRUE +#define STM32_SPI1_DMA_PRIORITY 2 +#define STM32_SPI2_DMA_PRIORITY 2 +#define STM32_SPI1_IRQ_PRIORITY 10 +#define STM32_SPI2_IRQ_PRIORITY 10 +#define STM32_SPI1_DMA_ERROR_HOOK() chSysHalt() diff --git a/src/Makefile b/src/Makefile index 885879c..8cec464 100644 --- a/src/Makefile +++ b/src/Makefile @@ -88,7 +88,7 @@ CSRC = $(PORTSRC) \ $(VCOMSRC) \ $(CRYPTSRC) \ main.c usb_lld.c \ - hw_config.c usb_desc.c usb_prop.c \ + usb_desc.c usb_prop.c \ usb-icc.c openpgp.c ac.c openpgp-do.c flash.c hardclock.c \ random.c diff --git a/src/gnuk.h b/src/gnuk.h index 4179396..0c84a7c 100644 --- a/src/gnuk.h +++ b/src/gnuk.h @@ -197,3 +197,5 @@ extern void random_bytes_free (const uint8_t *); extern uint32_t hardclock (void); extern void gpg_do_reset_pw_counter (uint8_t which); + +extern void set_led (int); diff --git a/src/main.c b/src/main.c index 766b88f..0e6cb03 100644 --- a/src/main.c +++ b/src/main.c @@ -23,13 +23,11 @@ #include "config.h" -#include "ch.h" -#include "hal.h" -#include "usb_lld.h" - -#include "gnuk.h" - #include "usb_lib.h" + +#include "ch.h" +#include "gnuk.h" +#include "usb_lld.h" #include "usb_istr.h" #include "usb_desc.h" #include "hw_config.h" @@ -213,13 +211,13 @@ main (int argc, char **argv) led_state = 0; if (led_state) - palClearPad (IOPORT3, GPIOC_LED); + set_led (1); else { if ((count & 1)) - palClearPad (IOPORT3, GPIOC_LED); + set_led (1); else - palSetPad (IOPORT3, GPIOC_LED); + set_led (0); } #ifdef DEBUG_MORE