Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 19.02.2011, 01:11   #1
OLAND
Senior Member
 
Регистрация: 27.02.2007
Сообщений: 185
Вес репутации: 151/41
OLAND has a spectacular aura aboutOLAND has a spectacular aura about
По умолчанию flash write pic18

Уж 5 часов мучаюсь не могу записать на 18F67j50 на FLASH

может чего пропустил
чего за ерунда не пойму

оставил только то что не работает.

uint8 _intcon;
TBLPTR = (far uint8*)dst;


EECON1bits.WREN = 1;
EECON1bits.FREE=1;
_intcon=INTCON;
INTCON=0;
EECON2=0x55;
EECON2=0xAA;
NOP();
EECON1bits.WR=1;
while(EECON1bits.WR);
INTCON = _intcon;
GIE=1;

/*while(len--)
{
tablat = 0x11;//*(src++);
asm("tblwt+*");
}*/
TBLPTR = (far uint8*)dst;

TABLAT = 0x0f;
asm("tblwt*+");
TABLAT = 0xaa;
asm("tblwt*");

EECON1bits.WPROG=1;
EECON1bits.WREN = 1;
_intcon=INTCON;
INTCON=0;
EECON2=0x55;
EECON2=0xAA;
NOP();
EECON1bits.WR=1;
while(EECON1bits.WR);
INTCON = _intcon;
EECON1bits.WPROG=0;
EECON1bits.WREN=0;
OLAND вне форума   Ответить с цитированием
Старый 19.02.2011, 03:20   #2
Vlad&mir
Senior Member
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 1,720
Вес репутации: 4345/92
Vlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond repute
По умолчанию Re: flash write pic18

Вникать в Ваш код особого желания нету, да и компилятор у нас примеряется mcc18, но расскажу общие принципы программирования FLASH памяти для микроконтроллера pic18f67j50. Вообще говоря, все это подробно "разжевано" в Data Sheet, но, тем не менее.

Программирование FLASH для pic18f67j50 имеет такие особенности:

1) Прежде чем что-то записать в FLASH, необходимо память очистить. Очищать (стирать) можно только блоками по 1024 (1К) байт, ни как не меньше, т.е. адрес стираемого блока всегда будет кратен 1К, а мл. биты будут проигнорированы. Для очистки памяти можно воспользоваться предлагаемой процедурой:
Код:
void ERASE_FLASHROM(far rom void * FLASH_Adress)
{
    TBLPTR = (unsigned short long) FLASH_Adress;

    EECON1bits.WREN  = 1;   // enable write to memory
    EECON1bits.FREE  = 1;   // Enable Row Erase operation

    TABLAT = INTCON;        // save interrupts  
    INTCON = 0;             // disable interrupts
    
    EECON2 = 0x55;      
    EECON2 = 0xAA;
    EECON1bits.WR = 1;      // start erase (CPU stall)

    INTCON = TABLAT;        // restore interrupts

    EECON1bits.WREN  = 0;   // disable write to memory
}
Здесь и далее примеры приведены на mcc18, но общий принцип, я думаю, понятен.

2) Дальше разработчик (Microchip) предлагает два варианта записи:

