support non-default STBee Mini
authorNIIBE Yutaka <gniibe@fsij.org>
Thu, 27 Sep 2012 05:37:09 +0000 (14:37 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Thu, 27 Sep 2012 05:37:09 +0000 (14:37 +0900)
ChangeLog
boards/STBEE_MINI/board.h
boards/STBEE_MINI/mcuconf.h
src/random.c

index a1333be..6216ce2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2012-09-27  Niibe Yutaka  <gniibe@fsij.org>
 
+       * boards/STBEE_MINI/board.h (NEUG_NON_DEFAULT_ADC_CHANNEL): New.
+       (VAL_GPIOACRL): Use PA1 and PA2 for NeuG's analog input.
+       (VAL_GPIOCCRL): Revert previous change.
+       * boards/STBEE_MINI/mcuconf.h (STM32_PPRE2, STM32_ADCPRE): Revert.
+
        * src/main.c (RANDOM_BYTES_LENGTH): 32 is best for SHA-256
        construct.
 
index a51371b..ed6a8b1 100644 (file)
 #define IOPORT_USB     GPIOA
 #define GPIO_LED       GPIOA_LED1
 #define IOPORT_LED     GPIOA
+#define NEUG_NON_DEFAULT_ADC_CHANNEL 1
+#define ADC_SMPR2_SMP_ANx_A ADC_SMPR2_SMP_AN1
+#define ADC_SMPR2_SMP_ANx_B ADC_SMPR2_SMP_AN2
+#define NEUG_ADC_CHANNEL_A ADC_CHANNEL_IN1
+#define NEUG_ADC_CHANNEL_B ADC_CHANNEL_IN2
 
 /*
  * Board identifier.
@@ -91,6 +96,8 @@
 
 /*
  * Port A setup.
+ * PA1  - Push Pull output 50MHz.
+ * PA2  - Push Pull output 50MHz.
  * PA11 - input with pull-up (USBDM)
  * PA12 - input with pull-up (USBDP)
  * Everything input with pull-up except:
  * PA14 - Push pull output  (USB ENABLE 0:DISABLE 1:ENABLE)
  * PA15 - Open Drain output (LED2 0:ON 1:OFF)
  */
-#define VAL_GPIOACRL            0x88888888      /*  PA7...PA0 */
+#define VAL_GPIOACRL            0x88888338      /*  PA7...PA0 */
 #define VAL_GPIOACRH            0x63688888      /* PA15...PA8 */
 #define VAL_GPIOAODR            0xFFFFFFFF
 
 
 /*
  * Port C setup.
- * PC0  - Push Pull output 50MHz.
- * PC1  - Push Pull output 50MHz.
  * Everything input with pull-up except:
  * PC13 - Normal input.
  * PC14 - Normal input.
  * PC15 - Normal input.
  */
-#define VAL_GPIOCCRL            0x88888833      /*  PC7...PC0 */
+#define VAL_GPIOCCRL            0x88888888      /*  PC7...PC0 */
 #define VAL_GPIOCCRH            0x44488888      /* PC15...PC8 */
 #define VAL_GPIOCODR            0xFFFFFFFF
 
index 2d97a43..aafe950 100644 (file)
@@ -7,8 +7,12 @@
 #define STM32_PLLMUL_VALUE          6
 #define STM32_HPRE                  STM32_HPRE_DIV1
 #define STM32_PPRE1                 STM32_PPRE1_DIV2
-#define STM32_PPRE2                 STM32_PPRE2_DIV1
-#define STM32_ADCPRE                STM32_ADCPRE_DIV6
+/*
+ * Don't know the reason, but ADC doesn't work well with 12MHz clock.
+ * So, it is configured as 9MHz
+ */
+#define STM32_PPRE2                 STM32_PPRE2_DIV2
+#define STM32_ADCPRE                STM32_ADCPRE_DIV4
 #define STM32_USBPRE                STM32_USBPRE_DIV1P5
 #define STM32_MCO                   STM32_MCO_NOCLOCK
 
index 0dad9fd..48b0720 100644 (file)
@@ -52,11 +52,20 @@ static void adc2_start (void)
 
   ADC2->CR1 = ADC_CR1_DUALMOD_2 | ADC_CR1_DUALMOD_1 | ADC_CR1_DUALMOD_0;
   ADC2->CR2 = ADC_CR2_DMA | ADC_CR2_CONT | ADC_CR2_ADON;
+#ifdef NEUG_NON_DEFAULT_ADC_CHANNEL
+  ADC2->SMPR1 = 0;
+  ADC2->SMPR2 = ADC_SMPR2_SMP_ANx_B(ADC_SAMPLE_1P5);
+#else
   ADC2->SMPR1 = ADC_SMPR1_SMP_AN11(ADC_SAMPLE_1P5);
   ADC2->SMPR2 = 0;
+#endif
   ADC2->SQR1 = ADC_SQR1_NUM_CH(ADC_GRP1_NUM_CHANNELS);
   ADC2->SQR2 = 0;
+#ifdef NEUG_NON_DEFAULT_ADC_CHANNEL
+  ADC2->SQR3 = ADC_SQR3_SQ1_N(NEUG_ADC_CHANNEL_B);
+#else
   ADC2->SQR3 = ADC_SQR3_SQ1_N(ADC_CHANNEL_IN11);
+#endif
 
   ADC2->CR2 |= ADC_CR2_EXTTRIG | ADC_CR2_SWSTART;
 }
