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

 
 
> алгоритм декомпрессии LZMA, для прошивки ПЛИС
cornflyer
сообщение Nov 22 2009, 14:43
Сообщение #1


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

Группа: Свой
Сообщений: 166
Регистрация: 11-07-06
Из: Dubna
Пользователь №: 18 729



Есть желание программировать ПЛИС (xilinx spartan 3) из процессора (lpc2148)
Сжал утилитой LZMA прошивку для ПЛИС (файл *.rbt) размером 1.8 Mb,
получился файл 12kb.

Как этот файл подшить в мой проект? (использую Keil)
Т.е. как его запихнуть во FLASH и потом прочитать?
Может есть у кого-нить готовый код?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
cornflyer
сообщение Nov 22 2009, 19:24
Сообщение #2


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

Группа: Свой
Сообщений: 166
Регистрация: 11-07-06
Из: Dubna
Пользователь №: 18 729



не хватает хэд-файлов для компиляции этой утилиты sad.gif
может есть уже откомпилированная? под линукс или под винду - любому бинарику буду рад smile.gif
Go to the top of the page
 
+Quote Post
VslavX
сообщение Nov 22 2009, 20:04
Сообщение #3


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Используемый мной вариант под win32 - в аттаче
Прикрепленные файлы
Прикрепленный файл  f2a.rar ( 17.3 килобайт ) Кол-во скачиваний: 163
 
Go to the top of the page
 
+Quote Post
cornflyer
сообщение Nov 22 2009, 20:25
Сообщение #4


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

Группа: Свой
Сообщений: 166
Регистрация: 11-07-06
Из: Dubna
Пользователь №: 18 729



спасибо! кажеца работает!!!
щас попробую распаковать процессором свой архив и прошить ПЛИС
Go to the top of the page
 
+Quote Post
KAlex
сообщение Nov 23 2009, 08:27
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



Вот моя програмка для упаковки прошивки для ПЛИС.
Адаптированный Хафман для *.rbf
Прикрепленный файл  Hafm.zip ( 200.66 килобайт ) Кол-во скачиваний: 157


Вот код распаковки, прошивка берется из внешней еепром, но это легко изменить.
Код
void programm_acex(void){
  unsigned int bytecounter;
  unsigned char outbyte, cnt1s;
  unsigned char a[16];

  i2c_start_wait(EEPROM_24256+I2C_WRIT);
  i2c_write(acexhex >> 8);
  i2c_write(acexhex & 0xFF);
  i2c_rep_start(EEPROM_24256+I2C_READ);
  for (outbyte=0;outbyte<16;outbyte++) a[outbyte] = i2c_readAck();
  
  acc = i2c_readAck();
  acnt = 8;
  bytecounter = 0;

  for (;;) {
    outbyte = 0;
    if ( get1bit() )
    {
      for (cnt1s=1;cnt1s<5;cnt1s++)
         if (!(get1bit())) break;
      if (cnt1s == 5)
        for (cnt1s=0;cnt1s<8;cnt1s++) outbyte = (outbyte << 1) + get1bit();
        else {
          cnt1s = ((((cnt1s-1)<<1) + get1bit())<<1)+get1bit();
          outbyte = a[cnt1s];
        }
    }    
    outbyte2acex(outbyte);
    if ( bytecounter++ == acexsize) break;
  }

  outbyte2acex(0);
  outbyte2acex(0);

  i2c_readNak();        
  i2c_stop();
}

unsigned char get1bit(void){
  unsigned char retval;
  
  retval = ((acc&0x80) != 0);
  acc <<= 1;
  if ( !(--acnt) ) {
    acc = i2c_readAck();
    acnt = 8;
  }    
  return retval;
}


Может поможет.
Go to the top of the page
 
+Quote Post



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

 


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


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