Programing the CW308 with target LPC55S69

Hello,

I am trying to use the target LPC55S6X with a Arm Cortex-M33 on the ChipWhisperer Pro UFO Board (CW308_LPC55S6X).

When using the jupyter notebook interface, we usually do something like:

prog = cw.programmers.STM32FProgrammer # or XMEGAProgrammer, etc.
cw.program_target(scope, prog, firmware_path)

But for the LPC55S6X, I do not see which programmer I should use among those available. Is there any tutorial with this target board that I missed?

Besides, I use the same UFO board configuration as the one I used for the STM32F3 target (which is detailed below), as I did not find information regarding this target. Please let me know if anything is incorrect.

J3           : HS2/OUT
J1-VREF      : J1-3.3V (left)
EXT-DC SWITCH (bottom-left switch) : AUTO S1 (left)
J14          : FILT / FLIT_LP-FILT-HP : left
3.3V SRC     : J1/CW (up)
VADJ SRC     : 5V (down)
1.2V LDO SRC : J1/CW (right)
1.8V LDO SRC : J1/CW (right)
2.5V LDO SRC : EXT-DC (left)
3.3V LDO SRC : EXT-DC (left)
5V LDO SRC   : EXT-DC (left)

Thanks,
Quentin

Hi Quentin,

You’ll need to use an external JTAG programmer for that target. I haven’t programmed that target personally, but anything that works with OpenOCD should be able to do it.

As for board setup, it should be pretty similar to the F3. The only major difference is that this target requires a 1.2V VCC, meaning you’ll need the 1.2V LED to be illuminated on the CW308.

Alex

Hi Alex,

Thank you for your reply.
I am not familiar with JTAG programming. I have looked around a bit, and still have some questions. From what I understand, the steps are following (using mainly this page):

  1. On the CW308, use jumper wires to connect the following pins:
    J5 Pin 12 (SCK) → J8 Pin 6 (J_TCK)
    J5 Pin 18 (PDID) → J8 Pin 5 (J_TMS)
    J5 Pin 13 (MISO) → J8 Pin 4 (J_TDO)
    J5 Pin 14 (MOSI) → J8 Pin 3 (J_TDI)
    (source: here)

Question: the tutorial states that these connections are for the STM32F3 board; are they the same for any board using JTAG, in particular the LPC55S6x?

  1. Run the following commands:
import chipwhisperer as cw
scope = cw.scope()
scope.enable_MPSSE(1)
  1. Create a file myconfigfile.cfg with the following content:
source [/path/to/cw_openocd.cfg]
transport select swd
ftdi vid_pid 0x2b3e 0xace3
source [target/lpc55s6x.cfg]

Question: is 0xace3 the correct ProductID to put in that file? (I found it here)

Question: where can I get the file lpc55s6x.cfg? I did not find it neither in the chipwhisperer.git nor in the openocd provided files.

  1. Run openocd -f myconfigfile.cfg

  2. Create a file load_firmware.cfg with the following content:

init
targets
halt
flash write_image erase /path/to/fw.elf
flash verify_image /path/to/fw.elf
reset run
shutdown
  1. Run openocd -f load_firmware.cfg

  2. After loading the firmware, get the scope and target again and force one reset cycle with the following commands:

   scope = cw.scope()
   scope.default_setup()
   target = cw.target(scope)

   scope.io.nrst = "low"
   time.sleep(0.7)
   scope.io.nrst = "high_z"
  1. Run captures as usual

Is that globally ok?

Thanks again,
Quentin

I’ll have to look into this. It looks like OpenOCD support for this target is currently in development, and I’ve seen PyOCD recommended as well, so there might be a few different options.

Our JTAG implementation might not work with this target - it’s just a bitbanged emulation of an FTDI chip, so lots of things aren’t really right with regards to frequency or meeting the requirements for buffers/commands. You may need a third party JTAG programmer.

BTW, 0xACE3 is correct for the Pro.