I've been attempting to program a KL26 on a custom board I designed over SWD using a K20 microcontroller that I have access to on a Teensy 3.1 board. My problem is that I can't seem to get the chip to respond. I don't think the chip is damaged as the reset pin shows activity and I believe I have all of the relevant pins soldered correctly. It was my first QFN, but I have performed a continuity test from the edge of the chip to all relevant points (VCC, GND, SWD_CLK, SWD_DIO) and it seems to check out.
The issue is that the device will not respond to the read IDCODE command which is recommended to follow a line reset of 50 cycles to verify that the chip is talking properly.
Here is my attempt at the line reset and subsequent IDCODE read (yellow = clock, green = data). The KL26's RESET_b was held low as the device was powered on and kept low.
As is obvious from the end, the KL26 didn't respond to my read IDCODE command (0xa5, MSB first). Here are some closeups so that the clock alignment can be seen properly:
SWD Switchover command (0b0111100111100111, msb first) (probably not necessary since the chip only supports SWD, but removing it made no difference)
Read IDCODE command and KL26 (lack of) response:
When the waveform becomes "bumpy" right after the 0xa5 is when I release DIO to allow the KL26 to talk (it floats high, pulled up by the KL26). There is no 3-bit response.
I was combing through the datasheet looking for an explanation and noticed that Table 17 of the ML26Z32VFM4 datasheet states that the maximum clock rise time is 3nS. Here is what my clock looks like on the rising edge:
Obviously, it is a little long (37nS). I then turned on the Drive Strength Enable bit in the appropriate PCR on the K20. That reduced the rise time to 7nS, but also resulted in ringing that spiked to about 3.7V on the first spike, settling at 3.3V after two humps.
What is wrong with my SWD command issued above? Why wouldn't the KL26 respond? Is it the clock rise time, the chip being broken, or something else?
If it is the clock, how in the world do people manage to get a 3nS rise time out of a clock without having some severe ringing? Or, how could I get a 3nS rise time out of a K20 microcontroller GPIO? This thing is hooked up on a breadboard and the wire from the clock is about 5cm and is free floating, but I've seen JTAG cables much longer than that.