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.

PCM2704: Custom EEPROM info

Part Number: PCM2704
Hello, I am trying to program my own information into the EEPROM at PCM2704. 
I write a field from the datasheet. I have verified that the memory is written correctly.
But if I connect it to a PC, the device name is absolutely incorrect. It consists of absurd characters.
For clarification, I'll still attach the screen from windows.
Do not you have any experience with this? Thank you.

unsigned char PCM2704[] = {0x00, 0x00, 0xBB,0x08,0x04,0x27, //0x00, 0x00 is adrress
0x50,0x72,0x6F,0x64,0x75,0x63,0x74,0x20,0x73,0x74,0x72,0x69,0x6E,0x67,0x73,0x2E,
0x56,0x65,0x6E,0x64,0x6F,0x72,0x20,0x73,0x74,0x72,0x69,0x6E,0x67,0x73,0x20,0x61,
0x72,0x65,0x20,0x70,0x6C,0x61,0x63,0x65,0x64,0x20,0x68,0x65,0x72,0x65,0x2E,0x20,
0x80,
0x7D,
0x0A,0x93,0x01};
  • Hi Marek,
    The PCM2704C automatically looks at CK and DT pins & if the EEPROM exists it will read the data from it(57 bytes). As long as the EEPROM is programmed correctly, no configuration required on the PCM side.

    To program the EEPROM you will need some device that can do I2C writes. The PCM2704 is not capable of doing these writes. For example, MSP430 ir some host processor. Here is an app note talking about it: www.ti.com/.../slaa208a.pdf

    For more info on the external ROM see pg. 22 of the datasheet: www.ti.com/.../pcm2704c.pdf
    Note that the bytes must be flipped while written so that the LSB is sent first.

    Hope this answers your question and you will be able to program EEPROM. Thanks.

    Best regards,
    Ravi
  • Yes, I have an EEPROM programmed by MSP430. In the EEPROM I wrote the field listed above ... 
    The result in the picture:


  • Here is my code.

    #include "msp430g2553.h"
    #include "I2C.h"
    
    #define LED_ON {P1DIR|=BIT0;P1OUT|=BIT0;}
    #define LED_OFF {P1DIR|=BIT0;P1OUT&=~BIT0;}
    
    #define EEPROM_Address	0x50
    
    void EEPROM_Write();
    unsigned char Address_for_read_array[2];
    unsigned char FRAM_Read(int Address);
    unsigned char Read_array[59];
    unsigned char r_Value;
    
    unsigned char PCM2704_Array[] = {(0x00 >> 8), (0x00 & 0xFF), 0xBB,0x08,0x04,0x27,
    0x50,0x72,0x6F,0x64,0x75,0x63,0x74,0x20,0x73,0x74,0x72,0x69,0x6E,0x67,0x73,0x2E,
    0x56,0x65,0x6E,0x64,0x6F,0x72,0x20,0x73,0x74,0x72,0x69,0x6E,0x67,0x73,0x20,0x61,
    0x72,0x65,0x20,0x70,0x6C,0x61,0x63,0x65,0x64,0x20,0x68,0x65,0x72,0x65,0x2E,0x20,
    0x80,
    0x7D,
    0x0A,0x93,0x01}; int Size; int main() { WDTCTL = WDTPW + WDTHOLD; BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; __enable_interrupt(); EEPROM_Write(); Size = sizeof(PCM2704_Array); for(;;) { //FRAM_Read(0x00); } } void EEPROM_Write() { I2C_Writeinit(EEPROM_Address); while(I2C_Notready()); I2C_Write(59, PCM2704_Array); while(I2C_Notready()); } unsigned char FRAM_Read(int Address) { Address_for_read_array[0] = (Address >> 8); Address_for_read_array[1] = (Address & 0xFF); I2C_Writeinit(EEPROM_Address); while(I2C_Notready()); I2C_Write(2, Address_for_read_array); while(I2C_Notready()); I2C_Readinit(EEPROM_Address); while(I2C_Notready()); I2C_Read(59, Read_array); while(I2C_Notready()); r_Value = Read_array[0]; return r_Value; }