Skip to content

Commit 28f1246

Browse files
Delay for 1ms in force_reset
1 parent 2d9e77c commit 28f1246

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

src/usbd.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@ impl Buffers {
4242
}
4343
}
4444

45-
unsafe impl Sync for Buffers {}
46-
4745
#[derive(Copy, Clone)]
4846
enum TransferState {
4947
NoTransfer,
@@ -733,10 +731,15 @@ impl<T: UsbPeripheral> UsbBus for Usbd<'_, T> {
733731

734732
fn force_reset(&self) -> usb_device::Result<()> {
735733
interrupt::free(|cs| {
736-
let regs = self.regs(cs);
737-
regs.usbpullup.write(|w| w.connect().disabled());
738-
// TODO delay needed?
739-
regs.usbpullup.write(|w| w.connect().enabled());
734+
self.regs(cs).usbpullup.write(|w| w.connect().disabled());
735+
});
736+
737+
// Delay for 1ms, to give the host a chance to detect this.
738+
// We run at 64 MHz, so 64k cycles are 1ms.
739+
cortex_m::asm::delay(64_000);
740+
741+
interrupt::free(|cs| {
742+
self.regs(cs).usbpullup.write(|w| w.connect().enabled());
740743
});
741744

742745
Ok(())

0 commit comments

Comments
 (0)