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

 
 
> Программирование MC через Ethernet
3.14
сообщение Apr 20 2007, 12:22
Сообщение #1


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Терзаю LPC2378 под управлением NicheLite ...
Есть желание прикрутить механизм смены прошивки "на лету" через эзернет, а конкрктнее используя стек NicheLite, через TCP соединение.
Думаю, вариантов тут не много ... одна версия NicheLite (минимальная) выступает в роли загрузчика (или базовой аварийной версии), другая размещается выше (которая и будет перезаливаться).
Примерный механизм сены прошивки:
1) говорм устройству что нужно обновить фирмварь, та во флешке сохраняет флажек PROGRAM, перезапускает контроллер
2) "базовая" версия при запуске смотрит состояние PROGRAM флага, если не активен, то тупо предает управление "рабочей" версии, если PROGRAM активен то ждет обновления прошивки потом сбрасывает PROGRAM и рестарт

Рассматривал еще вариант с двумя полноценными прошивками, если нужно то одна заменяет другую, но при этом прийдется еще загрузчик клеить чтоб анализировал целостность и передавал управление нужной прошивке.

...


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
3.14
сообщение Apr 24 2007, 14:55
Сообщение #2


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Чего то я слегка заблудился в IAP.
Перед началом программирования флешки, провожу препарирование нужных секторов потом стираю потом проверяю, все ОК.
Далее начинаю засылать в контроллер странички по 256 байт и заливаю их (cм. листинг).
Процесс заканчивается без ошибок, но вот реальное содержимое флешки после программирования не совпадает. Несколько первых страниц (~10) пишутся без проблем затем начинаются "пробелы" чистой флеши. Еще очень не понятно, если в препаре LAST_SECTOR указать текущий, то когда странички доберутся до следующего сектора все встанет.

Код
int ProgramFirmware(unsigned char first_sect, int page, char *  buf)
{
int i,j;
char start_sect,last_sect;
unsigned long Pointer;
  start_sect = floor(page/128) + first_sect;
  last_sect = start_sect;
  switch(first_sect)
  {
    case 10:
      Pointer =  0x18000;
    break;
    case 11:
      Pointer =  0x20000;
    break;
    case 12:
      Pointer =  0x28000;
    break;
    case 13:
      Pointer =  0x30000;
    break;
    case 14:
      Pointer =  0x38000;
    break;
    case 15:
      Pointer =  0x40000;
    break;
    case 16:
      Pointer =  0x48000;
    break;
    case 17:
      Pointer =  0x50000;
    break;
    case 18:
      Pointer =  0x58000;
    break;
    case 19:
      Pointer =  0x60000;
    break;
    default : return FALSE;
  }
  Pointer = Pointer + ((unsigned long)page * 256);

  Iap.status=CMD_SUCCESS+1;
  while(Iap.status!=CMD_SUCCESS)
  {
    IDISABLE;
     Iap.cmd=IAP_CMD_PREPARE;
     Iap.par[0]=start_sect;
     Iap.par[1]=last_sect+6; //!!! странность
     iap_exec(&Iap);
    IENABLE;
  }
  IDISABLE;
   Iap.cmd=IAP_CMD_WRITE;
   Iap.par[0]=Pointer;
   Iap.par[1]=(unsigned long) buf;
   Iap.par[2]=256;
   Iap.par[3]=Fcclk/1000;
   iap_exec(&Iap);
  IENABLE;
  while(Iap.status!=CMD_SUCCESS);
  return TRUE;
}


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post



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

 


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


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