From f5a068eab6fffa3d80c205d07866257a50970e44 Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Thu, 6 Apr 2023 18:25:26 +0200 Subject: [PATCH] Split USBRAM from USB, add 32bit USBRAM support, fix some sizes/versions. --- .../registers/{usb_v1_x1.yaml => usb_v1.yaml} | 7 - data/registers/usb_v1_x2.yaml | 264 ------------------ data/registers/usb_v2.yaml | 7 - data/registers/usb_v3.yaml | 7 - data/registers/usb_v4.yaml | 7 - data/registers/usbram_16x1_512.yaml | 11 + data/registers/usbram_16x2_1024.yaml | 11 + data/registers/usbram_16x2_512.yaml | 11 + data/registers/usbram_32_2048.yaml | 11 + stm32-data-gen/src/chips.rs | 22 +- stm32-data-gen/src/header.rs | 4 + 11 files changed, 61 insertions(+), 301 deletions(-) rename data/registers/{usb_v1_x1.yaml => usb_v1.yaml} (98%) delete mode 100644 data/registers/usb_v1_x2.yaml create mode 100644 data/registers/usbram_16x1_512.yaml create mode 100644 data/registers/usbram_16x2_1024.yaml create mode 100644 data/registers/usbram_16x2_512.yaml create mode 100644 data/registers/usbram_32_2048.yaml diff --git a/data/registers/usb_v1_x1.yaml b/data/registers/usb_v1.yaml similarity index 98% rename from data/registers/usb_v1_x1.yaml rename to data/registers/usb_v1.yaml index f04c814..e885e7d 100644 --- a/data/registers/usb_v1_x1.yaml +++ b/data/registers/usb_v1.yaml @@ -30,13 +30,6 @@ block/USB: description: Buffer table address byte_offset: 80 fieldset: BTABLE - - name: EP_MEM - description: USB Endpoint memory - array: - len: 512 - stride: 4 - byte_offset: 1024 - bit_size: 16 fieldset/BTABLE: description: Buffer table address fields: diff --git a/data/registers/usb_v1_x2.yaml b/data/registers/usb_v1_x2.yaml deleted file mode 100644 index 1e9bc3f..0000000 --- a/data/registers/usb_v1_x2.yaml +++ /dev/null @@ -1,264 +0,0 @@ ---- -block/USB: - description: Universal serial bus full-speed device interface - items: - - name: EPR - description: endpoint register - array: - len: 8 - stride: 4 - byte_offset: 0 - fieldset: EPR - - name: CNTR - description: control register - byte_offset: 64 - fieldset: CNTR - - name: ISTR - description: interrupt status register - byte_offset: 68 - fieldset: ISTR - - name: FNR - description: frame number register - byte_offset: 72 - access: Read - fieldset: FNR - - name: DADDR - description: device address - byte_offset: 76 - fieldset: DADDR - - name: BTABLE - description: Buffer table address - byte_offset: 80 - fieldset: BTABLE - - name: EP_MEM - description: USB Endpoint memory - array: - len: 512 - stride: 2 - byte_offset: 1024 - bit_size: 16 -fieldset/BTABLE: - description: Buffer table address - fields: - - name: BTABLE - description: BTABLE - bit_offset: 3 - bit_size: 13 -fieldset/CNTR: - description: control register - fields: - - name: FRES - description: "Force a reset of the USB peripheral, exactly like a RESET signaling on the USB" - bit_offset: 0 - bit_size: 1 - - name: PDWN - description: Enter power down mode - bit_offset: 1 - bit_size: 1 - - name: LPMODE - description: Enter low-power mode - bit_offset: 2 - bit_size: 1 - - name: FSUSP - description: Enter suspend mode. Clocks and static power dissipation in the analog transceiver are left unaffected - bit_offset: 3 - bit_size: 1 - - name: RESUME - description: Resume request - bit_offset: 4 - bit_size: 1 - - name: ESOFM - description: "ESOF Interrupt enabled, an interrupt request is generated when the corresponding bit in the USB_ISTR register is set" - bit_offset: 8 - bit_size: 1 - - name: SOFM - description: "SOF Interrupt enabled, an interrupt request is generated when the corresponding bit in the USB_ISTR register is set" - bit_offset: 9 - bit_size: 1 - - name: RESETM - description: "RESET Interrupt enabled, an interrupt request is generated when the corresponding bit in the USB_ISTR register is set" - bit_offset: 10 - bit_size: 1 - - name: SUSPM - description: "SUSP Interrupt enabled, an interrupt request is generated when the corresponding bit in the USB_ISTR register is set" - bit_offset: 11 - bit_size: 1 - - name: WKUPM - description: "WKUP Interrupt enabled, an interrupt request is generated when the corresponding bit in the USB_ISTR register is set" - bit_offset: 12 - bit_size: 1 - - name: ERRM - description: "ERR Interrupt enabled, an interrupt request is generated when the corresponding bit in the USB_ISTR register is set" - bit_offset: 13 - bit_size: 1 - - name: PMAOVRM - description: "PMAOVR Interrupt enabled, an interrupt request is generated when the corresponding bit in the USB_ISTR register is set" - bit_offset: 14 - bit_size: 1 - - name: CTRM - description: "CTR Interrupt enabled, an interrupt request is generated when the corresponding bit in the USB_ISTR register is set" - bit_offset: 15 - bit_size: 1 -fieldset/DADDR: - description: device address - fields: - - name: ADD - description: device address - bit_offset: 0 - bit_size: 7 - - name: EF - description: USB device enabled - bit_offset: 7 - bit_size: 1 -fieldset/EPR: - description: endpoint register - fields: - - name: EA - description: EA - bit_offset: 0 - bit_size: 4 - - name: STAT_TX - description: STAT_TX - bit_offset: 4 - bit_size: 2 - enum: STAT - - name: DTOG_TX - description: DTOG_TX - bit_offset: 6 - bit_size: 1 - - name: CTR_TX - description: CTR_TX - bit_offset: 7 - bit_size: 1 - - name: EP_KIND - description: EP_KIND - bit_offset: 8 - bit_size: 1 - - name: EP_TYPE - description: EPTYPE - bit_offset: 9 - bit_size: 2 - enum: EP_TYPE - - name: SETUP - description: SETUP - bit_offset: 11 - bit_size: 1 - - name: STAT_RX - description: STAT_RX - bit_offset: 12 - bit_size: 2 - enum: STAT - - name: DTOG_RX - description: DTOG_RX - bit_offset: 14 - bit_size: 1 - - name: CTR_RX - description: CTR_RX - bit_offset: 15 - bit_size: 1 -fieldset/FNR: - description: frame number register - fields: - - name: FN - description: FN - bit_offset: 0 - bit_size: 11 - - name: LSOF - description: LSOF - bit_offset: 11 - bit_size: 2 - - name: LCK - description: the frame timer remains in this state until an USB reset or USB suspend event occurs - bit_offset: 13 - bit_size: 1 - - name: RXDM - description: received data minus upstream port data line - bit_offset: 14 - bit_size: 1 - - name: RXDP - description: received data plus upstream port data line - bit_offset: 15 - bit_size: 1 -fieldset/ISTR: - description: interrupt status register - fields: - - name: EP_ID - description: EP_ID - bit_offset: 0 - bit_size: 4 - - name: DIR - description: DIR - bit_offset: 4 - bit_size: 1 - enum: DIR - - name: ESOF - description: an SOF packet is expected but not received - bit_offset: 8 - bit_size: 1 - - name: SOF - description: beginning of a new USB frame and it is set when a SOF packet arrives through the USB bus - bit_offset: 9 - bit_size: 1 - - name: RESET - description: peripheral detects an active USB RESET signal at its inputs - bit_offset: 10 - bit_size: 1 - - name: SUSP - description: "no traffic has been received for 3 ms, indicating a suspend mode request from the USB bus" - bit_offset: 11 - bit_size: 1 - - name: WKUP - description: activity is detected that wakes up the USB peripheral - bit_offset: 12 - bit_size: 1 - - name: ERR - description: "One of No ANSwer, Cyclic Redundancy Check, Bit Stuffing or Framing format Violation error occurred" - bit_offset: 13 - bit_size: 1 - - name: PMAOVR - description: microcontroller has not been able to respond in time to an USB memory request - bit_offset: 14 - bit_size: 1 - - name: CTR - description: endpoint has successfully completed a transaction - bit_offset: 15 - bit_size: 1 -enum/DIR: - bit_size: 1 - variants: - - name: To - description: data transmitted by the USB peripheral to the host PC - value: 0 - - name: From - description: data received by the USB peripheral from the host PC - value: 1 -enum/EP_TYPE: - bit_size: 2 - variants: - - name: Bulk - description: Bulk endpoint - value: 0 - - name: Control - description: Control endpoint - value: 1 - - name: Iso - description: Iso endpoint - value: 2 - - name: Interrupt - description: Interrupt endpoint - value: 3 -enum/STAT: - bit_size: 2 - variants: - - name: Disabled - description: all requests addressed to this endpoint are ignored - value: 0 - - name: Stall - description: the endpoint is stalled and all requests result in a STALL handshake - value: 1 - - name: Nak - description: the endpoint is naked and all requests result in a NAK handshake - value: 2 - - name: Valid - description: "this endpoint is enabled, requests are ACKed" - value: 3 diff --git a/data/registers/usb_v2.yaml b/data/registers/usb_v2.yaml index b6bd8a9..70c6954 100644 --- a/data/registers/usb_v2.yaml +++ b/data/registers/usb_v2.yaml @@ -34,13 +34,6 @@ block/USB: description: LPM control and status register byte_offset: 84 fieldset: LPMCSR - - name: EP_MEM - description: USB Endpoint memory - array: - len: 1024 - stride: 2 - byte_offset: 1024 - bit_size: 16 fieldset/BTABLE: description: Buffer table address fields: diff --git a/data/registers/usb_v3.yaml b/data/registers/usb_v3.yaml index 4cc08b4..21900e9 100644 --- a/data/registers/usb_v3.yaml +++ b/data/registers/usb_v3.yaml @@ -38,13 +38,6 @@ block/USB: description: Battery Charging Detector byte_offset: 88 fieldset: BCDR - - name: EP_MEM - description: USB Endpoint memory - array: - len: 1024 - stride: 2 - byte_offset: 1024 - bit_size: 16 fieldset/BCDR: description: Battery Charging Detector fields: diff --git a/data/registers/usb_v4.yaml b/data/registers/usb_v4.yaml index 5793557..da2a5ce 100644 --- a/data/registers/usb_v4.yaml +++ b/data/registers/usb_v4.yaml @@ -34,13 +34,6 @@ block/USB: description: Battery charging detector byte_offset: 88 fieldset: BCDR - - name: EP_MEM - description: Endpoint memory - array: - len: 1024 - stride: 2 - byte_offset: 15360 - bit_size: 16 fieldset/BCDR: description: Battery charging detector fields: diff --git a/data/registers/usbram_16x1_512.yaml b/data/registers/usbram_16x1_512.yaml new file mode 100644 index 0000000..335220b --- /dev/null +++ b/data/registers/usbram_16x1_512.yaml @@ -0,0 +1,11 @@ +--- +block/USBRAM: + description: USB Endpoint memory + items: + - name: MEM + description: USB Endpoint memory + array: + len: 256 + stride: 4 + byte_offset: 0 + bit_size: 16 diff --git a/data/registers/usbram_16x2_1024.yaml b/data/registers/usbram_16x2_1024.yaml new file mode 100644 index 0000000..9941e63 --- /dev/null +++ b/data/registers/usbram_16x2_1024.yaml @@ -0,0 +1,11 @@ +--- +block/USBRAM: + description: USB Endpoint memory + items: + - name: MEM + description: USB Endpoint memory + array: + len: 512 + stride: 2 + byte_offset: 0 + bit_size: 16 diff --git a/data/registers/usbram_16x2_512.yaml b/data/registers/usbram_16x2_512.yaml new file mode 100644 index 0000000..67051cd --- /dev/null +++ b/data/registers/usbram_16x2_512.yaml @@ -0,0 +1,11 @@ +--- +block/USBRAM: + description: USB Endpoint memory + items: + - name: MEM + description: USB Endpoint memory + array: + len: 256 + stride: 2 + byte_offset: 0 + bit_size: 16 diff --git a/data/registers/usbram_32_2048.yaml b/data/registers/usbram_32_2048.yaml new file mode 100644 index 0000000..f74302e --- /dev/null +++ b/data/registers/usbram_32_2048.yaml @@ -0,0 +1,11 @@ +--- +block/USBRAM: + description: USB Endpoint memory + items: + - name: MEM + description: USB Endpoint memory + array: + len: 512 + stride: 4 + byte_offset: 0 + bit_size: 32 diff --git a/stm32-data-gen/src/chips.rs b/stm32-data-gen/src/chips.rs index 6b03e78..ddb291c 100644 --- a/stm32-data-gen/src/chips.rs +++ b/stm32-data-gen/src/chips.rs @@ -218,14 +218,18 @@ impl PeriMatcher { (".*:SDMMC:sdmmc_v1_3", ("sdmmc", "v1", "SDMMC")), (".*:SPDIFRX:spdifrx1_v1_0", ("spdifrx", "v1", "SPDIFRX")), // # USB - ("STM32F302.[BC].*:USB:.*", ("usb", "v1_x1", "USB")), - ("STM32F302.[68DE].*:USB:.*", ("usb", "v2", "USB")), - ("STM32F303.[BC].*:USB:.*", ("usb", "v1_x1", "USB")), - ("STM32F303.[DE].*:USB:.*", ("usb", "v2", "USB")), - ("STM32F373.*:USB:.*", ("usb", "v1_x2", "USB")), - ("STM32(F1|L1).*:USB:.*", ("usb", "v1_x1", "USB")), - ("STM32G0[BC]1.*:USB:.*", ("usb", "v4", "USB")), - (".*:USB:.*", ("usb", "v3", "USB")), + ("STM32(F1|L1).*:USB:.*", ("usb", "v1", "USB")), + ("STM32(F1|L1).*:USBRAM:.*", ("usbram", "16x1_512", "USBRAM")), + ("STM32F30[23].[BC].*:USB:.*", ("usb", "v1", "USB")), + ("STM32F30[23].[BC].*:USBRAM:.*", ("usbram", "16x1_512", "USBRAM")), + ("STM32F30[23].[68DE].*:USB:.*", ("usb", "v2", "USB")), + ("STM32F30[23].[68DE].*:USBRAM:.*", ("usbram", "16x2_1024", "USBRAM")), + ("STM32F373.*:USB:.*", ("usb", "v1", "USB")), + ("STM32F373.*:USBRAM:.*", ("usbram", "16x2_512", "USBRAM")), + ("STM32(F0|L[045]|G4|WB).*:USB:.*", ("usb", "v3", "USB")), + ("STM32(F0|L[045]|G4|WB).*:USBRAM:.*", ("usbram", "16x2_1024", "USBRAM")), + ("STM32(G0|H5|U5).*:USB:.*", ("usb", "v4", "USB")), + ("STM32(G0|H5|U5).*:USBRAM:.*", ("usbram", "32_2048", "USBRAM")), // # USB OTG (".*:USB_OTG_FS:otgfs1_.*", ("otg", "v1", "OTG")), (".*:USB_OTG_HS:otghs1_.*", ("otg", "v1", "OTG")), @@ -806,7 +810,7 @@ fn process_core( const GHOST_PERIS: &[&str] = &[ "GPIOA", "GPIOB", "GPIOC", "GPIOD", "GPIOE", "GPIOF", "GPIOG", "GPIOH", "GPIOI", "GPIOJ", "GPIOK", "GPIOL", "GPIOM", "GPION", "GPIOO", "GPIOP", "GPIOQ", "GPIOR", "GPIOS", "GPIOT", "DMA1", "DMA2", "BDMA", "DMAMUX", - "DMAMUX1", "DMAMUX2", "SBS", "SYSCFG", "EXTI", "FLASH", "DBGMCU", "CRS", "PWR", "AFIO", "BKP", + "DMAMUX1", "DMAMUX2", "SBS", "SYSCFG", "EXTI", "FLASH", "DBGMCU", "CRS", "PWR", "AFIO", "BKP", "USBRAM", ]; for pname in GHOST_PERIS { if let Entry::Vacant(entry) = peri_kinds.entry(pname.to_string()) { diff --git a/stm32-data-gen/src/header.rs b/stm32-data-gen/src/header.rs index fdc8ee3..1427d72 100644 --- a/stm32-data-gen/src/header.rs +++ b/stm32-data-gen/src/header.rs @@ -169,6 +169,10 @@ impl Defines { ("FMC", &["FMC_BASE", "FMC_R_BASE"]), ("FSMC", &["FSMC_R_BASE"]), ("USB", &["USB_BASE", "USB_DRD_BASE", "USB_BASE_NS", "USB_DRD_BASE_NS"]), + ( + "USBRAM", + &["USB_PMAADDR", "USB_DRD_PMAADDR", "USB_PMAADDR_NS", "USB_DRD_PMAADDR_NS"], + ), ]; let alt_peri_defines: HashMap<_, _> = ALT_PERI_DEFINES.iter().copied().collect();