Преглед на файлове

fix stm32F0 UID offset (#97)

* fix stm32F0 UID offset

issue #93
Dmitry Filimonchuk преди 4 години
родител
ревизия
48fc351627
променени са 2 файла, в които са добавени 29 реда и са изтрити 6 реда
  1. 15 3
      src/usbd_stm32l052_devfs.c
  2. 14 3
      src/usbd_stm32l052_devfs_asm.S

+ 15 - 3
src/usbd_stm32l052_devfs.c

@@ -20,6 +20,18 @@
 
 #if defined(USBD_STM32L052)
 
+#if defined(STM32F070x6) || defined(STM32F070xB) || \
+    defined(STM32F042x6) || defined(STM32F048xx) || \
+    defined(STM32F072xB) || defined(STM32F078xx)
+    #define UID_OFFSET_0    0x00
+    #define UID_OFFSET_1    0x04
+    #define UID_OFFSET_2    0x08
+#else
+    #define UID_OFFSET_0    0x00
+    #define UID_OFFSET_1    0x04
+    #define UID_OFFSET_2    0x14
+#endif
+
 #ifndef USB_PMASIZE
     #pragma message "PMA memory size is not defined. Use 1k by default"
     #define USB_PMASIZE 0x400
@@ -440,9 +452,9 @@ static uint16_t get_serialno_desc(void *buffer) {
     struct  usb_string_descriptor *dsc = buffer;
     uint16_t *str = dsc->wString;
     uint32_t fnv = 2166136261;
-    fnv = fnv1a32_turn(fnv, *(uint32_t*)(UID_BASE + 0x00));
-    fnv = fnv1a32_turn(fnv, *(uint32_t*)(UID_BASE + 0x04));
-    fnv = fnv1a32_turn(fnv, *(uint32_t*)(UID_BASE + 0x14));
+    fnv = fnv1a32_turn(fnv, *(uint32_t*)(UID_BASE + UID_OFFSET_0));
+    fnv = fnv1a32_turn(fnv, *(uint32_t*)(UID_BASE + UID_OFFSET_1));
+    fnv = fnv1a32_turn(fnv, *(uint32_t*)(UID_BASE + UID_OFFSET_2));
     for (int i = 28; i >= 0; i -= 4 ) {
         uint16_t c = (fnv >> i) & 0x0F;
         c += (c < 10) ? '0' : ('A' - 10);

+ 14 - 3
src/usbd_stm32l052_devfs_asm.S

@@ -61,6 +61,17 @@
 #define RXADDR      0x04
 #define RXCOUNT     0x06
 
+#if defined(STM32F070x6) || defined(STM32F070xB) || \
+    defined(STM32F042x6) || defined(STM32F048xx) || \
+    defined(STM32F072xB) || defined(STM32F078xx)
+    #define UID_OFFSET_0    0x00
+    #define UID_OFFSET_1    0x04
+    #define UID_OFFSET_2    0x08
+#else
+    #define UID_OFFSET_0    0x00
+    #define UID_OFFSET_1    0x04
+    #define UID_OFFSET_2    0x14
+#endif
 
 #define EP_NOTOG    (EP_RX_CTR | EP_TX_CTR | EP_SETUP | EP_TYPE | EP_KIND | EP_ADDR)
 
@@ -114,11 +125,11 @@ _get_serial_desc:
     strb    r1,[r0, #0x01]
     ldr     r5, .L_uid_base     //UID3 this is the serial number
     ldr     r4, .L_fnv1a_offset //FNV1A offset
-    ldr     r2, [r5, 0x00]      //UID0
+    ldr     r2, [r5, UID_OFFSET_0]   //UID0
     bl      .L_fnv1a
-    ldr     r2, [r5, 0x04]      //UID1
+    ldr     r2, [r5, UID_OFFSET_1]   //UID1
     bl      .L_fnv1a
-    ldr     r2, [r5, 0x14]      //UID2
+    ldr     r2, [r5, UID_OFFSET_2]   //UID2
     bl      .L_fnv1a
     movs    r3, #28
 .L_gsn_loop: