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.

LMX2581EVM: How to read Part ID and registers?

Part Number: LMX2581EVM
Other Parts Discussed in Thread: LMX2581

I have connected the LMX2581EVM to a Xilinx ZCU102 UltraScale board.  I am able to write messages through

the standard Linux SPI interface to the LMX2581 and configure the synthesizer.  But I am having difficulty reading back 

the part ID and the registers.  I have followed the instructions on readback to use the MUXout_Select and wired the

MUXout pin to LE.  I also read with CS high from Linux.  I have tried different sequences but have not been able to read

back the data I want.  Has anyone done this successfully, from Linux or other SPI masters?  Can someone show me 

a working example of the sequence of messages to send to the LMX2581 in order to read the part ID?  The part ID is

supposed to be one of these sequences: 0x00000500, 0x00000510, 0x00000520, 0x00000530.  In my attempts, I always

read back 0x00000280 after sending my message sequence.

Thanks,

TW

  • Hi TW,

    0x280 = 0b001010000000
    0x500 = 0b010100000000

    The result of your part ID readback (0x280) is 0x500 shifted by one bit. This indicates that your read back function may be reading back with a delay. Can you confirm this?

    One way you check is by placing the device in register readback mode and reading any of the registers, paying attention to the last four bits. In register readback mode, the last four bits of the read back value are always the register address. For example, for register 9: R9[3:0] = 0b1001 = 0x9 .

    Kind regards,
    Lane
  • Lane:

    Thank you so much for your quick response. Indeed, you are right about the shifted value. This morning, I tried to read the partID and registers again. I shifted1 bit on the read back value, and I got all the values I wrote to the registers back,. The values including part ID are exactly what I wrote to the registers - shifted 1 bit, that is. Also, the returned value does not contain the register number in the low bits; they are always 0. 


    You have provided information that has saved me a lot of headache. I really appreciate that. I will put a logic scope on the wired to check out why there is a shift.


    For anyone who might be interested, I used the following sequence to read back the registers:


    I configure the LMX2581EVM with this sequence:

    0x021FE80F # R15
    0x4082C10D # R13
    0x210050CA # R10
    0x03C7C039 # R9
    0x207DDBF8 # R8
    0x00082317 # R7
    0x5C004446 # R6
    0x0010A005 # R5
    0x00000004 # R4
    0x2000F3C3 # R3
    0x0C000012 # R2
    0xC4000051 # R1
    0x84E20000 # R0

    I write this sequence to set up the read:

    0x5C0044A6 # R6 I am reading register 5 by specifying A
    0x04E20000 # R0

    The read back value is 0x0010a000 (After I shift 1 bit to the left)

    If I want to read the part ID, I first write

    0x84E20000 # R0

    The read back value is 0x0000500 after shift.