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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
alexPec
сообщение Oct 13 2014, 15:59
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Добрый день всем. Спаяли железо с ADV212, начинаю запускать. Сразу беда - не читаются прямо адресуемые регистры. Точнее читаются, но не те значения что я пишу.

Сигналы подаю по даташиту, дожидаюсь АСК от чипа (он приходит).

Делаю так:

1.Подаю питание (в норме, проверял)
2.Подаю клок 20МГц на МCLK
3.Подаю отрицательный импульс на reset
4.По адресу (прямому) 0xF пишу число 4
5.По адресу (прямому) 0xЕ пишу число 8
6.Читаю адрес 0xE - получаю 0x8B
7.Читаю адрес 0xF - получаю 0xB.

Клок померял прямо на шарике ADV212 - 20МГЦ приходит.
Сигналы RD, WR,CS - думаю тоже нормально доходят, поскольку ACK от чипа приходит и на чтение, и на запись.
Данные и адреса (он идут с ПЛИС) смотрел сигнал-тапом, все в норме.

При чтении регистров (прямых) всех кроме BUSMODE, MMODE, PLL_HI, PLL_LO ACK от чипа не приходит.

Кто что может посоветовать, что еще проверить? Похоже не запускается PLL внутренняя, есть там какие-то хитрости? Хотя написано, что регистры BUSMODE, MMODE, PLL_HI, PLL_LO не требуют клока вообще.
Мысль только менять чип, охота услышать мнение специалиста, работавшего с этим чипом.
Go to the top of the page
 
+Quote Post
Alex11
сообщение Oct 13 2014, 16:32
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Странно это. Чип, конечно, кривенький, но не в этом месте. Прямые регистры читались/писались без вопросов. Из наводящих вопросов - присинхронизовано ли обращение к MCLK? Если ли пауза между снятием reset и обращением? Я уже с трудом помню, что там было. У меня устройство с ним уже четыре года в серии после последних изменений, давно не влезал в проект.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Oct 14 2014, 07:03
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Alex11 @ Oct 13 2014, 20:32) *
Странно это. Чип, конечно, кривенький, но не в этом месте. Прямые регистры читались/писались без вопросов. Из наводящих вопросов - присинхронизовано ли обращение к MCLK? Если ли пауза между снятием reset и обращением? Я уже с трудом помню, что там было. У меня устройство с ним уже четыре года в серии после последних изменений, давно не влезал в проект.


По синхронизации - скорее нет, чем да. Клок того что читает и клок самой ADV - от разных PLL, но эти PLL тактируются от одного источника клока. Частоты у них не кратные, поэтому фронты/спады могут попасть как попало.

Паузы есть, отлаживаю пошагово, поэтому пауза >1c
Go to the top of the page
 
+Quote Post
Alex11
сообщение Oct 14 2014, 16:16
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



А длительности при этом достаточные? Там они определяются в JCLK. При ненастроенной PLL могут быть большими.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Oct 14 2014, 20:58
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Alex11 @ Oct 14 2014, 20:16) *
А длительности при этом достаточные? Там они определяются в JCLK. При ненастроенной PLL могут быть большими.


Ну вроде понятно стало откуда ноги растут. Сегодня сделал так: активизировал чтение и удерживал RD активным, померял сигналы на шине данных - все линии в норме кроме младших двух разрядов - они болтаются в третьем состоянии. Вызвонил линии прямо на шариках ADV (как раз крайний ряд) - линия целая, пайка в норме. Видно что шарики приплюснуты и пропаяно все хорошо. Похоже на сборке перегрели, другого объяснения пока не вижу. Попробую поменять чип.

Спасибо за помощь!
Go to the top of the page
 
+Quote Post
alexPec
сообщение Oct 23 2014, 09:50
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



А что чип делает, если уставки размера картики (активные пиксели по вертикали, горизонтали, бланк-интервалы) не совпадают с реальным потоком? И как это отследить?
Go to the top of the page
 
