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

 
 
> Renesas R8C & IAP
Dog Pawlowa
сообщение Feb 23 2011, 19:12
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Я расположил загрузчик и приложение в два разных банка, загрузчик ессно в нулевой, что вроде должно гарантировать неубиваемость загрузчика.
Тем не менее пару раз из сотни наблюдал слёт загрузчика во время программирования банка приложения.
Пытаюсь понять, в чем может быть причина.
Если у кого есть мысли буду благодарен.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Axel
сообщение Feb 24 2011, 07:18
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(Dog Pawlowa @ Feb 23 2011, 23:12) *
...Если у кого есть мысли буду благодарен.


Я использую отдельный банк для периодически обновляемых таблиц (проц R5F211B4). Около полутора сотен попыток были успешными. Может чего в коде неаккуратно... Или дополнительный кондер на питание... Или бубен...
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Feb 24 2011, 07:56
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Axel @ Feb 24 2011, 10:18) *
Может чего в коде неаккуратно...

Спасибо за инфо. Если можно, гляньте код. Он мне достался по наследству, что-то я правил, но в чем-то физически не мог разобраться, решал другие проблемы.
А завтра заколачивание ящиков для отправки заказчику.

Код
unsigned char EraseFlash( void)
{
#ifdef FLASH_32
    unsigned char * ers_addr=(unsigned char *)BEGIN_32;
#endif
#ifdef FLASH_64
    unsigned char * ers_addr=(unsigned char *)BEGIN_64;
#endif

    unsigned char erase_result;
    __disable_interrupt();
    fmr0 = 0x01;            //  flash control register set
    asm(" ");                // Description for preventing the abbreviation by optimization
    fmr0 = 0x03;            // CPU rewrite enable
    fmr1 = 0x80;
    asm(" ");                // Description for preventing the abbreviation by optimization
    fmr1 = 0x82;            //  EW1 mode
    fmr02 = 0;                // Lock bit disable select bit
    fmr02 = 1;                // Must write a 0 then a 1 in succession to SET
    fmr15 = 1;
    fmr15 = 0;                // block0 enable bit
    *ers_addr = 0x50;        //  Clear status register
    *ers_addr = 0x20;        //  Block erase command write
    *ers_addr = 0xd0;        //  Block erase command write
    while( fmr00 != 1 );    //  Ready check
                            //  Erase status check
    if( fmr07 == 1 )
    {    *ers_addr = 0x50;   //  Clear status register
        erase_result = IAP_ERASE_ERR;
    }
    else
    {    erase_result = IAP_COMPLETE;
    }
                            //  flash control register reset
    fmr0 = 0x00;            //  CPU rewrite disable

    return  erase_result;
}


Код
unsigned char WriteFlash(    unsigned char *write_addr_,
                            unsigned char *write_data_,
                            unsigned int size )
{    unsigned char program_result = IAP_COMPLETE;
    int ii;
    unsigned char * fp=write_addr_;
    unsigned char * dp=write_data_;
                                /*  flash control register set  */
    fmr0 = 0x01;
    asm(" ");                      /* Description for preventing the abbreviation by optimization */
    fmr0 = 0x03;                /* CPU rewrite enable  */
    fmr1 = 0x80;
    asm(" ");                    /* Description for preventing the abbreviation by optimization */
    fmr1 = 0x82;                /* EW1 mode    */
    fmr02 = 0;                    // Lock bit disable select bit
    fmr02 = 1;                    // Must write a 0 then a 1 in succession to SET    
    fmr15 = 1;
    fmr15 = 0;                    // block0 enable bit
    for( ii = 0; ii < size; ii++ )
    {    *fp = 0x50;    //  Clear status register
        *fp = 0x40;
        *fp = *dp;
        while( fmr00 != 1 );    //  Ready check
                                //  Program status check
        if( fmr06 == 1 )
        {                        //  Program error
            *fp = 0x50;            //  Clear status register
            program_result = IAP_PROGRAM_ERR;
            break;
        }
        fp++;    dp++;
    }
                                //  flash control register reset
    fmr0 = 0x00;//0x01;            //  CPU rewrite disable
    return program_result;
}



--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 1st September 2025 - 18:33
Рейтинг@Mail.ru


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