From 5501fabdaaf576ebd04617dae59b5b2c2dacbc6d Mon Sep 17 00:00:00 2001 From: mossmann Date: Sat, 13 Oct 2012 08:43:26 -0700 Subject: [PATCH] Updated LPC43xx USB DFU Notes (markdown) --- LPC43xx-USB-DFU-Notes.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/LPC43xx-USB-DFU-Notes.md b/LPC43xx-USB-DFU-Notes.md index 626f0da..44178ee 100644 --- a/LPC43xx-USB-DFU-Notes.md +++ b/LPC43xx-USB-DFU-Notes.md @@ -1,20 +1,16 @@ -# LPC43xx USB DFU Notes - -The LPC4350/40/30/20 contain USB DFU bootloader support in their ROM. By selecting the appropriate boot mode (either USB0 or USB1), the device will come up on USB at power-up or reset, and implement the popular and well-documented [USB DFU protocol](http://www.usb.org/developers/devclass_docs/DFU_1.1.pdf). - -It appears that the LPC43xx boot ROM will identify the available clock sources and frequencies, to some extent. Unfortunately, the current Jellybean prototype does not offer any high-precision clock source on-board, and the Si5351C (on Lemondrop) does not produce any clock signals by default. So we may not be able to use the USB DFU bootloader until we provide a accurate clock source at power-up. It's possible adding a 32.768KHz watch crystal would provide this without much additional BOM cost? - -The April 16, 2012 Jellybean design has a voltage divider for VBUS that is fed to the LPC43xx to detect that a USB host is present. Measuring the divided voltage, the USB0_VBUS only reaches 0.4V, which fails to trip the USB bootloader code. It looks like NXP's intent is to directly connect VBUS to the USB0_VBUS. Indeed, when I shorted R10 with tweezers, the USB bootloader sprung into action. I would recommend changing R10 to 0 Ohms and R11 to DNP, or removing R10 and R11 altogether. +The LPC43xx contains USB DFU bootloader support in ROM. By selecting the appropriate boot mode (USB0), the device will come up on USB at power-up or reset, and implement the popular and well-documented [USB DFU protocol](http://www.usb.org/developers/devclass_docs/DFU_1.1.pdf). ## Setup ### Boot Mode Jumpers -Set the boot mode jumpers to USB0: BOOT[0:3] = "1010". Jumper setting takes effect at the next power-on or reset. (I'll probably rig up a reset button to P2 "LPC_JTAG" or P14 "LPC_ISP".) +Set the boot mode jumpers to USB0: BOOT[0:3] = "1010". Jumper setting takes effect at the next power-on or reset. (You can rig up a reset button to P2 "LPC_JTAG" or P14 "LPC_ISP".) ### USB DFU Utility http://dfu-util.gnumonks.org/ +You need the latest source from git for some reason. + ## Usage Notes DFU boot downloads to RAM then executes. Need a DFU suffix, but also a header @@ -40,3 +36,10 @@ Check for device: Download (I used the latest dfu-util from git) > /usr/local/bin/dfu-util -d 1fc9:000c -a 0 -D load.dfu +Also make sure that the binary is linked for execution at address 0x00000000. This is the default for our linker scripts. + +# Jellybean Notes + +A 12 MHz clock signal must be supplied to the LPC4330 at boot time. + +The April 16, 2012 Jellybean design has a voltage divider for VBUS that is fed to the LPC43xx to detect that a USB host is present. Measuring the divided voltage, the USB0_VBUS only reaches 0.4V, which fails to trip the USB bootloader code. It looks like NXP's intent is to directly connect VBUS to the USB0_VBUS. Indeed, when I shorted R10 with tweezers, the USB bootloader sprung into action. I would recommend changing R10 to 0 Ohms and R11 to DNP, or removing R10 and R11 altogether.