2а) Запись блоками по 64 байта, не более 16 блоков, если Вы хотите остаться в пределах очищенной страницы (16 * 64 = 1024). Для реализации такого варианта предлагается следующая процедура:
Код:
unsigned char   PROGRAM_BLOCK_FLASHROM(far ram void * RAM_Adress, far rom void * FLASH_Adress, unsigned char BlockCount)
{
 unsigned char  count1;
 unsigned char  count2;
 unsigned char* point;

    TBLPTR   = (unsigned short long) FLASH_Adress;
    TBLPTRL &= 0b11000000;

   _asm TBLRDPOSTDEC _endasm

    point = RAM_Adress;

    for(count1 = 0; count1 < BlockCount; count1++)
     {
        for(count2 = 0; count2 < 64; count2++)
         {
            TABLAT = *point++;
           _asm TBLWTPREINC _endasm
         };

        EECON1bits.WPROG = 0;   // Program 64 bytes on the next WR command
        EECON1bits.FREE  = 0;   // Perform write only
        EECON1bits.WREN  = 1;   // enable write to memory

        TABLAT = INTCON;        // save interrupts
        INTCON = 0;             // disable interrupts
    
        EECON2 = 0x55;      
        EECON2 = 0xAA;
        EECON1bits.WR = 1;      // start program (CPU stall)

        INTCON = TABLAT;        // restore interrupts

        EECON1bits.WREN  = 0;   // disable write to memory
     };

    // Verify

    TBLPTR   = (unsigned short long) FLASH_Adress;
    TBLPTRL &= 0b11000000;

    for(count1 = 0; count1 < BlockCount; count1++)
     {
        for(count2 = 0; count2 < 64; count2++)
         {
           _asm TBLRDPOSTINC _endasm
            if(TABLAT != *(unsigned char*) RAM_Adress) return 0;
            RAM_Adress += 1;
         };
     };

    return 1;
}
RAM_Adress и FLASH_Adress, естественно, кратны 64, мл. 6 бит игнорируются.

2а) Запись словами по 2 байта, не более 512 слов, если Вы хотите остаться в пределах очищенной страницы, если память чистая, то можно и больше. Для реализации такого варианта предлагается следующая процедура:
Код:
unsigned char   PROGRAM_WORD_FLASHROM(unsigned int Word, far rom void * FLASH_Adress)
{
    TBLPTR   = (unsigned short long) FLASH_Adress;
    TBLPTRL &= 0b11111110;

   _asm TBLRDPOSTDEC _endasm

    TABLAT = (unsigned char)  Word;
   _asm TBLWTPREINC _endasm
    TABLAT = (unsigned char) (Word >> 8);
   _asm TBLWTPREINC _endasm

    EECON1bits.WPROG = 1;   // Program 2 bytes on the next WR command
    EECON1bits.FREE  = 0;   // Perform write only
    EECON1bits.WREN  = 1;   // enable write to memory

    TABLAT = INTCON;        // save interrupts
    INTCON = 0;             // disable interrupts
    
    EECON2 = 0x55;      
    EECON2 = 0xAA;
    EECON1bits.WR = 1;      // start program (CPU stall)

    INTCON = TABLAT;        // restore interrupts

    EECON1bits.WREN  = 0;   // disable write to memory

    // Verify

    if(*((unsigned int *)FLASH_Adress) == Word) return 1;
                                          else  return 0;
}
FLASH_Adress, естественно, кратен 2, мл. бит игнорируется.

Любители острых ощущений верификацию могут выкинуть.

Ну и, наконец, пример применения всего этого:
Код:
#include <p18f67j50.h>

void            ERASE_FLASHROM(far rom void * FLASH_Adress);
unsigned char   PROGRAM_BLOCK_FLASHROM(far ram void * RAM_Adress, far rom void * FLASH_Adress, unsigned char BlockCount);
unsigned char   PROGRAM_WORD_FLASHROM(unsigned int Word, far rom void * FLASH_Adress);

// ==========================================================

unsigned char Buff[128];
unsigned char cnt;

void main(void)
{
    for(cnt = 0; cnt < sizeof(Buff); cnt++) Buff[cnt] = cnt;

    ERASE_FLASHROM((far rom void *) 0x1000);
    PROGRAM_BLOCK_FLASHROM(& Buff[0], (far rom void *) 0x1000, 2);

    ERASE_FLASHROM((far rom void *) 0x1400);
    PROGRAM_WORD_FLASHROM(0x1234, (far rom void *) 0x1400);
    PROGRAM_WORD_FLASHROM(0x5678, (far rom void *) 0x1402);
    ClrWdt();
}
Просмотрев, например, в симуляторе Program Memory, можно убедиться, что по адресу 0x1000 в FLASH будет записано 128 байт массива Buff (два блока по 64 байта), а с адреса 0x1400 записаны два числа типа int 0x1234 и 0x5678.

Ко всему написанному следует отнестись творчески, ну, можно, например, очистить себе "большой" кусок памяти или зарезервировать на этапе программирования и постепенно заполнять его словами по 2 байта или блоками по 64 байта. Короче, простор для творчества.

Последний раз редактировалось Vlad&mir; 19.02.2011 в 03:30.
Vlad&mir вне форума   Ответить с цитированием
Старый 19.02.2011, 04:18   #3
OLAND
Senior Member
 
Регистрация: 27.02.2007
Сообщений: 185
Вес репутации: 151/41
OLAND has a spectacular aura aboutOLAND has a spectacular aura about
По умолчанию Re: flash write pic18

вижу FREE не обнулен.

Последний раз редактировалось OLAND; 19.02.2011 в 04:36.
OLAND вне форума   Ответить с цитированием
Старый 19.02.2011, 15:42   #4
OLAND
Senior Member
 
Регистрация: 27.02.2007
Сообщений: 185
Вес репутации: 151/41
OLAND has a spectacular aura aboutOLAND has a spectacular aura about
По умолчанию Re: flash write pic18

только одиночное слово пишет а массив нет курва не думал что будут проблемы с этой херью. STM7 блин никогда не было таких проблем

Последний раз редактировалось OLAND; 19.02.2011 в 15:53.
OLAND вне форума   Ответить с цитированием
Старый 21.02.2011, 19:06   #5
OLAND
Senior Member
 
Регистрация: 27.02.2007
Сообщений: 185
Вес репутации: 151/41
OLAND has a spectacular aura aboutOLAND has a spectacular aura about
По умолчанию Re: flash write pic18

Если прваильно понял он (HITECH) делает временный буффер во FLASH а потом копирует по адресу.
OLAND вне форума   Ответить с цитированием
Старый 21.02.2011, 20:51   #6
Vlad&mir
Senior Member
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 1,720
Вес репутации: 4345/92
Vlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond repute
По умолчанию Re: flash write pic18

Цитата:
Сообщение от OLAND Посмотреть сообщение
Уж 5 часов мучаюсь не могу записать на 18F67j50 на FLASH

может чего пропустил
чего за ерунда не пойму

оставил только то что не работает.

uint8 _intcon;
TBLPTR = (far uint8*)dst;


EECON1bits.WREN = 1;
EECON1bits.FREE=1;
_intcon=INTCON;
INTCON=0;
EECON2=0x55;
EECON2=0xAA;
NOP();
EECON1bits.WR=1;
while(EECON1bits.WR);
INTCON = _intcon;
GIE=1;

/*while(len--)
{
tablat = 0x11;//*(src++);
asm("tblwt+*");
}*/
TBLPTR = (far uint8*)dst;

TABLAT = 0x0f;
asm("tblwt*+");
TABLAT = 0xaa;
asm("tblwt*");

EECON1bits.WPROG=1;
EECON1bits.WREN = 1;
_intcon=INTCON;
INTCON=0;
EECON2=0x55;
EECON2=0xAA;
NOP();
EECON1bits.WR=1;
while(EECON1bits.WR);
INTCON = _intcon;
EECON1bits.WPROG=0;
EECON1bits.WREN=0;
У Вас установлен флаг программирования одиночного слова, поэтому и пишется только одно слово.
Vlad&mir вне форума   Ответить с цитированием
Старый 21.02.2011, 20:57   #7
Vlad&mir
Senior Member
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 1,720
Вес репутации: 4345/92
Vlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond repute
По умолчанию Re: flash write pic18

Цитата:
Сообщение от OLAND Посмотреть сообщение
Если прваильно понял он (HITECH) делает временный буффер во FLASH а потом копирует по адресу.
HITECH тут не причем. Этот скрытый буфер (на 64 байта) имеется внутри pic18F67j50.
Если ничего не помогает, прочтите инструкцию:
http://ww1.microchip.com/downloads/e...Doc/39775c.pdf
Vlad&mir вне форума   Ответить с цитированием
Старый 22.02.2011, 19:24   #8
OLAND
Senior Member
 
Регистрация: 27.02.2007
Сообщений: 185
Вес репутации: 151/41
OLAND has a spectacular aura aboutOLAND has a spectacular aura about
По умолчанию Re: flash write pic18

