Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/flipperdevices/libusb_stm32.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Filimonchuk <dmitrystu@gmail.com>2021-09-18 05:16:32 +0300
committerGitHub <noreply@github.com>2021-09-18 05:16:32 +0300
commit48fc3516278cc2415ebf00bf249125eac92a196c (patch)
treee3ce19301c45cf3f1bb66650cc0620c144137d2d
parentbacc89658b0a101d6b525444e42abd9a9e08e710 (diff)
fix stm32F0 UID offset (#97)
* fix stm32F0 UID offset issue #93
-rw-r--r--src/usbd_stm32l052_devfs.c18
-rw-r--r--src/usbd_stm32l052_devfs_asm.S17
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: