ch32 USBHD/USBHS driver implementation#893
Conversation
Lint ResultsFound 11 issues on changed lines in 4 files:
|
…ng to board definitions, add max packet size to usb device hal.
| _reserved1: u2 = 0, | ||
| }); | ||
|
|
||
| fn baseAddr() usize { |
There was a problem hiding this comment.
this one actually makes sense
Grazfather
left a comment
There was a problem hiding this comment.
Reviewed everything except for the HALs themselves (since this is a draft). Will get to those when you think they're ready.
| // pins.tog.put(0); | ||
| usb_dev.poll(false, &usb_controller); | ||
| // pins.tog.put(1); |
There was a problem hiding this comment.
gets rid of toggle pins completely or uncomment these please
The previous `init() Self` returned a copy of the struct, but set up DMA in the same function, causing DMA registers to be programmed with addresses pointing into a stack temporary.
Rewrite hw_init to follow WCH SDK init sequence with raw register writes, fixing endpoint mode configuration (disable EP4 which shares DMA with EP0, only enable EP1-3 needed for CDC-ACM). Fix poll loop: mask out SOF in the ignore filter to prevent spinning, use single-pass with early return, and add EP0 OUT re-arm after IN completion to correctly handle SETUP toggle sequencing.
USBFS fixes + merge upstream
| _ = microzig.export_startup(); | ||
| } | ||
|
|
||
| const USBController = usb.DeviceController(.{ |
There was a problem hiding this comment.
Suggestion: Rename USBController to USB_Controller, it should be more in line with our style guidelines. This automation is not perfect so take it with a grain of salt.
| /// | ||
| /// Note: The SVD names bit31 as `USBFSSRC`, but the reference manual | ||
| /// describes it as `USBHSSRC` ("USBHS 48MHz clock source selection"). | ||
| pub const UsbHsClockConfig = struct { |
There was a problem hiding this comment.
Suggestion: Rename UsbHsClockConfig to USB_HsClockConfig, it should be more in line with our style guidelines. This automation is not perfect so take it with a grain of salt.
|
|
||
| const Regs = peripherals.USB_OTG_FS; | ||
|
|
||
| const EpState = struct { |
There was a problem hiding this comment.
Suggestion: Rename EpState to EP_State, it should be more in line with our style guidelines. This automation is not perfect so take it with a grain of salt.
| } | ||
|
|
||
| // We use offset-based access for per-EP regs to keep helpers compact. | ||
| const RegU32 = microzig.mmio.Mmio(packed struct(u32) { v: u32 = 0 }); |
There was a problem hiding this comment.
Suggestion: Rename RegU32 to Reg_U32, it should be more in line with our style guidelines. This automation is not perfect so take it with a grain of salt.
|
|
||
| // We use offset-based access for per-EP regs to keep helpers compact. | ||
| const RegU32 = microzig.mmio.Mmio(packed struct(u32) { v: u32 = 0 }); | ||
| const RegU16 = microzig.mmio.Mmio(packed struct(u16) { v: u16 = 0 }); |
There was a problem hiding this comment.
Suggestion: Rename RegU16 to Reg_U16, it should be more in line with our style guidelines. This automation is not perfect so take it with a grain of salt.
| padding: u4 = 0, | ||
| }); | ||
|
|
||
| fn baseAddr() usize { |
There was a problem hiding this comment.
Please change to base_addr, in MicroZig we use snake case for function names.
|
|
||
| const Regs = peripherals.USBHS; | ||
|
|
||
| const EpState = struct { |
There was a problem hiding this comment.
Suggestion: Rename EpState to EP_State, it should be more in line with our style guidelines. This automation is not perfect so take it with a grain of salt.
| } | ||
|
|
||
| // We use offset-based access for per-EP regs to keep helpers compact. | ||
| const RegU32 = microzig.mmio.Mmio(packed struct(u32) { v: u32 = 0 }); |
There was a problem hiding this comment.
Suggestion: Rename RegU32 to Reg_U32, it should be more in line with our style guidelines. This automation is not perfect so take it with a grain of salt.
|
|
||
| // We use offset-based access for per-EP regs to keep helpers compact. | ||
| const RegU32 = microzig.mmio.Mmio(packed struct(u32) { v: u32 = 0 }); | ||
| const RegU16 = microzig.mmio.Mmio(packed struct(u16) { v: u16 = 0 }); |
There was a problem hiding this comment.
Suggestion: Rename RegU16 to Reg_U16, it should be more in line with our style guidelines. This automation is not perfect so take it with a grain of salt.
| // We use offset-based access for per-EP regs to keep helpers compact. | ||
| const RegU32 = microzig.mmio.Mmio(packed struct(u32) { v: u32 = 0 }); | ||
| const RegU16 = microzig.mmio.Mmio(packed struct(u16) { v: u16 = 0 }); | ||
| const RegU8 = microzig.mmio.Mmio(packed struct(u8) { v: u8 = 0 }); |
There was a problem hiding this comment.
Suggestion: Rename RegU8 to Reg_U8, it should be more in line with our style guidelines. This automation is not perfect so take it with a grain of salt.
This adds a new driver for the ch32 USBHD/USBHS peripheral, USB_OTG_FS peripheral, and examples for the ch32v307, and ch32v203 boards.