+Quote Post
Alex11
сообщение Oct 24 2014, 18:03
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Я не пытался ставить ему кривые параметры, он и при прямых-то еле работает.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Oct 25 2014, 11:13
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Alex11 @ Oct 24 2014, 22:03) *
Я не пытался ставить ему кривые параметры, он и при прямых-то еле работает.


Я вот хочу подать на него 8 бит и задумался: на примерах для PAL везде 10 бит и цепляются они к VDATA[11..2]. А 8 бит куда подать, на [11..4] или на [9..2] или на [7..0]? Все доки перевыкурил, конкретики не нашел, но везде написано что поддерживается 8- 12- 16- бит. Куда их цеплять- загадка.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 25 2014, 14:44
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



10 бит дает 1024 уровня
8 бит дает 256 уровней
чтобы равномерно распределить 1024 уровня на 256 сохранив тот же диапазон, надо на каждую единицу из 256 подать 1024/256=4 единицы, то есть каждое изменение на 1 вызывает изменение на 4. Другими словами ваши уровни надо умножить на 4, то есть сдвинуть на 2 бита.
так что цепляйте их к 11...4, а младшие 4 бита зажимайте в 0.
10 подцепленные к 11..2 - это расширение 10 бит до 12
вы расширите 8 бит до 12.

но тут еще такая фигня, надо поглядеть сам алгоритм кодирования, часто младшие биты сильнее режут, так как считается что в них мало информации, а в основном шум. С другой стороны, если в исходном сигнале есть большие перепады между соседними точками (в случае если вы 8 бит двините к 16, обнулив 8 младших бит) это может вызывать артифакты для некоторых алгоритмов кодирования. Потому, наверное, и ставят в серединку...
Go to the top of the page
 
+Quote Post
alexPec
сообщение Oct 25 2014, 18:09
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Golikov A. @ Oct 25 2014, 18:44) *
10 бит дает 1024 уровня
8 бит дает 256 уровней
чтобы равномерно распределить 1024 уровня на 256 сохранив тот же диапазон, надо на каждую единицу из 256 подать 1024/256=4 единицы, то есть каждое изменение на 1 вызывает изменение на 4. Другими словами ваши уровни надо умножить на 4, то есть сдвинуть на 2 бита.
так что цепляйте их к 11...4, а младшие 4 бита зажимайте в 0.
10 подцепленные к 11..2 - это расширение 10 бит до 12
вы расширите 8 бит до 12.

но тут еще такая фигня, надо поглядеть сам алгоритм кодирования, часто младшие биты сильнее режут, так как считается что в них мало информации, а в основном шум. С другой стороны, если в исходном сигнале есть большие перепады между соседними точками (в случае если вы 8 бит двините к 16, обнулив 8 младших бит) это может вызывать артифакты для некоторых алгоритмов кодирования. Потому, наверное, и ставят в серединку...


Да это понятно, вопрос был в том, с каких ног чип считывает эти 8 бит, ведь у него для пиксел - интерфейса 16 ног. Ну да с этим разобрался.

Другой затык: делаю все по этому алгоритму (картинка). Все проходит нормально - проверяю firmware ID - соответствует. Пытаюсь очистить флаги прерываний - записываю по адресу 6 хост-интерфейса (EIRQFLG) значение 0xFFFF, считываю флаги - как было там значение 15 (0xF) так и остается. Короче, флаги прерываний не сбрасываются. Пытался несколько раз записать 0xffff - результат тот же, флаги остаются в единице.
Думал может действительно в code fifo что-то есть - пытаюсь читать direct регистр по адресу 1 (code fifo) - не получаю ACK.
Параметры пишу следующие (по адресу 0x57f00, установлен автоинкремент на 16 бит):

0x0100 - pal 422, 8bit
0x0303 - 3level transform, unipolar C, unipolar Y
0x0300 - Codeblock 128x32, irreversible 9x7
0x0000 - No skip fields, no attribute data
0x0101 - target rate control,
0x04ac - image size = 66732bytes
0x0041 - LRCP, HVF pins
0x0002 - quantization factor 1x, JP2 format

Все взял из рефренса, дальше че-то тупик.
Эскизы прикрепленных изображений
 Р Р€Р С˜Р ВµР Р…ьшено Р Т‘Р С• 74%
Прикрепленное изображение
656 x 534 (81.58 килобайт)
 
Go to the top of the page
 
+Quote Post
Alex11
сообщение Oct 26 2014, 20:47
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Вот теперь и Вы добрались до глюкавых мест. Вы считываете это все на полной скорости программы или в отладчике? Мы видели зависимость от задержек между записями в регистры, сейчас уже не помню точно между какими. Попробуйте посмотреть на нашу инициализацию, может быть поможет:
Код
int adv_init(int pal, unsigned long bit_rate, unsigned short skip_field)
{
  const unsigned short *fw = (const unsigned short *)adv_enc_fw;
  unsigned long fw_addr = ADV2X2_FIRMWARE_START_ADDR;
  unsigned int len = sizeof(adv_enc_fw)/sizeof(unsigned short);
  int err;
  uint32_t reg;

  // Load PLL
  ADV2X2_REG(ADV2X2_PLL_HI) = 0x0008;
  // Delay 20 uS
  DELAY_uS(20);
  // MCLK * 4 = 28.636 MHz * 4 = 114.544 MHz
  ADV2X2_REG(ADV2X2_PLL_LO) = 0x0004;
  // Delay 20 uS
  DELAY_uS(20);
  // Reboot
  ADV2X2_REG(ADV2X2_BOOT) = 0x008A;
  DELAY_uS(1000);
  // Host bus width = 16 bits, DMA bus width = 32 bits
  ADV2X2_REG(ADV2X2_BUSMODE) = 0x9;
  DELAY_uS(1000);
  // Indirect bus width = 16 bits, 16 bits increment
  ADV2X2_REG(ADV2X2_MMODE)  = 0x5;
  DELAY_uS(1000);

  // Upload firmware
  // Setup address of firmware
  ADV2X2_REG(ADV2X2_STAGE) = fw_addr>>16;
  ADV2X2_REG(ADV2X2_IADDR) = fw_addr;
  while (len--) {
    unsigned short data = *fw++;
    ADV2X2_REG(ADV2X2_IDATA) = (data >> 8) | (data << 8);
  }

  /* Start setting parameters */
  adv_enter_set_param();

  /* Firmware parameters */
  /* SET ENCODE PARAM */
  /* VFORMAT, PREC, XFORMLEV, UNI */
  /*
     Video Standard = PAL de-interlaced
     Precision      = 8bit
     Number of Wavelet Transform Levels = 5 (6 not recommended)
     Component Polarity = Unipolar (¤R<│_- бвRпвм ¤<п RЎ_Ёе бЁ_- <Rў Ё- з_ бЁ_- < ЄаЁўRc)
   */
  /* NTSC = 8, PAL = 9 */
  ADV_IWRITE_32(0x57F00L, (pal) ? 0x09000503L : 0x08000503L);

  /* CBSIZE, WKERNEL, STALLPAR, ATTRTYPE */
  /*
    Code Block Dimensions        = 64x64
    Wavelet Kernel               = Reversible 5x3 (lossless)
    Skip Fields in Encode Mode   = 0
    Attribute Data Output Format = Do not output attribute data
   */
  if (skip_field > 63) skip_field = 63;
  reg = 0x02010000 | ((uint32_t)skip_field<<8);
  debug_print("Reg skip field: ");
  debug_dump_hex((const char *)&reg, 4);
  debug_print("\r\n");
  ADV_IWRITE_32(0x57F04L, reg);

  /* RCTYPE, RCVAL */
  /*
   Rate Control Algorithm = Target size per video field or image within 5% of RCVAL
   RCVAL = Size of field or image in bytes
    PAL 50 field/sec, NTSC = 60 field/sec
    X = brate/(8*fields)
    10MBit 0x010061A8
    20Mbit 0x0100C350
   */
  if (bit_rate > 20*MEGABIT) bit_rate = 20*MEGABIT;
  else if (bit_rate < 1*MEGABIT) bit_rate = 1*MEGABIT;
  /* X = brate/(8*fields) */
  reg = 0x01000000 | (bit_rate/(8*((pal) ? 50 : 60)));
  ADV_IWRITE_32(0x57F08L, reg);

  /* J2KPROG, PICFG, QFACT, COD_STYLE */
  /*
   JPEG2000 Progression Style                 = LRCP
   Pixel Interface Bit Configuration Settings = 0
   Quantization Factor                        = 256/256 factor (1x)
   Output Code Stream Format                  = j2c, PPT, PLT, SOP, EPH
   */
#ifdef EAV_SAV_VMODE
  ADV_IWRITE_32(0x57F0CL, 0x000100F1L);
#else
  ADV_IWRITE_32(0x57F0CL, 0x004B00F1L);
#endif // EAV_SAV_VMODE


  //-----------------------------------------------------------------------------  
  /* PMODE1 */
  /* Cb/Y/Cr/Y interleaved, 8 bit */
  ADV_IWRITE_16(0xFFFF0400L, 0x0005);
  /* PMODE2 */
#ifdef EAV_SAV_VMODE
  ADV_IWRITE_16(0xFFFF0448L, 0x0031);
#else
  ADV_IWRITE_16(0xFFFF0448L, 0x003B);
#endif // EAV_SAV_VMODE

  /* VMODE */
#ifdef EAV_SAV_VMODE
  ADV_IWRITE_16(0xFFFF044CL, 0x0002);
#else
  ADV_IWRITE_16(0xFFFF044CL, 0x0006);
#endif // EAV_SAV_VMODE

  /* EDMOD0 register */
  ADV_IWRITE_16(0xFFFF1408L, 0x0002);

  /* EDMOD1 register */
  ADV_IWRITE_16(0xFFFF140CL, 0x0802);

  /* Pixel Threshold */
  ADV_IWRITE_16(0xFFFF1418L, 0x0080);

  /* CODE Threshold */
  ADV_IWRITE_16(0xFFFF141CL, 0x0080);

  /* Apply parameters */
  if (0 != (err = adv_exit_set_param())) return err;

  return 0;
}
Go to the top of the page
 
