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

 
 
> Запись во флэш mb90f474l из программы, Как-то нестабильно работает :(
raider
сообщение Jul 10 2007, 11:42
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 117
Регистрация: 11-05-05
Из: г. Москва
Пользователь №: 4 916



Есть сабжевый контроллер. Один из секторов внутренней флэш памяти хочу использовать для сохранения пользовательских данных. Процедуру записи во флэш взял из примеров от fujitsu. Контроллер на данной процедуре периодически подвисает. Т.е. может и нормально прошить если функцию немного погонять, но обычно виснет. Ниже исходник функции с выводом отладочной инфы. Виснет после 4.
Код
/* Flash Memory write function, writes a buffer (Buffer_Add) to the Flash memory, size is number of words */
__near UINT8 Flash_Write(__far UINT16 *Flash_Add, UINT16 *Buffer_Add, INT16 numwords) {

  INT16 flag;  /* flag to indicate end of Flash memory write cycle */
  
////
UINT32 f = (UINT32)Flash_Add;
UINT32 b = (UINT32)Buffer_Add;
puthex(f>>24);puthex(f>>16);puthex(f>>8);puthex(f);puts("\n\r");
puthex(b>>24);puthex(b>>16);puthex(b>>8);puthex(b);puts("\n\r");
puthex(numwords>>8);puthex(numwords);puts("\n\r");

  __DI();
  if(FMCS_RDY == 0)Read_Reset();
  
  FMCS_WE = 1; /* enable write access to Flash memory */

  while (numwords >0) {
        flag=0;
////
puts("1");
        *SEQ_AAAA = 0xAA; /* unlock sequence for Flash memory write */
////
puts("2");
        *SEQ_5554 = 0x55;
////
puts("3");
        *SEQ_AAAA = 0xA0;
////
puts("4");
        *Flash_Add = *Buffer_Add;
////
puts("5");
        
        while (flag == 0) {
               if((*Flash_Add & 0x0080) == (*Buffer_Add & 0x0080)) { /* write cycle finished succesfully? */
                  flag = 1;
                  numwords--;
                  Flash_Add++;
                  Buffer_Add++;
               }

               else {
                  if((*Flash_Add & 0x0020) == 0x0020) { /* time limit exceeded? */
                     if((*Flash_Add & 0x0080) == (*Buffer_Add & 0x0080)) { /* write cycle finished succesfully? */
                        flag = 1;
                        numwords--;
                        Flash_Add++;
                        Buffer_Add++;
                     }

                     else {
                        flag = 2;
                        Read_Reset();
                        FMCS_WE = 0; /* disable Flash write */
                        __EI();
                        return(2);   /* return value 2, write buffer aborted due to timeout error */
                     }
                  }
               }
        }
        
  }  
  
  FMCS_WE = 0; /* disable Flash write */
  __EI();
  return(3);   /* return value 3, write buffer finished successfully */
}


Вывод в консоль:
Код
00FF8000
000022EC
0046
1234


PS: Watchdog отключен.
Что может быть?
PS2: Тут вдруг подумалось, а не может ли это быть из-за того, что контроллер 474l работает на 16МГц (4 кварц * 4 множитель)?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
spf
сообщение Aug 1 2007, 08:27
Сообщение #2


Странник
****

Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051



Цитата(raider @ Jul 10 2007, 17:42) *
PS: Watchdog отключен.
Что может быть?
PS2: Тут вдруг подумалось, а не может ли это быть из-за того, что контроллер 474l работает на 16МГц (4 кварц * 4 множитель)?

Все работает на всех частотах и с WDT. За примеры надо брать исходники bootloader.

Цитата(k_max @ Aug 1 2007, 11:00) *
2. В Start.asm - включить RAM-CODE ON (пункт 4.6/если не ошибаюсь).

Это нереально, сами посудите... прога стартует во Flash, а стартовый код кем-то до этого должен быть закинут в RAM.

Цитата
3. Функция puts тоже должна быть в RAM, не использовать прерываний.

Совсем не обязательно, в RAM должны быть только функции по работе с FLASH (запись слова, стирание сектора). Эти операции должны быть атомарны, из них никаких выводов делать нельзя, только через возвращаемый параметр или т.п.


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post



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

 


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


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