1
\$\begingroup\$

I have what I can best describe as an ASIC (TI's DLPC3420 digital micromirror device controller) communicating with an SPI flash (MX25L1606E).

It first reads a part of the flash at low frequency of roughly 1.4 MHz which works perfectly fine. It then switches to a higher frequency of 30 MHz and continues reading the contents of the flash, however after this the flash only responds with a constant digital 1 on MISO instead of its contents.

After further inspection, I have found that at 30 MHz it seems that the CLK line does not reach the required voltage levels anymore. On my oscilloscope, I can see the 30MHz CLK swing centered around 1.6V with peak to peak voltage of about 1.6V also.

The oscilloscope traces are below. Note that on the first one, the HF clock appears as a Nyquist artifact due to my oscilloscope using a lower sampling frequency.

low sampling frequency

This second trace is sampled at 48MHz:

48MHz sampling frequency

Here are some notes about my design:

  • The flash is rated at 86 MHz
  • The SPI lines are microstrips impedance-controlled for 65 Ohm
  • There is no termination
  • The traces are short (CLK trace is 20.6 mm)
  • There are no sharp corners in the traces
  • There are 2 vias on MOSI and MISO in order to route the traces from an inner row of BGA pads, no vias on CLK or CS
  • The reference plane is 1.8V supply, the flash and interface runs on 3.3V
  • Both the supply and reference planes are decoupled towards GND at both ends with 12 nF and 150 nF MLCCs in parallel, right underneath the chips (it is not possible to decouple on the same layer due to the chip supply being in the inner row of BGA pads and the pad spacing being too small to route inbetween)
  • There are no other devices on the SPI bus
  • The driver (DLPC3420 controller) is specifically designed for this frequency, it cannot be changed. This specific flash is compatible with the controller according to datasheet.

Here is the relevant section of the PCB. Please apologize the terrible quality, this is the best I can do at the moment. I will look into providing the layout in a better way soon. enter image description here

My questions are:

  • Does this mean that the transmission lines are too capacitive or inductive?
  • Is using 1.8V as signal reference plane a problem?
  • Am I misinterpreting the measurements? My oscilloscope has a maximum sampling rate of 48MHz. I am waiting to access a better oscilloscope to confirm this next week. If this were the case however, it still does not explain why the flash is not working correctly.
\$\endgroup\$
4
  • 2
    \$\begingroup\$ What are your scope specs (bandwidth is more important than sample rate)? Can you show the layout (include multiple layers so everything can be seen)? Does the DLPC recommend suitable types of Flash, and is yours one of them? \$\endgroup\$ Nov 7, 2023 at 15:01
  • 2
    \$\begingroup\$ 48 MSa/s is certainly not enough for sampling above 24 MHz. As Tim Williams says there are probably other limitations in your scope that reduce the usable bandwidth further. \$\endgroup\$
    – The Photon
    Nov 7, 2023 at 15:05
  • \$\begingroup\$ Your scope is totally useless for this task (you would need to see clock components well above 100MHz in order to determine anything about its shape, which means a scope with ~500Msps). You'll get farther with your troubleshooting if you focus on more reliable but less powerful tools (like printf debugging) and stop trying to use an inadequate scope. \$\endgroup\$
    – Ben Voigt
    Nov 7, 2023 at 17:26
  • \$\begingroup\$ @TimWilliams The scope is a cheap DSO2020 with 20MHz bandwidth. I was hoping to get away with it but I agree that it is probably useless for this as suggested. The flash conforms with all the specified requirements of the DLPC. A similar model from the same series but different voltage and smaller size is listed as verified to work by TI. I have also added a crude screenshot of the layout for the time being until I can share it in a better format. \$\endgroup\$
    – DELTA12
    Nov 7, 2023 at 19:15

1 Answer 1

1
\$\begingroup\$

If you are in fact sampling your 30MHz clock at 48MHz, the signal will alias around the 24MHz Nyquist rate and show up at 18MHz. It will probably be attenuated by the antialiasing filter. I suspect that's what you're seeing on the scope. The second harmonic at 60MHz should alias down to 12MHz, but it and all higher harmonics are almost completely eliminated by the antialiasing filter.

Now to your questions:

Does this mean that the transmission lines are too capacitive or inductive?

It may, but it's unlikely. You might need series resistors on the driving side for signal integrity purposes, but might get away without them. In order to further troubleshoot the problem, we'll need schematics and layout pictures.

Is using 1.8V as signal reference plane a problem?

Not as long as it's a contiguous plane, without slots, traces, or rows of connected vias (so close together that the openings form a slot in the plane). If you have to traverse a break in the plane, coupling capacitors to ground (which I assume is a separate plane) on each side of the break will help.

Am I misinterpreting the measurements? My oscilloscope has a maximum sampling rate of 48MHz. I am waiting to access a better oscilloscope to confirm this next week. If this were the case however, it still does not explain why the flash is not working correctly.

See above; the scope is useless here. Also, you might want to use at least 10X probes at this speed. With 1X probes, the signal may look substantially different with the probe on or with it off. In fact, it wouldn't be a bad idea to take the probes off now and see (if you can control the speed) how fast it does work. That will indicate the severity of the problem (cutting out at 25MHz means you're almost there, cutting out at 2MHz means something's terribly wrong). That, and adding more info to your question above, will allow you/us to possibly make some progress until the new scope shows up.

\$\endgroup\$
3
  • \$\begingroup\$ Yes, the signal does alias at around 17.8 MHz. I have not considered the aliasing filter at all, I see this is a big problem with using such scope for this. I am using 10X probes rated for 150 MHz. Unfortunately I cannot control the speed at all, it is hardcoded in the internal bootloader of the DLPC as far as I can tell. I have also added a crude screenshot of the layout for now until I can share it in a better format. \$\endgroup\$
    – DELTA12
    Nov 7, 2023 at 19:23
  • \$\begingroup\$ Thanks. It looks like there's nothing on those SPI lines except a pin at each end? \$\endgroup\$ Nov 7, 2023 at 20:06
  • \$\begingroup\$ Yes, that's correct. It goes straight from the driver (DLPC) to the flash. There are some test pads for in-system programming of the flash chip, but these are cut on the prototype I am testing. \$\endgroup\$
    – DELTA12
    Nov 7, 2023 at 20:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.