Как раз очень причем Скрытый буфер не поможет если тебе надо стереть 1024 а записать 64. значит как минимум (1024-64) где то надо укладывать. Что и делает HITECH он ложит все в другое место а потом снова записывает. Проблема в том что это долго. Я вышел из этого так что записвал по словам. получилось в 2 раза быстрее.
OLAND вне форума   Ответить с цитированием
Старый 23.02.2011, 08:31   #9
Vlad&mir
Senior Member
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 1,720
Вес репутации: 4345/92
Vlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond repute
По умолчанию Re: flash write pic18

Цитата:
Сообщение от OLAND Посмотреть сообщение
Как раз очень причем Скрытый буфер не поможет если тебе надо стереть 1024 а записать 64. значит как минимум (1024-64) где то надо укладывать. Что и делает HITECH он ложит все в другое место а потом снова записывает. Проблема в том что это долго. Я вышел из этого так что записвал по словам. получилось в 2 раза быстрее.
Не знаю, причем тут HITECH, но именно такой прядок действий предлагает разработчик:
Цитата:
6.5.1 FLASH PROGRAM MEMORY WRITE
SEQUENCE
The sequence of events for programming an internal
program memory location should be:
1. Read 1024 bytes into RAM.
2. Update data values in RAM as necessary.
3. Load Table Pointer register with address being
erased.
4. Execute the row erase procedure.
5. Load Table Pointer register with address of first
byte being written, minus 1.
6. Write the 64 bytes into the holding registers with
auto-increment.
7. Set the WREN bit (EECON1<2>) to enable byte
writes.
8. Disable interrupts.
9. Write 55h to EECON2.
10. Write 0AAh to EECON2.
11. Set the WR bit. This will begin the write cycle.
12. The CPU will stall for duration of the write for TIW
(see parameter D133A).
13. Re-enable interrupts.
14. Repeat steps 6 through 13 until all 1024 bytes
are written to program memory.
15. Verify the memory (table read).
И ничего тут не поделаешь, только временный "буффер" нужно организовать не во FLASH, а в RAM.
А что касается скорости, то ресурс циклов записи во FLASH память программ ограничен:
Цитата:
• Flash Program Memory of 10000 Erase/Write
Cycles and 20-Year Data Retention
Так что во FLASH можно хранить только редко меняющиеся данные, ну настойки там всякие и т.п. и в этой ситуации скорость записи решающего значения не имеет. Напомню, что в часе всего 3600 секунд.
Vlad&mir вне форума   Ответить с цитированием
Старый 23.02.2011, 18:25   #10
OLAND
Senior Member
 
Регистрация: 27.02.2007
Сообщений: 185
Вес репутации: 151/41
OLAND has a spectacular aura aboutOLAND has a spectacular aura about
По умолчанию Re: flash write pic18

да только вопрос в том где найти 1024 если уже занято это до фига слишком у 45к20 например можно по 64 фсе делать. А у меня знакомый как то не стирая пишет только если на начале блока то стирает. у меня не пишется почему то.
OLAND вне форума   Ответить с цитированием
Старый 25.01.2013, 19:23   #11
Mernik
Member
 
Регистрация: 17.11.2010
Адрес: Киев
Возраст: 30
Сообщений: 69
Вес репутации: 130/26
Mernik will become famous soon enoughMernik will become famous soon enough
По умолчанию Re: flash write pic18

Vlad&mir Уважаемый, спасибо очень помогли ваши примеры!
Но хотелось бы спросить откуда вы взяли эти команды?

Код:
_asm TBLRDPOSTDEC _endasm
_asm TBLWTPREINC _endasm
Ни в даташите на мой pic18f97j60, ни в хелпе с18 я их не нашел зато все прекрасно работает
Mernik вне форума   Ответить с цитированием
Старый 25.01.2013, 19:34   #12
Vlad&mir
Senior Member
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 1,720
Вес репутации: 4345/92
Vlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond repute
По умолчанию Re: flash write pic18

