Internal NOR flash Read Issue in TZ1001

nitin92 wrote on Wednesday, January 03, 2018:

Hello,
I am trying code a custom board with TZ1001 toshiba microcontroller in it. I have to store the sensor values connected to TZ1001 in internal NOR flash with time a stamp. I am able to write the vaalues to flash properly, but when i try to read the values from flash then it is giving some random constant value. I am attaching the code, where it starts writing to flash when typed ‘a’ and reads when typed ‘b’.

void tmp006_demo_task(void *pvParameters)
{
  i2c_initialize();
  char input;

  uint32_t i;
  
#ifdef NOR_USE_SDMAC
  Driver_SDMAC.Initialize();
  Driver_SDMAC.PowerControl(ARM_POWER_FULL);
#endif

  rtn = drv_info->Initialize(0);

  rtn = drv_info->PowerControl(ARM_POWER_FULL);

        input = prompt_console("select");
      if ((input >= 'A') && (input <= 'Z'))
      {
        input = input + ('a' - 'A');
      }
   while(1)
   {
     if (input == 'a')
     {
          read_temp();
         sram_area[i] = (int)temperature;
         vTaskDelay(1000);
     
         rtn = drv_info->WriteData(WRITE_ADDRESS, sram_area, sizeof(sram_area));
         print_sp(PREF "DATA WRITE  rtn=%d  data=0x%02x \r\n", rtn, *sram_area); 
         print_sp(PREF "MEM VALUE         0x%08x\r\n", (ptr+=2));
     }
    
     if (input == 'b')
     {
        rtn = drv_info->ReadData(WRITE_ADDRESS, hts_measurement1 , 1);
       print_sp(PREF "DATA READ       rtn=%d  %d  \r\n",rtn, hts_measurement1[0]);

       vTaskDelay(1000);
     }
   }

}

sram_area and hts_measurement are two array variables of integer data types declared globally.

I request someone to help me on this, as i am stuck in this from many days.

rtel wrote on Wednesday, January 03, 2018:

Is this a FreeRTOS related question?

nitin92 wrote on Wednesday, January 03, 2018:

Yes I am coding it in free rtos platform!

rtel wrote on Wednesday, January 03, 2018:

Please elaborate on the FreeRTOS part of your question so we can assist with that. The NOR flash driver is not part of FreeRTOS.

heinbali01 wrote on Wednesday, January 03, 2018:

Although it seems that your question is not related to using FreeRTOS, I had a quick look at your code and found that a variable i is being used without initialising it:

    uint32_t i;
    while(1)
    {
        ...
        read_temp();
        sram_area[i] = (int)temperature;
        ...
    }

You will write the contents of sram_area to flash, which is probably also uninitialised.

nitin92 wrote on Wednesday, January 03, 2018:

sram_area is a variable that is declared globally as an integer array.