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.

PGA300: Confirmation about CRC calculation process

Part Number: PGA300

Hello,

I have several questions that are about CRC calculation process in PGA300 and recently uploaded PGA300 data sheet.

Firstly, previous data sheet which was uploaded in 2016 stated “Every time the last byte is programmed, the CRC value is automatically calculated and validated.”, whereas current data sheet stated “Every time the EEPROM_CRC_VALUE_USER register is written, the PGA300 calculates the CRC value across the EEPROM memory, places the calculated CRC value in the EEPROM_CRC_VALUE_CALC register, and validates the value against the CRC value programmed in the EEPROM_CRC_VALUE_USER register.”. They stated like that, however I can’t  identify which one write the CRC to the EEPROM_CRC_VALUE_USER. PGA300 or GUI? Could you tell me that?

Secondary, I found many differences between previous one and current one. I concern about PGA300’s firmware code change. Has PGA300 code changed since it first produced ?

Regards,


 

  • Hello,

    The EEPROM_CRC_VALUE_CALC register is written by the PGA300. Whenever the EEPROM_CRC_VALUE_USER register is written (this is the last byte of the EEPROM) then the PGA300 calculates the CRC value, and places its output in the EEPROM_CRC_VALUE_CALC register.

    The PGA300 firmware has not changed. The changes to the datasheet were made to clarify sections that were previously confusing, and to correct errors in the documentation, but nothing about the PGA300 device itself has changed.


    Regards,

  • Hello,

    Could I confirm process of PGA300? Following processes are my understanding.

    1) User: Write any byte to EEPROM_CRC_VALUE_USER (EEPROM page address: 0xF7).

    2) PGA300: Calculate CRC.

    3) PGA300: Write result of CRC calculation to EEPROM_CRC_VALUE_CALC (offset address: 0x8D).

    4) User: Read EEPROM_CRC_VALUE_CALC (offset address: 0x8D), and write to EEPROM_CRC_VALUE_USER.

    5) PGA300: Compare EEPROM_CRC_VALUE_CALC and EEPROM_CRC_VALUE_USER. If these values are same, set CRC_GOOD bit 1 in EEPROM_CRC_STATUS.

    6) PGA300: Start measurement program after check CRC_GOOD bit is equal to 1.

     

    I especially concern about 4). If user write to EEPROM_CRC_VALUE_USER, 1) and 2) process is recalculated automatically? I concern that CRC calculation values of EEPROM_CRC_VALUE_CALC and EEPROM_CRC_VALUE_USER always unmatched.

     

    Regards,

  • Hello,

    That procedure is correct. The CRC is calculated on the EEPROM outside of the EEPROM_CRC_VALUE_USER register. If that is concerning, then the CRC check can also be initiated at any time by setting the CALCULATE_CRC bit in the EEPROM_CRC register. The status of the CRC calculation is available in the CRC_CHECK_IN_PROG bit in the EEPROM_CRC_STATUS register.

    Regards,

  • Hello,

    Thank you for teaching. I understand I need to read the value of EEPROM_CRC_VALUE_CALC (offset address: 0x8D), and write to EEPROM_CRC_VALUE_USER (EEPROM address: 0xF7). Just to be sure, if user writes EEPROM_CRC_VALUE_CALC to EEPROM_CRC_VALUE_USER, is automatic CRC calculation initiated again?

     

    In addition, does this calculation include CRC (own address: 0xF7)? I think CRC calculation area is from 0x00 to 0xF6 in EEPROM page address.

     Regards,

  • Hello,


    Yes, that's correct. The EEPROM CRC calculation does not include the EEPROM_CRC_VALUE_USER register. And yes, the calculation is started again anytime the EEPROM_CRC_VALUE_USER register is written. The result should be the same if the value you write is the previous EEPROM_CRC_VALUE_CALC value.

    Regards,