Post Go back to editing

AD9546 I2C Register Map Loading

Thread Summary

The user is unable to achieve a 1 Hz output on a custom board when loading a register map from an MCU to the AD9546 via I2C. The support engineer suggests verifying the system clock frequency, DPLL loop bandwidth settings, and output configuration (CML vs. HCSL). The user should also ensure the I2C read/write operations are correct and follow the initialization procedure from the data sheet.
AI Generated Content
Category: Software
Product Number: AD9546

Hello,

We are trying to load a register map from MCU to AD9546 through I2C bus. What I did, I have explained below.

1) I have exported a JSON file from AD9546 Evaluation Software.
2) I am able to work with AD9546 Evaluation Software with my EVK board and custom board. It works definitely.
2) From JSON File, i have extracted the "RegisterMap" field.
3) I have created an array and send to the AD9546(10MHz RefA, 48MHz SysCLK, 1Hz desired output) from MCU through I2C bus.
4) I am applying the IO update as well.

Results;
I can read the temperature but I am not able to see 1 Hz as output from my custom board. What can be the main problem ? Which registers I should check that I have to be sure everything goes well ?


I have attached the logic analyzer output and JSON file.

https://drive.google.com/drive/folders/1LAMPJVR2sspkcD8G074_-dv7ZFOS4BZG?usp=sharing


I would appreciate any help.