Цитата:
Сообщение от Mernik Посмотреть сообщение
Vlad&mir Уважаемый, спасибо очень помогли ваши примеры!
Но хотелось бы спросить откуда вы взяли эти команды?

Код:
_asm TBLRDPOSTDEC _endasm
_asm TBLWTPREINC _endasm
Ни в даташите на мой pic18f97j60, ни в хелпе с18 я их не нашел зато все прекрасно работает
MPLAB C18 C Compiler User's Guide and Release Notes, MPLAB® C18 C COMPILER USER’S GUIDE, раздел 2.8.2 - Inline Assembly.
Vlad&mir вне форума   Ответить с цитированием
Старый 25.01.2013, 19:44   #13
Mernik
Member
 
Регистрация: 17.11.2010
Адрес: Киев
Возраст: 30
Сообщений: 69
Вес репутации: 130/26
Mernik will become famous soon enoughMernik will become famous soon enough
По умолчанию Re: flash write pic18

Спасибо за ответ, нашел где вы показали, но как то это все странно,
в даташите есть команды контроллера

Код:
_asm

TBLRD*
TBLRD*+
TBLRD*-TBLRD+*
TBLWT*
TBLWT*+
TBLWT*-TBLWT+*

_endasm
зачем их приводить если они не работают, точнее даж не компилится... это наверно я чего-то не до понимаю
Mernik вне форума   Ответить с цитированием
Старый 25.01.2013, 19:55   #14
Vlad&mir
Senior Member
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 1,720
Вес репутации: 4345/92
Vlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond repute
По умолчанию Re: flash write pic18

Цитата:
Сообщение от Mernik Посмотреть сообщение
Спасибо за ответ, нашел где вы показали, но как то это все странно,
в даташите есть команды контроллера

Код:
_asm

TBLRD*
TBLRD*+
TBLRD*-TBLRD+*
TBLWT*
TBLWT*+
TBLWT*-TBLWT+*

_endasm
зачем их приводить если они не работают, точнее даж не компилится... это наверно я чего-то не до понимаю
Они работают, если писать на asm. Если использовать ассемблерные вставки в C18, то см. выше. Просто синтаксис языка C такой конструкцией: TBLRD+* "подавится".
Vlad&mir вне форума   Ответить с цитированием
Старый 25.01.2013, 20:38   #15
Mernik
Member
 
Регистрация: 17.11.2010
Адрес: Киев
Возраст: 30
Сообщений: 69
Вес репутации: 130/26
Mernik will become famous soon enoughMernik will become famous soon enough
По умолчанию Re: flash write pic18

вот оно где зарыта собака, я был уверен что ассемблерные вставки это и есть чистый ассемблер, а оказывается еще надо по хитрому все вставлять спасибо!
Mernik вне форума   Ответить с цитированием
Старый 07.08.2014, 17:25   #16
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 32
Сообщений: 2,085
Вес репутации: 3340/90
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: flash write pic18

