EmbDev.net

Forum: FPGA, VHDL & Verilog Read/Write EPCS64 flash from Nios II


von jeorges F. (Company: xlue) (khal1985)


Rate this post
useful
not useful
Hi all,

Actually, I'm trying to write/read my flash device using the HAL 
functions.

After opening the device, I write data into the EPCS64 using 
alt_write_flash_block, then i read it back using alt_read_flash.
The problem i have is that the data read/ written shown in the Nios II 
console are not the same.
The code for writing and reading is below:
1
int Write_flash( alt_flash_fd* fd, float *Ks_para,int test_offset)
2
{
3
  int i;
4
  int ret_code = 0;
5
6
  alt_u8 *ptr_ks=(alt_u8*) Ks_para;
7
8
  int test_length = sizeof(Ks_para);
9
10
  // before writing in a sector, we should erase it before
11
  ret_code=alt_erase_flash_block(fd, test_offset,regions->block_size);
12
  if(!ret_code){
13
14
    for(i=0;i<test_length;i++){
15
        printf( "data_written[%d]= 0x%08x\n\r",i,ptr_ks[i]);
16
    }
17
18
    //ret_code = alt_epcq_controller_write_block(fd, test_offset, test_offset,ptr_ks, test_length);
19
    ret_code=alt_write_flash_block(fd,test_offset,test_offset,ptr_ks,test_length);
20
  }
21
  if (ret_code)
22
  {
23
      printf( "\nERROR: function alt_write_flash failed. ret_code %d\n",ret_code);
24
      return ret_code;
25
  }
26
  return ret_code;
1
float Read_flash( alt_flash_fd* fd,int test_offset)
2
{
3
  int test_length = 4;
4
  alt_u8 data_read[test_length];
5
  int i=0;
6
  union conv2float read_flash;
7
  float Ks_para=0.0;
8
  int ret_code = 0;
9
10
    if (!ret_code)
11
    {
12
      //ret_code = alt_epcq_controller_read(fd, test_offset, data_read, test_length);
13
      ret_code=alt_read_flash(fd, test_offset, data_read, test_length);
14
15
      if(!ret_code)
16
      {
17
        for(i=0;i<4;i++){
18
          read_flash.V_In[i]=data_read[i];
19
            printf( "Flash+%d= 0x%08x\n\r",i,read_flash.V_In[i]);
20
21
        }
22
23
          Ks_para=(float)read_flash.V_Fl;
24
      
25
      }
26
    }
27
28
    alt_flash_close_dev(fd);
29
    if (ret_code)
30
    {
31
      printf( "\nERROR: function READ failed. ret_code %d\n",ret_code);
32
      //return ret_code;
33
    }
34
  return Ks_para;
35
}

Can you help please if you have any idea ?

Thank in advance.
Best regards

von jeorges F. (Company: xlue) (khal1985)


Rate this post
useful
not useful
I want just to precise that in debug mode, I can see that the location 
where I write changed but with wrong values.
For example, I'm writing 0x40228f5c to 04FC0000 address, but I can see 
this :
04FC0000 2E479120 FFFFFFFF FFFFFFFF FFFFFFFF

I don't find an explication why.

Do you have any suggestion please?

Thanks

Best regards

Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
No account? Register here.