реклама на сайте
подробности

 
 
> запись в EPCS из ниоса, через epcs_flash_controller
torik
сообщение Aug 8 2011, 12:30
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Reanimator++
сообщение Aug 9 2011, 16:58
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 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);
}

У меня в проекте что-то такое было для теста работы с флешой..
Go to the top of the page
 
+Quote Post
wpost
сообщение Aug 10 2011, 08:16
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 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);

// ну и дальше пошли читать, стирать, писать....
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 19:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.0144 секунд с 7
ELECTRONIX ©2004-2016