Цитата:
Сообщение от Vlad&mir Посмотреть сообщение
Код:
unsigned char   PROGRAM_BLOCK_FLASHROM(far ram void * RAM_Adress, far rom void * FLASH_Adress, unsigned char BlockCount)
{
 unsigned char  count1;
 unsigned char  count2;
 unsigned char* point;

    TBLPTR   = (unsigned short long) FLASH_Adress;
    TBLPTRL &= 0b11000000;

   _asm TBLRDPOSTDEC _endasm

    point = RAM_Adress;

    for(count1 = 0; count1 < BlockCount; count1++)
     {
        for(count2 = 0; count2 < 64; count2++)
Прошу прощения за воскрещение давно почившей темы. Можно глупый вопрос: зачем тут эта конструкция (выделено красным)?
Romantic вне форума   Ответить с цитированием
Старый 07.08.2014, 17:39   #17
concess
Senior Member
 
Регистрация: 19.06.2012
Адрес: Ростов-на-Дону
Возраст: 43
Сообщений: 157
Вес репутации: 469/24
concess is a glorious beacon of lightconcess is a glorious beacon of lightconcess is a glorious beacon of lightconcess is a glorious beacon of lightconcess is a glorious beacon of light
По умолчанию Re: flash write pic18

Я бы прочитал как Table reader post decrement.
concess вне форума   Ответить с цитированием
Старый 07.08.2014, 17:52   #18
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 32
Сообщений: 2,085
Вес репутации: 3340/90
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: flash write pic18

Цитата:
Сообщение от concess Посмотреть сообщение
Я бы прочитал как Table reader post decrement.
Я не спрашиваю "Что это?", я спрашиваю "Зачем?" Зачем читать из флеша, если я планирую записывать? На ум приходит, что это артефакт от старого модифицированного кода. Но я могу ошибаться, почему и спрашиваю.
Romantic вне форума   Ответить с цитированием
Старый 07.08.2014, 19:03   #19
concess
Senior Member
 
Регистрация: 19.06.2012
Адрес: Ростов-на-Дону
Возраст: 43
Сообщений: 157
Вес репутации: 469/24
concess is a glorious beacon of lightconcess is a glorious beacon of lightconcess is a glorious beacon of lightconcess is a glorious beacon of lightconcess is a glorious beacon of light
По умолчанию Re: flash write pic18

Тогда так. Читаем и если планируемые к записи данные уже есть то ничего писать не надо.
concess вне форума   Ответить с цитированием
Старый 07.08.2014, 19:48   #20
Vlad&mir
Senior Member
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 1,720
Вес репутации: 4345/92
Vlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond repute
По умолчанию Re: flash write pic18

Цитата:
Сообщение от Romantic Посмотреть сообщение
Прошу прощения за воскрещение давно почившей темы. Можно глупый вопрос: зачем тут эта конструкция (выделено красным)?
Здесь указатель нужно назад откатить, потому что далее " PREINC", чтобы указатель не вышел за границу сегмента.
Vlad&mir вне форума   Ответить с цитированием
Старый 08.08.2014, 11:53   #21
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 32
Сообщений: 2,085
Вес репутации: 3340/90
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: flash write pic18

Цитата:
Сообщение от Vlad&mir Посмотреть сообщение
Здесь указатель нужно назад откатить, потому что далее " PREINC", чтобы указатель не вышел за границу сегмента.
О, теперь понятно! А почему тогда POSTINC не применить?
Romantic вне форума   Ответить с цитированием
Старый 08.08.2014, 12:20   #22
Vlad&mir
Senior Member
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 1,720
Вес репутации: 4345/92
Vlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond repute
По умолчанию Re: flash write pic18

Цитата:
Сообщение от Romantic Посмотреть сообщение
О, теперь понятно! А почему тогда POSTINC не применить?
Тогда, после записи сегмента указатель будет указывать на следующий сегмент и при подаче команды программирования будет "прошит" именно он. Я пробовал откатить указатель после перезаписи - не работает. Во всяком случае Microchip даёт в даташите именно такой порядок действий.
Vlad&mir вне форума   Ответить с цитированием
Старый 08.08.2014, 12:32   #23
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 32
Сообщений: 2,085
Вес репутации: 3340/90
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: flash write pic18

Цитата:
Сообщение от Vlad&mir Посмотреть сообщение
Тогда, после записи сегмента указатель будет указывать на следующий сегмент и при подаче команды программирования будет "прошит" именно он. Я пробовал откатить указатель после перезаписи - не работает. Во всяком случае Microchip даёт в даташите именно такой порядок действий.
Понятно. Никак не мог вкурить, зачем этои танцы с бубном, а оно вон как! Спасибо!
Romantic вне форума   Ответить с цитированием
Старый 12.09.2014, 11:31   #24
SergR
Junior Member
 
Регистрация: 11.05.2013
Возраст: 40
Сообщений: 2
Вес репутации: 100/0
SergR will become famous soon enoughSergR will become famous soon enough
По умолчанию Re: flash write pic18

Доброго времени суток коллеги.
Я сейчас упражняюсь в записи во флеш на 18F25K80 используя функции WriteBlockFlash и EraseFlash. Функция EraseFlash чётко стирает блоки по 64 бита всё ок, а вот функция WriteBlockFlash записывает блоки не по 64 байта а по 32 байта... хотя в даташите чётко прописано "A write to program memory is executed on blocks of 64 bytes at a time" не могу понять в чём прикол, это фича или баг?
SergR вне форума   Ответить с цитированием
Старый 08.06.2017, 15:37   #25
diman891
Member
 
Регистрация: 01.03.2007
Сообщений: 34
Вес репутации: 100/40
diman891 will become famous soon enoughdiman891 will become famous soon enough
По умолчанию Re: flash write pic18

Народ, выручайте. в pic18f25j11 flash никак не реагирует ни на какие команды. перепробовал все возможные варианты и библиотеки.

функция стирания тоже не работает
Код:
    TBLPTRU=0x00;
    TBLPTRH=0x20;
    TBLPTRL=0x00;
    EECON1bits.WPROG=0;
    EECON1bits.WREN  = 1;   // enable write to memory
    EECON1bits.FREE  = 1;   // Enable Row Erase operation
    GIE=0;
    
    EECON2 = 0x55;      
    EECON2 = 0xAA;
    EECON1bits.WR = 1;      // start erase (CPU stall)

    EECON1bits.WREN  = 0;   // disable write to memory
Проверяю программатором - не стирает

Функция записи взята из этой ветки, только указатели убраны
Код:
unsigned char   PROGRAM_WORD_FLASHROM(unsigned int Word, unsigned short long FLASH_Adress)
{
    TBLPTR   = (unsigned short long) FLASH_Adress;
    TBLPTRL &= 0b11111110;

   asm("TBLRDPOSTDEC");

    TABLAT = (unsigned char)  Word;
   asm("TBLWTPREINC");
    TABLAT = (unsigned char) (Word >> 8);
   asm("TBLWTPREINC");

    EECON1bits.WPROG = 1;   // Program 2 bytes on the next WR command
    EECON1bits.FREE  = 0;   // Perform write only
    EECON1bits.WREN  = 1;   // enable write to memory

    TABLAT = INTCON;        // save interrupts
    INTCON = 0;             // disable interrupts
    
    EECON2 = 0x55;      
    EECON2 = 0xAA;
    EECON1bits.WR = 1;      // start program (CPU stall)

    INTCON = TABLAT;        // restore interrupts

    EECON1bits.WREN  = 0;   // disable write to memory

    // Verify

    if(*((unsigned int *)FLASH_Adress) == Word) return 1;
                                          else  return 0;
}
не пишет!

биты конфигурации
Код:
// CONFIG1H
#pragma config CP0 = OFF        // Code Protect (Program memory is not code-protected)

// CONFIG4L
#pragma config WPFP = PAGE_0    // Write/Erase Protect Page Start/End Location (Write Protect Program Flash Page 0)
#pragma config WPEND = PAGE_0   // Write/Erase Protect Region Select (valid when WPDIS = 0) (Page 0 through WPFP<5:0> erase/write protected)
#pragma config WPCFG = OFF      // Write/Erase Protect Configuration Region (Configuration Words page not erase/write-protected)

// CONFIG4H
#pragma config WPDIS = ON      // Write Protect Disable bit (WPFP<5:0>/WPEND region ignored)
Как не менял, ничего не помогает..

MPLAB X 3.51
XC8 1.41
diman891 вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запись во flash pic24fj64ga004 inna Продукция MICROCHIP 14 09.11.2010 19:38
MSP430F47166 Flash INFO - вынос мозга quarry Микроконтроллеры других производителей 1 17.08.2010 17:12
запись/чтение Flash памяти PIC18, Hi-Tech Compiler addi Продукция MICROCHIP 7 26.12.2009 19:48
Неработает программная запись во FLASH для pic16f876A на HT-PICC socia Продукция MICROCHIP 19 05.10.2009 18:10
Одинаковая цена на PIC18, PIC24, dsPIC33 (?как так?) Picozoid Продукция MICROCHIP 25 21.08.2007 15:57


Часовой пояс GMT +3, время: 05:49.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot