AD9545 0x000F bit 0 issue

Hello

           Customer use AD9545 write system clock (0x0200 – 0x0209) the setting "1" to 0x000F bit 0 (Input/Output update). Then customer read 0x0200 – 0x0209 but the value still default "0"

           While setting "1" to 0x0001 bit 5 ((Reads buffered values that take effect on next the input/output update). Customer could read out the value of 0x0200 – 0x0209. They still can not use 0x000F bit 0 write to active register space from buffer. Has any comments to it? Thank you. 

BR

Patrick

  • Hello

                 While we write system clock (0x0200 – 0x0209) the setting "1" to 0x000F bit 0 (Input/Output update). Then customer read 0x0200 – 0x0209 but the value still default "0", What is the issue root cause for it? Thank you. 

    BR

    Patrick

  • +1
    •  Analog Employees 
    on Jan 7, 2021 2:24 PM 1 month ago in reply to patrickchen@morrihan.com

    HI,

    sorry for getting back to you late. I had to go in the lab to play with the AD9545 in order to respond to you. There is no need to send twice the same email.

    As you know, the AD9545 registers are live and buffered. The key point of the buffered registers is that some of them get the buffer value transferred when an IO Update is done (that is when the serial port write ends), while others are transferred based on a clock derived from the system clock divided down by 32 after an IO Update is issued. In this last case, if the system clock PLL is not yet locked and stable, even if the IO Update is issued, the value is not transferred and if you read the live register, you read whatever value that  live register has.

    In the case of registers 0x200 to 0x209, which manage the system clock PLL, the registers 0x200 to 0x206 move their buffered value with the IO Update when the serial port write ends. I verified this on an AD9545 evaluation board.

    But the registers 0x207 to 0x209 transfer their buffers if the system clock is present. So I had to calibrate the system clock PLL (write, bit 2 to 1 in register 0x2000, issue IO Update, write bit 2 to 0 in register 0x2000, issue IO Update) and then I was able to read back the registers 0x207 to 0x209 correctly.

    Please note that I did these operations using a Python script from the PC, so they were slow.  If you use a controller, I recommend  to follow the Initialization procedure listed in the AD9545 rev B data sheet, page 160, which would have meant to also monitor the bits 1:0 in register 0x3001 before writing the bit 2 in register 0x2000 to 0.

    Bottom line is that I do not understand why when you write registers 0x200 to 0x209, then issue IO Update, you read all the values at 0. You should have read registers 0x200 to 0x206 with the desired values.

    I recommend looking into how the SPI works on your board and at the M4 pin status at power up (it must be tied to ground to select the SPI as the serial port or tied high if you want to use I2C)

    Petre