Thanks.

  • HI,

    I clicked on the link you provided, but I arrived here and it does not seem to be any file there:

    I would have liked to verify the json file. You say you were able to connect the eval software to the eval board and to your board and it worked. So I assume it's OK.

    If you then tried to download yourself the configuration into the AD9546 using I2C and the configuration did not work, you may try this:

    - to make sure the I2C read and write operations work, first read registers like 0x0003, 0x0004, 0x0005, 0x0006, 0x000B and 0x000C that have non-zero default values. After you are able to read those, write a scratchpad register 0x0020 to 0x0023 with non zero values.  See if you can read back the imposed values. 

    - after you are sure the read and write I2C operations work, use the Initialization procedure from the page 196 in the data sheet. Make sure you follow it.

    - After you write the registers and  execute IO Update, read the registers back and see if the values you imposed are now live into the chip.

    -then move on with the next steps in the initialization procedure.

    Petre

  • Hello,

    Firstly thank you for your answer Petre. Sorry for the broken link, i have updated the link. You can find as below.

    https://safirdepo.b3lab.org/baglanti-paylasimi/tALQ1RTlagpK2dbA2SDepzjXydYfSvRj

    JSON file and other related files you can find. 280825 files are without calibration, 290825 with calibration command sent.

    I have tried the scratchpad and I can write and read what i would like to see. I am able to write and read the values but some registers are different what i write and what i read. Maybe they change as real time i am not sure that, such as Tuning Words etc.

     

    If you are able to compare the data I appreciate.

    Regards,

     

  • HI,

    if you are able to read and write scratchpad registers, then the I2C operations should be fine. Do you follow the initialization procedure from the data sheet?

    When I was talking about reading back registers, I was referring to reading back the configuration registers. The status registers or registers that are updated by the AD9545 with the real time information like the DPLL tuning word history change their values continuously.

    I looked at the json file you sent and I see that:

    - the system clock source is a 48 MHz crystal resonator, so you changed the 52 MHz crystal on the eval board. Note that if the configuration is set with one frequency and the reality is different, the AD9546 cannot be expected to run correctly.

    - DPLLs are set with 50mHz loop bandwidth. Not clear why as you set them in phase buildout and the wizard accepts 50 Hz bandwidth. 

    - you say you do not get outputs. There may be two reasons: The auto sync mode is disabled, so you need either to set it to immediate, or to generate an IO Update.

    The outputs are set as CML and the eval board is set as HCSL. Verify your schematic and match the schematic with the configuration.

    Petre

  • Hello Petre,

    Thank you for your valuable feedback. Yes I am able to write and read from scratchpad register and I think the other configuration register. If you look excel files which is obtained from logic analyzer output, I am able to write them as well. I would like you to confirm me about this issue.

    We use the 48MHz for our custom board. I am sending the IO update with writing 0x01 to 0x000F register after loading my register map. I have looked to the initialization sequence but I dont know exactly what should I do after loading the register map and io updating ? Do I need to send any new command set as well ?

    And yes, for our custom board we are using CML. There is a something important point; One of my colleagues tried to send the configuration via AD9546 Evaluation Software to our custom board through SPI communication(he got the ad9546’s spi pin and made configuration for SPI instead of i2c) and there were outputs, he was able to see the 1Hz. As a result we are able to work with SPI and ad9546 evaluation software but not with i2c and our register map loading.

  • Hi,

    you say " I have looked to the initialization sequence but I dont know exactly what should I do after loading the register map and io updating ?"

    You need to initialize the system clock PLL and the APLL0 and APLL1. You may not obtain outputs because the APLL0 and APLL1 are not locked. 

    See figures 133 and 134 for detailed information about how to do these steps.

    Your colleague used the eval software to configure the AD9546 and it worked. The eval software uses SPI, but the key point is that the eval software executes the initialization of the system clock PLL and APLL0 and APLL1 automatically.

    You need to execute these steps with the I2C as well.

    Petre

  • Hello Petre,

    Thank you for details. Actually i can see that APLL0 is locked but DPLL0 not locked, so PLL not locked with this way.

    If you look 29082025/excel files and readback data It is supposed to be calibrated, I am already doing that sequence. I got these status:

    0x3001 = 0x03

    0x3005 = 0x10

    We are on same line with you about the automatic process of evaluation software, I would like to send the exact commands what software sends, actually I have tried the even listen the SPI line between EVK and and our custom board but it is a bit complex because periodically send some data or undefined registers which is not exist in data sheet etc. such as B0 B1 B2 etc.

    I would like you to examine my excel files and maybe saleae logic analyzer output if you have time. Anyway i will be doing double check with my setup about figure 133-134 but i think i am already doing that process if you look for status.

  • HI,

    register 0x3001 being 0x03 shows the system clock PLL is locked, which is very good. The PLL0 and PLL1 channels are not locked, but we need to see first the state of APLL0 and APLL1.

    Register 0x3005 is a buffered register. So you need to execute IO Update first and then read this register. Did you do this?

    Supposing you did this, the value 0x10 means REFA is valid, which is also good. So the fact the DPLL0 did not lock is because of the 50mHz loop bandwidth. Did you change it as I was asking you several emails ago?

    You should also read register 0x3100 (live register, so you can read it directly) to see the state of DPLL0 and APLL0

    I am sorry to say, I am not going to analyze the excel files. I do not know where to look. Too much information.

    You need to implement my suggestions and then you need to analyze the excel files and point the problems to me. Please refrain to dumping a lot of data on me

    Petre

  • Hello,

    Yes I did what you said, I mean I have load the regmap, io update, calibration sequence (0x2000 write 0x00, 0x2000 write 0x02, 0x2000, 0x00 after each register wrinig sending io update as well). 

    I executed IO Update and read the related register what you said:
    0x3001 - 0x03
    0x3100 - 0x2C
    0x3101 - 0x08
    0x3102 - 0x01
    0x3105 - 0x10

    Also one of my colleague (hardware designer) is talking with Analog Devices Turkiye,  I got a JSON file from him (probably you made it for them, I am already in touch with AD Turkiye as well) and now I have tried that JSON file works, I can see the 1Hz as output. It is in Internal-Zero Delay and 50mHz bandwidth with that JSON file.

    I will be talk with my colleague according to new consequencies, we can stay in touch for future specially for our custom usage. This topic can be closed because the I2C register map successfully worked we verified it. Thank you for your patience feedbacks.

  • HI,

    I'm very happy you got the AD9546 going. Yes, I provided a json file to someone in your company through an ADI representative.

    But you still have to obtain DPLL0 locked in phase (bit 1 of register 0x3100 is 0). You got it only locked in frequency (bit 2 of register 0x3100 is 1).

    Petre