This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

LMK04828 Not listening or responding to SPI

1. Apply power
2. Pull Reset low
3. Use 1.8V SPI bus (accepts 3.3V input logic)
  a) Write: 3'b000, 13'h000, 8'h80 (to reset)
  b) Write: 3'b000, 13'h000, 8'h10 (if not 3wire)
  c) Write: 3'b000, 13'h148, 8'h36 (CLKin_SEL0 is SDO)
  d) Write: 3'b000, 13'h149, 8'h44 (CLKin_SEL1 is high)
  e) Write: 3'b000, 13'h15F, 8'h04 (STATUS_LD1 is high)
  f) Write: 3'b100, 13'h000
  e) Read bits ... Nothing.

I've also tried with the sync pin high, low and floating. There is a 122.8MHz oscillator connected and powered identical to the evaluation board.

Is there some debugging step I am missing? The SPI bus is definitely working since all the other devices (including TIs LMH6401) are working perfectly on the same bus.
  • Your sequence looks good.

    Mark Michael said:
    a) Write: 3'b000, 13'h000, 8'h80 (to reset)

      RESET BIT = 1

    Mark Michael said:
    b) Write: 3'b000, 13'h000, 8'h10 (if not 3wire)

      SPI_3WIRE_DIS = 1, disable readback output on SDIO pin.

    Mark Michael said:
    c) Write: 3'b000, 13'h148, 8'h36 (CLKin_SEL0 is SDO)

      CLKin_SEL0_MUX = 6, SPI Readback.
      CLKin_SEL0_TYPE = 6, Output (open drain)

    You are using open drain output, what is the voltage on the CLKin_SEL0 pin?  1.8 V?  If 0 V, there will be no output because the open drain won't pull high.

    You mention the 1.8 V SPI bus accepts 3.3 V input logic, can you try programming CLKin_SEL0_TYPE = 3 for output-push pull?

    Mark Michael said:
    d) Write: 3'b000, 13'h149, 8'h44 (CLKin_SEL1 is high)

      SDIO_RDBK_TYPE = 1 (open drain)
      CLKin_SEL1_MUX = 1, CLKin1 LOS
      CLKin_SEL1_TYPE = 0, Input

    Mark Michael said:
    e) Write: 3'b000, 13'h15F, 8'h04 (STATUS_LD1 is high)

      Output = Low
      Output Type = Invert


    If you program 0x15f = 0x03 does the STATUS_LD1 go low?  This is a good debugging technique toggling Ouptut Type between Output and Invert Output to see the pin STATUS_LD1 toggle.

    73,

    Timothy

  • Timothy T said:

    You are using open drain output, what is the voltage on the CLKin_SEL0 pin?  1.8 V?  If 0 V, there will be no output because the open drain won't pull high.

    You mention the 1.8 V SPI bus accepts 3.3 V input logic, can you try programming CLKin_SEL0_TYPE = 3 for output-push pull?

    There is a 4.7KOhm resistor pulling this pin up to 1.8V. Yes I tried that too.
    Timothy T said:

    If you program 0x15f = 0x03 does the STATUS_LD1 go low?

    It is always low is my problem. I implemented the following loop:

    while (1)  begin

    write 8'h04 to 0x149

    write 8'h03 to 0x15F

    write 8'h03 to 0x149

    write 8'h04 to 0x15F

    end

    I probe the  CLKin_SEL1 and Status_LD1 pins using an oscilloscope and they are always low. Attached is the waveform of my spi bus. In this scenario, SCLK is 5kHz, I've set it as high as 5MHz. Is there something I can probe to make sure that the chip is still functional at all, I've probed all the power pins and they seem fine.

  • Mark Michael said:
    It is always low is my problem. I implemented the following loop:

    Your loop is a great test.  Toggling 0x15f between 0x03 and 0x04 alone should result in pin 31, Status_LD1 toggling.

    Toggling 0x149 between 0x03 and 0x04 would result in pin 59, CLKin_SEL1 toggling.  That fact the pins are not toggling is bad news, but you know that.

    Mark Michael said:
    something I can probe to make sure that the chip is still functional at all

    Off the top of my head, if things are biased correctly, I think you will measure ~2.5 V at pin 11 (LDObyp1).  And ~1.5 V at pin 12 (LDObyp2).  The OSCin and CLKin pins should measure around 1.6 V.

    73,
    Timothy

  • FYI, one other thing which could prevent SPI from working is if the SPI_LOCK was programmed. But since you are coming out of POR, I don't see this being an issue. However you could always try programming register 0x1FFD = 0x00; 0x1FFE = 0x00; and 0x1FFF = 83 (0x53). These registers must be written sequentially and in order: 0x1ffd, 0x1ffe, 0x1fff.

    73,
    Timothy
  • One other debug item would be, could you provide me an actual scope shot of one of your register write? One of the registers from in the loop would be good.