|
запись в EPCS из ниоса, через epcs_flash_controller |
|
|
|
Aug 8 2011, 12:30
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
Надо иногда записывать несколько байт в EPCS. В EPCS64 128 секторов. Хочу последний сектор для данных отвести. Пишу код: Код #include "epcs_commands.h"
unsigned char * epcs_dst; unsigned int epcs_buff[4]; epcs_dst = &epcs_buff[0]; fprintf(stdout, "\nepcs id = %x", epcs_read_device_id(EPCS_FLASH_CONTROLLER_BASE + EPCS_FLASH_CONTROLLER_REGISTER_OFFSET)); epcs_read_buffer(EPCS_FLASH_CONTROLLER_BASE, 65536*127, epcs_dst, 16); fprintf(stdout, "\n1 = %x", epcs_buff[0]); На функции чтения тупо виснет. Что интересно, если написать: Код fprintf(stdout, "\nepcs id = %x", epcs_read_device_id(EPCS_FLASH_CONTROLLER_BASE)); Тоже виснет. Где примерчик можно посмотреть? Чё ему не нравится? Всякие галки small в bsp сняты... Попробовал везде использовать EPCS_FLASH_CONTROLLER_BASE + EPCS_FLASH_CONTROLLER_REGISTER_OFFSET Зависать перестало. Теперь добавляем запись: Код epcs_write_enable(EPCS_FLASH_CONTROLLER_BASE + EPCS_FLASH_CONTROLLER_REGISTER_OFFSET); epcs_sector_erase(EPCS_FLASH_CONTROLLER_BASE + EPCS_FLASH_CONTROLLER_REGISTER_OFFSET, 127); res = epcs_write_buffer(EPCS_FLASH_CONTROLLER_BASE + EPCS_FLASH_CONTROLLER_REGISTER_OFFSET, 65536*127, epcs_src, 16); После сброса питания, выяснилось, что прошивка накрылась. Куда-то не туда стер и записал...
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
 |
Ответов
|
Aug 9 2011, 16:58
|
Местный
  
Группа: Свой
Сообщений: 399
Регистрация: 1-01-06
Из: Волгоград
Пользователь №: 12 763

|
Код #include "flash.h" #include "sys/alt_flash.h" #include "string.h"
void flash_test (void) { alt_flash_fd * flash_descriptor; int ret_code, i; alt_u8 source[100] = {0,1,2,3,4,5,6,7,8,9}; alt_u8 dest[100];
flash_descriptor = alt_flash_open_dev ("/dev/epcs_flash_controller"); if (flash_descriptor != NULL) { printf ("Flash open success!\n");
ret_code = alt_read_flash (flash_descriptor, 0x70000, dest, 10); if (ret_code == 0) { printf ("read success\n"); for (i=0; i<10; i++) { printf ("%d - %d\n", dest[i], source[i]);
}
ret_code = alt_write_flash (flash_descriptor, 0x70000, source, 10); if (ret_code == 0) printf ("write success\n"); else printf ("write fail \n");
} else printf ("read fail\n");
alt_flash_close_dev (flash_descriptor); } else printf ("Can't open flash!\n");
}
int flash_read (alt_u8 * buf, alt_u32 addr, alt_u32 length) { alt_flash_fd * flash_descriptor; int ret_code; // alt_u8 tempbuf[40];
flash_descriptor = alt_flash_open_dev ("/dev/epcs_flash_controller"); if (flash_descriptor != NULL) { ret_code = alt_read_flash (flash_descriptor, addr, buf, length); if (ret_code == 0) { alt_flash_close_dev (flash_descriptor); return (1); } else return (0); alt_flash_close_dev (flash_descriptor); } else return (0); } У меня в проекте что-то такое было для теста работы с флешой..
|
|
|
|
|
Aug 10 2011, 08:16
|

Участник

Группа: Свой
Сообщений: 60
Регистрация: 1-04-10
Из: СПб
Пользователь №: 56 354

