diff options
author | Dmitry Filimonchuk <dmitrystu@gmail.com> | 2021-09-18 05:16:32 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-18 05:16:32 +0300 |
commit | 48fc3516278cc2415ebf00bf249125eac92a196c (patch) | |
tree | e3ce19301c45cf3f1bb66650cc0620c144137d2d | |
parent | bacc89658b0a101d6b525444e42abd9a9e08e710 (diff) |
fix stm32F0 UID offset (#97)
* fix stm32F0 UID offset
issue #93
-rw-r--r-- | src/usbd_stm32l052_devfs.c | 18 | ||||
-rw-r--r-- | src/usbd_stm32l052_devfs_asm.S | 17 |
2 files changed, 29 insertions, 6 deletions
diff --git a/src/usbd_stm32l052_devfs.c b/src/usbd_stm32l052_devfs.c index 1b9e0eb..462471b 100644 --- a/src/usbd_stm32l052_devfs.c +++ b/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); diff --git a/src/usbd_stm32l052_devfs_asm.S b/src/usbd_stm32l052_devfs_asm.S index a5a0ab4..e6e3be8 100644 --- a/src/usbd_stm32l052_devfs_asm.S +++ b/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: |