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.

LMK61E2: Inquiry regarding LMK61E2 operation

Part Number: LMK61E2
Other Parts Discussed in Thread: USB2ANY,

Tool/software:

Hi, TI expert.

There is an inquiry from a my customer regarding LMK61E2.

[Question]

Although control was performed based on the datasheet, there is no change in clock output.

OSC is outputting 150MHz.

I will explain normal operation and N.G operation below, so please give me some advice.

1. Normal operation (OK)

- Read-only registers are read normally.

- The value written to the R/W Register is Rad.

2. N.G operation

- To change the frequency, D, INT, NUM, DEN, and OUTDIV values ​​were described, but the output did not change at 150Mhz.

- I have set it up to write the SARM value to the EEPROM. (R49 , 0x40)

→ I have set the SARM value to be written to the EEPROM. (R56 , 0xBE) → (R49 , 0x1) , Wait for about 1s of delay between each command.

→ There is no change in EEPROM write Count (NVMCNT = 0x1).

→ When committing the EEPROM value to the register with (R49, 0x08), the register value changes but it is not the expected value.

Please give me advice regarding the N.G. operation described above.

Thanks.

  • Hi Grady, 

    Just to confirm, is the device correctly outputting 150MHz after writing all registers but before programming the EEPROM? If not, then the config the customer is using may not be correct and I would recommend using the TICS Pro programming GUI the generate a new config. 

    If everything is working correctly prior to programming the EEPROM, then I would recommend using the below sequence since it's been verified to work:

    R49 0x50 # Copy registers to SRAM
    R56 0xBE # Unlock EEPROM
    R49 0x51 # Program SRAM contents to EEPROM
    # Wait for at least ~115ms
    R56 0x00 # Lock EEPROM
    # Power cycle device
    Let me know if this helps. 
     
    Regards, 
    Connor 
  • Hi, Connor

    Thanks for reply.

    1) Just to confirm, is the device correctly outputting 150MHz after writing all registers but before programming the EEPROM? 

    → Attached is the log executed with the LMK61E2 output at 150MHz.

    1) With the initial register set, Register Read → SRAM Commit → EEPROM Write → Register Read were performed.

    2) When ERPROM Write is performed, the “LMK_NVMCNT(48)” Count should increase, but since it does not change to ‘1’ based on the Read Register, it seems that the Write operation failed.

    3) I tried adding SWRST at the end, but the output stopped.

    [Log file]

    lmk61e2_log.txt
    <<< READ_LMK61_REG(READ_ONLY) >>>..
     LMK61ES_000(READ) Data= $0000100b
     LMK61ES_002(READ) Data= $00000033
     LMK61ES_003(READ) Data= $00000002
     LMK61ES_008(READ) Data= $000000b0
     LMK61ES_009(READ) Data= $00000000
     LMK61ES_047(READ) Data= $0000000f
     LMK61ES_048(READ) Data= $00000001
     LMK61ES_066(READ) Data= $000000ca
    <<< READ_LMK61_REG(WRITE/READ) >>>..
     LMK61ES_010(READ) Data= $00000001 
     LMK61ES_016(READ) Data= $00000197 
     LMK61ES_021(READ) Data= $00000001 
     LMK61ES_022(READ) Data= $00000020 
     LMK61ES_025(READ) Data= $0000005f 
     LMK61ES_027(READ) Data= $00003200 
     LMK61ES_030(READ) Data= $00003200 
     LMK61ES_033(READ) Data= $0000000c 
     LMK61ES_034(READ) Data= $00000028 
     LMK61ES_035(READ) Data= $00000003 
     LMK61ES_036(READ) Data= $00000008 
     LMK61ES_037(READ) Data= $00000000 
     LMK61ES_038(READ) Data= $00000000 
     LMK61ES_039(READ) Data= $00000000 
     LMK61ES_042(READ) Data= $00000005 
     LMK61ES_049(READ) Data= $00000011 
     LMK61ES_050(READ) Data= $0000000f 
     LMK61ES_051(READ) Data= $00000000 
     LMK61ES_056(READ) Data= $00000000 
     LMK61ES_072(READ) Data= $00000020 
    
     <<< SRAM_COMMIT>>>..
     LMK61ES_049(WRITE) Data= $00000050 
     usleep(1000*100);
    
     <<< EEPROM_WRITE>>>..
     LMK61ES_056(WRITE) Data= $000000BE 
     usleep(1000*200);
    
     LMK61ES_049(WRITE) Data= $00000051
     usleep(1000*200);
    
     LMK61ES_056(WRITE) Data= $00000000
     usleep(1000*200);
    
    <<< READ_LMK61_REG(READ_ONLY) >>>..
     LMK61ES_000(READ) Data= $0000100b
     LMK61ES_002(READ) Data= $00000033
     LMK61ES_003(READ) Data= $00000002
     LMK61ES_008(READ) Data= $000000b0
     LMK61ES_009(READ) Data= $00000000
     LMK61ES_047(READ) Data= $0000000f
     LMK61ES_048(READ) Data= $00000001
     LMK61ES_066(READ) Data= $000000ca
    
     <<< SRAM_RESET>>>..
     LMK61ES_072(WRITE) Data= $00000002 
     usleep(1000*100);

    I have additional questions.

    -SD Tool

    : It seems that you have to remove the LMK61E2 from the board and connect it somewhere to use it.

    When I looked it up, there was information about USB2ANY. Do I need to purchase USB2ANY to connect?

    Could you please explain how to configure the H/W to use the tool?

    Also, where can I find the TICS Pro GUI Users Guide?

    Please check. Thanks.

  • Hi Grady, 

    Understood, your programming sequence looks correct so I'd expect the EEPROM should be getting programmed correctly. One note is that writing 0x2 to R72 triggers a software reset for the PLL only but not for the entire device. Would it be possible to power cycle VDD after the EEPROM is locked (writing 0 to R56)? One other question, are you using block read/writes, or are you reading/writing 1 register per I2C transaction? I've seen issues with EEPROM programming in the past when block read/write is enabled. 

    TICS Pro can help with generating a register configuration for a given output frequency and format, as well as programming on the LMK61E2EVM. The EVM has USB2ANY built in so you wouldn't need to purchase an external USB2ANY. However, since it seems like the only issue is with the EEPROM programming and not with the register configuration, I'm not sure if that would be needed here. 

    Regards, 

    Connor 

  • thank you The output is variable by using the register value set in TICSPro. It seems that there was a value set incorrectly while registering, but we are trying to find it by comparing. [Additional questions] I would like to vary the output from 100MHz to 300MHz. There is a formula in the datasheet, but there are 4 arguments and the range is wide, so I'm not sure how to enter the arguments. Can I get a detailed formula to calculate Register according to Clock? It would be good if it were the formula used by TICSPro.

  • Hi Hwang, 

    From the datasheet, we have the equations FVCO = FREF × D × [(INT + NUM/DEN)] and FOUT = FVCO / OUTDIV. Since the crystal inside the device is a fixed frequency, we know that FREF = 50MHz. We also know that the VCO has a range of 4600MHz-5600MHz. The formula used in TICS Pro uses these parameters and chooses the configuration which has the highest PFD frequency and minimal N divider since that usually results in the best phase noise performance. It also tries to use an integer divider only whenever possible. The code can be found in the python files stored in C:\ProgramData\Texas Instruments\TICS Pro\Configurations\Devices\Oscillators\LMK61E2 in case you want to see exactly how the frequency planner works. Here are some example calculations:

    FOUT = 100MHz: FVCO = least common multiple of FOUT*OUTDIV and PFD. Try PFD of 100MHz -> FVCO = LCM(100MHz*OUTDIV,100MHz) within valid operating range and minimal N divider -> FVCO = 4600MHz, N = 46, OUTDIV = 46

    FOUT = 300 MHz: FVCO = LCM(300MHz*OUTDIV,100MHz) -> FVCO = 4800MHz, N = 48, and OUTDIV = 16 

    Let me know if this helps. 

    Regards, 

    Connor 

  • I am trying to analyze the Python Source you provided. I will get back to you if I have any further questions. It helped a lot. thank you