5 Replies Latest reply on May 24, 2019 2:42 AM by SudheeshK_26

    Regarding working/interfacing with FM25V10 FRAM

    ViV_4156156

      Hi

        Im trying to read the device ID  initially to start interfacing with FM25V10 FRAM.

       

      The below mentioned procedure I'm following  to read the devive ID C22400h - with product family,density,sub and revision codes.

       

      uint32_t read_fram_id(void)

      {

          uint8_t dummy_var;

      uint8_t manufacturer_ID,device_ID_1,device_ID_2,device_ID_3;

      uint32_t device_ID;

       

      ALLOW_TRANSFER; // if previous command has set EOQ

       

       

      PUSH(RDID);  // read data bytes command 9F

      WAIT_UNTIL_RxFIFO_IS_NOT_EMPTY;

      POP(dummy_var); // discard one RxFIFO item

       

       

      PUSH(dummy_byte);

      WAIT_UNTIL_RxFIFO_IS_NOT_EMPTY;

      POP(dummy_var); // get 7f

       

       

      PUSH(dummy_byte);

      WAIT_UNTIL_RxFIFO_IS_NOT_EMPTY;

      POP(dummy_var); // get 7f

       

       

      PUSH(dummy_byte);

      WAIT_UNTIL_RxFIFO_IS_NOT_EMPTY;

      POP(dummy_var); // get 7f

       

       

          PUSH(dummy_byte);

      WAIT_UNTIL_RxFIFO_IS_NOT_EMPTY;

      POP(dummy_var); // get 7f

       

       

      PUSH(dummy_byte);

      WAIT_UNTIL_RxFIFO_IS_NOT_EMPTY;

      POP(dummy_var); // get 7f

       

       

      PUSH(dummy_byte);

      WAIT_UNTIL_RxFIFO_IS_NOT_EMPTY;

      POP(dummy_var); // get 7f

      // after 6 bytes of &F now getting device id C2 2400h

       

       

      PUSH(dummy_byte); // dummy byte for generating CLK to slave

      WAIT_UNTIL_RxFIFO_IS_NOT_EMPTY;

      POP(device_ID_1);

       

      PUSH(dummy_byte); // dummy byte for generating CLK to slave

      WAIT_UNTIL_RxFIFO_IS_NOT_EMPTY;

      POP(device_ID_2);

       

       

      PUSH_ENQ(dummy_byte); // dummy byte for generating CLK to slave

      WAIT_UNTIL_RxFIFO_IS_NOT_EMPTY;

      POP(device_ID_3); // read useful data

       

      deviceID = (device_ID_1 << 24) | (device_ID_2 << 16) | (device_ID_3 << 8) | (0x0000);

      return deviceID;

      }

       

      What im getting is 0xFF00. I tried to probe  the test point are bit cluttered an difficult to probe.

      same happened when i was working with S25FL-L 128MB flash memory but thankfully i got the device ID there thus not needed for probing.

       

      Please tell me whether this approach is correct initially. Kindly advice as Im using FRAM for first time.

       

      Thanks In Advance,

      Vignesh