@@ -92,11 +101,20 @@ static const ADCConversionGroup adcgrpcfg = {
   adccb_err,
   ADC_CR1_DUALMOD_2 | ADC_CR1_DUALMOD_1 | ADC_CR1_DUALMOD_0,
   ADC_CR2_EXTTRIG | ADC_CR2_SWSTART | ADC_CR2_EXTSEL,
+#ifdef NEUG_NON_DEFAULT_ADC_CHANNEL
+  0,
+  ADC_SMPR2_SMP_ANx_A(ADC_SAMPLE_1P5),
+#else
   ADC_SMPR1_SMP_AN10(ADC_SAMPLE_1P5),
   0,
+#endif
   ADC_SQR1_NUM_CH(ADC_GRP1_NUM_CHANNELS),
   0,
+#if NEUG_NON_DEFAULT_ADC_CHANNEL
+  ADC_SQR3_SQ1_N(NEUG_ADC_CHANNEL_A)
+#else
   ADC_SQR3_SQ1_N(ADC_CHANNEL_IN10)
+#endif
 };
 
 /*
@@ -161,7 +179,7 @@ static uint32_t sha256_output[SHA256_DIGEST_SIZE/sizeof (uint32_t)];
 #define EP_ROUND_0_INPUTS 59
 #define EP_ROUND_1_INPUTS 64
 #define EP_ROUND_2_INPUTS 16
-#define EP_ROUND_RAW_INPUTS 32
+#define EP_ROUND_RAW_INPUTS 64
 
 static uint8_t ep_round;
 
@@ -311,12 +329,17 @@ static void noise_source_error_reset (void)
 static void noise_source_error (uint32_t err)
 {
   neug_err_state |= err;
+
+#include "board.h"
+#if defined(BOARD_STBEE_MINI)
+  palClearPad (IOPORT1, GPIOA_LED2);
+#endif
 }
 
 
-/* Cuttoff = 9, when min-entropy = 4.0, W= 2^-30 */
-/* ceiling of (1+30/4.0) */
-#define REPITITION_COUNT_TEST_CUTOFF 9
+/* Cuttoff = 10, when min-entropy = 3.7, W= 2^-30 */
+/* ceiling of (1+30/3.7) */
+#define REPITITION_COUNT_TEST_CUTOFF 10
 
 static uint8_t rct_a;
 static uint8_t rct_b;
@@ -336,9 +359,9 @@ static void repetition_count_test (uint8_t sample)
     }
 }
 
-/* Cuttoff = 20, when min-entropy = 4.0, W= 2^-30 */
-/* With R, qbinom(1-2^-30,64,2^-4.0) */
-#define ADAPTIVE_PROPORTION_64_TEST_CUTOFF 20
+/* Cuttoff = 22, when min-entropy = 3.7, W= 2^-30 */
+/* With R, qbinom(1-2^-30,64,2^-3.7) */
+#define ADAPTIVE_PROPORTION_64_TEST_CUTOFF 22
 
 static uint8_t ap64t_a;
 static uint8_t ap64t_b;
@@ -364,9 +387,9 @@ static void adaptive_proportion_64_test (uint8_t sample)
     }
 }
 
-/* Cuttoff = 354, when min-entropy = 4.0, W= 2^-30 */
-/* With R, qbinom(1-2^-30,4096,2^-4.0) */
-#define ADAPTIVE_PROPORTION_4096_TEST_CUTOFF 354
+/* Cuttoff = 422, when min-entropy = 3.7, W= 2^-30 */
+/* With R, qbinom(1-2^-30,4096,2^-3.7) */
+#define ADAPTIVE_PROPORTION_4096_TEST_CUTOFF 422
 
 static uint8_t ap4096t_a;
 static uint16_t ap4096t_b;