+Quote Post
alexPec
сообщение Oct 27 2014, 09:07
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Спасибо за код. А можете показать кусок где запускаете ADV? Тут только инициализация. Может там что не так делаю?

У меня в ПЛИС софт-процессор, сейчас для отладки просто программно формирую все сигналы, т.е. тайминги по сигналам очень с запасом. А регистры пробовал и по одному в отладке читать-писать, пробовал и на лету. Результат пока одинаковый.
Go to the top of the page
 
+Quote Post
Alex11
сообщение Oct 27 2014, 09:41
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Там дальше в запуске уже все специфично для нашего устройства - запуск DMA. Проверьте еще, запущен ли у Вас фронтенд перед началом инициализации ADV. Без этого он не стартует.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Oct 27 2014, 11:36
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Alex11 @ Oct 27 2014, 12:41) *
Там дальше в запуске уже все специфично для нашего устройства - запуск DMA. Проверьте еще, запущен ли у Вас фронтенд перед началом инициализации ADV. Без этого он не стартует.



Имеете ввиду источник пикселов? Нет, думал сначала готовим все, потом подаем пикселы на кодирование.
Не стартует, кстати, что означает?
У Вас ввод пикселов на кодирование - через VDATA или HIPI?
И кодированный поток можно ли не через ДМА, а просто по флагу трешхолда фифо вытаскивать через хост-интерфейс? Думаю вот не ДМА ли где пытается что-то сделать (или может ждет чего-то)...

Спасибо за совет!
Go to the top of the page
 
+Quote Post
Alex11
сообщение Oct 30 2014, 17:00
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Да, источник пикселов. Я подаю через VData.
Про "висит". У меня при инициализации после заливки и проверки прошивки идет сброс, после которого должно появиться прерывание. Довольно часто его нет. Если данные на вход заранее не подать, то его не будет никогда.
Вытскивать можно, но не в моей схеме. У меня там все под DMA заточено. Давным-давно при отладке я глядел, что данные отдаются. И даже лучше, чем в DMA. Оно у меня висело, а по программному интерфейсу данные отдавались.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 12:42
Рейтинг@Mail.ru


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