// Write Configuration Zone // // CryptoMemory Library Include Files #include "CM_LIB.h" #include "CM_I2C.h" #include "CM_I2C_L.h" #include "CM_GPA.h" // Write Configuration Zone uint8_t cm_WriteConfigZone(uint8_t ucCryptoAddr, uint8_t* pucBuffer, uint8_t ucCount, uint8_t ucAntiTearing) { // printf("\n===> cm_WriteConfigZone start\n"); uint8_t ucReturn, ucEncrypt; ucCM_InsBuff[0] = 0xb4; if(ucAntiTearing) ucCM_InsBuff[1] = 0x08; else ucCM_InsBuff[1] = 0x00; ucCM_InsBuff[2] = ucCryptoAddr; ucCM_InsBuff[3] = ucCount; // Three bytes of the command must be included in the polynominals cm_GPAcmd2(ucCM_InsBuff); // Only password zone is ever encrypted ucEncrypt = ((ucCryptoAddr>= CM_PSW) && ucCM_Encrypt); // Include the data in the polynominals and encrypt if required cm_GPAencrypt(ucEncrypt, pucBuffer, ucCount); // Do the write ucReturn = cm_WriteCommand(ucCM_InsBuff, pucBuffer,ucCount); // when anti-tearing, the host should send ACK should >= 20ms after write command if (ucAntiTearing) CM_LOW_LEVEL.WaitClock(100); //10 // printf("===> cm_WriteConfigZone over\n"); return ucReturn; }