|
описание структуры Код struct EPCS_STRUCT { char *NAME; // name EPCS alt_flash_fd *p_epcs_fd; // pointer to EPCS flash_region *p_epcs_reg_info; // Regs info int num_epcs_regs; // num regs int type; alt_u8 sid; }; функция инициализации Код int init_epsc(struct EPCS_STRUCT *EPCS) { EPCS->sid =0xff; EPCS->p_epcs_fd=alt_flash_open_dev(EPCS->NAME); // Get pointer to flash info structure
alt_epcs_flash_get_info(EPCS->p_epcs_fd, &EPCS->p_epcs_reg_info, &EPCS->num_epcs_regs); // Verify flash details
switch (EPCS->p_epcs_reg_info->region_size*EPCS->num_epcs_regs) { case 131072 : /*printf("Detected EPCS1\n");*/ {EPCS->type =1;EPCS->sid =0x10; break;} case 524288 : /*printf("Detected EPCS4\n");*/ {EPCS->type =4;EPCS->sid =0x12; break;} case 2097152 : /*printf("Detected EPCS16\n");*/ {EPCS->type =16;EPCS->sid =0x14; break;} case 8388608 : /*printf("Detected EPCS64\n");*/ {EPCS->type =64;EPCS->sid =0x16; break;} case 16777216 : /*printf("Detected EPCS128\n");*/ {EPCS->type =128;EPCS->sid =0x18; break;} EPCS->sid =0xff;return(1); }
return(0); } Код int EPCS_READ(struct EPCS_STRUCT *EPCS, int offset, alt_u8 *buf, int len) { int res;
res = alt_epcs_flash_read(EPCS->p_epcs_fd, offset, buf,len);
return(res); }
int EPCS_FULL_ERASE(struct EPCS_STRUCT *EPCS) { int res; int i; int j; alt_u8 bar;
res = 0; switch (EPCS->type) { case 1 : for (i=0;i<4;i++) { res = res + alt_epcs_flash_erase_block(EPCS->p_epcs_fd, ((i*8)<<12)&(0xff000)); for (j=0;j<1000;j++); } break; case 4 : for (i=0;i<8;i++) { res = res + alt_epcs_flash_erase_block(EPCS->p_epcs_fd, i*0x010000); if (i==4) for (j=0;j<100000;j++); for (j=0;j<1000;j++); } break; case 16 : for (i=0;i<32;i++) { res = res + alt_epcs_flash_erase_block(EPCS->p_epcs_fd, i*0x010000); if (i==15) for (j=0;j<100000;j++); for (j=0;j<1000;j++); } break; case 64 : for (i=0;i<128;i++) { res = res + alt_epcs_flash_erase_block(EPCS->p_epcs_fd, 0x010000*i); if (i==63) for (j=0;j<100000;j++); } break; case 128 : for (i=0;i<64;i++) { res = res + alt_epcs_flash_erase_block(EPCS->p_epcs_fd, ((i*4)<<16)&(0xff0000)); bar=1.5625*(i+1); if (i==10) for (j=0;j<100000;j++); if (i==20) for (j=0;j<100000;j++); if (i==30) for (j=0;j<100000;j++); if (i==40) for (j=0;j<100000;j++); for (j=0;j<1000;j++); } break; res = 1;break; }
return(res); }
int EPCS_WRITE(struct EPCS_STRUCT *EPCS, alt_u32 PTR, int len, alt_u8 *buf) { int res; // len <= 256!!!
res = alt_epcs_flash_write_block(EPCS->p_epcs_fd,0, PTR, buf, len); return(res); } Код // инициализация epcs EPCS.NAME = EPCNAME; if (init_epsc(&EPCS)!= 0) printf("EPCS ID %x\n",EPCS.sid);
// ну и дальше пошли читать, стирать, писать....
|
|
|
|
Сообщений в этой теме
torik запись в EPCS из ниоса Aug 8 2011, 12:30 Stewart Little А девайс открывать Вы не забываете? Aug 8 2011, 12:36 torik А надо ли? Вот функции "epcs_commands.h... Aug 8 2011, 13:37 Stewart Little Какое значение возвращается из alt_flash_open_dev?... Aug 8 2011, 14:36 Stewart Little upd:
Цитата(torik @ Aug 8 2011, 17:37) А ... Aug 8 2011, 15:10  sergtsa Цитата(Stewart Little @ Aug 8 2011, 19:10... Aug 8 2011, 15:20 sergtsa и не забывайте , в EPCS _xxx ограниченное число за... Aug 8 2011, 15:00 vadimuzzz примеры чтения/записи с использованием epcs_comman... Aug 8 2011, 15:14 torik ЦитатаВы уж определитесь, с чем хотите работать - ... Aug 9 2011, 04:50 vadimuzzz Цитата(torik @ Aug 9 2011, 11:50) Взял пр... Aug 9 2011, 05:37 Stewart Little Цитата(torik @ Aug 9 2011, 08:50) Не поня... Aug 9 2011, 08:13 torik Кода вариант, что я выше предлагал чем не нравится... Aug 9 2011, 06:03 vadimuzzz Цитата(torik @ Aug 9 2011, 13:03) Кодalt_... Aug 9 2011, 06:06 torik Цитатаа вариант, что я выше предлагал чем не нрави... Aug 9 2011, 06:52 vadimuzzz Цитата(torik @ Aug 9 2011, 13:52) Опять н... Aug 9 2011, 08:57 torik Цитатаскорее epcs_write_enable
Точно, вот только з... Aug 9 2011, 09:53 vadimuzzz я, откровенно говоря, вообще не понимаю, почему вы... Aug 9 2011, 11:46 torik Причем тут флешка и форматный вывод. Форматный выв... Aug 9 2011, 11:51 Stewart Little Цитата(torik @ Aug 9 2011, 15:51) Причем ... Aug 9 2011, 11:57 vadimuzzz Цитата(torik @ Aug 9 2011, 18:51) И к фле... Aug 9 2011, 12:12 torik ЦитатаНу а Вы постарайтесь писать более удобочитае... Aug 9 2011, 12:47 torik Читабельно. Спасибо.
Перед записью, кстати, нет н... Aug 12 2011, 11:24
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|