Текущее время: 29 мар 2024, 02:38 • Часовой пояс: UTC + 3 часа
Сообщения без ответов | Активные темы

Драйвер для тюнера Behold TV T7 под Linux

Начать новую темуОтветить на тему Страница 1 из 22 [ Сообщений: 317 ] На страницу   1, 2, 3, 4, 5 ... 22  След.
Версия для печати Пред. тема | След. тема
АвторСообщение
Сообщение Добавлено: 16 май 2014, 23:40. Заголовок сообщения:  Драйвер для тюнера Behold TV T7 под Linux
Зарегистрирован:
    31 дек 2013, 09:22
Сообщения: 147
Информация для тех, кому хотелось бы пользоваться тюнером Behold TV T7 под Linux.

Все права на исходные, бинарные и прочие коды, которые вам потребуются, принадлежат их владельцам и их авторам. Я не имею к ним никакого отношения и не претендую на их авторство.

Я, со своей стороны, выкладываю на всеобщее обозрение только результат своей работы, целью которой было добиться приемлемой работы тюнера Behold TV T7 под операционной системой Linux.

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

Что осталось не решенным, и с чем, на мой взгляд, можно смириться:

Я не ставил себе целью решить вопрос с переключением антенного входа RF тюнера XC5000C. Так как тюнер эксплуатируется в “стриммер-сервере”, круглосуточно вещающем в локальную сеть уже несколько месяцев, то необходимость переключать на нём антенные входы не возникает. При желании, никто не мешает сделать такую доработку самостоятельно.
Кроме того, даже довольно слабый сигнал всё равно проникает на вход RF тюнера, даже если выбран другой вход. Код драйвера фиксировано работает с антенным входом (ЕМНИП) номер 1.

“Попугаи”, в которых должен отображаться уровень принимаемого сигнала, уровень качества цифрового потока, и тд. и тп., все эти “попугаи” показывают либо "температуру на Марсе", либо вообще остаются неизменны.
Чтобы эти “попугаи” показывали что-нибудь достоверное, необходима техническая документация на применённые RF тюнер XC5000C и сам демодулятор SI2168. Без неё непонятно, с каких регистров, как, и что читать. В каких единицах интерпретировать полученные данные.
Документации в публичном доступе, естественно, нет. Иначе бы, давным-давно, тюнеры с подобным набором микросхем поддерживались бы любым дистрибутивом Linux, что называется, “из коробки”. Так что, увы. Да и не нужно это было для моей задачи.

Система АРУ.

У меня нет измерительной аппаратуры и генераторов сигнала, для того, чтобы корректно провести замеры и оценить, правильно ли работает Автоматическая Регулировка Уровня сигнала. (AGC на англ.)
Всё, что я смог сделать, это сравнить поведение напряжения регулировки на соответствующей ножке RF тюнера, при работе под Windows и Linux драйвером. При неизменных условиях приёма, в одном и том же месте, на одной и той же антенне. В моменты, когда тюнер только что залочил мультиплекс, при вынутой антенне, только что вставленной, и тд и тп.
Могу сказать, что АРУ под Linux ведёт себя очень похоже с Windows драйвером, но не идентично.
Если я ошибся С АРУ, и чем это грозит.
Я занимался Linux драйвером на 4 этаже кирпичного здания с окнами, смотрящими не на передающую антенну, и передающая антенна находилась от меня на расстоянии несколько километров. Всё это в условиях городской застройки. (Центр города)
Приём вёлся на обрезок витой пары длиной около метра.
Что под Windows, что под Linux, оба мультиплекса открывались с одинаковой скоростью, и приём шел одинаково уверенно.
Но, если я неправильно разобрался с АРУ, и если вы живёте в непосредственной близости от передающей антенны/пользуетесь телевизионной кабельной сетью с очень большим уровнем сигнала, то есть вероятность перегрузить антенный вход RF тюнера и получить искаженный сигнал до такой степени, что ни один мультиплекс не залочится и ни один канал не откроется. В этом случае, вам может помочь делитель уровня сигнала, как на старых отечественных телевизорах, с соотношением примерно 1 к 10.
Либо вам придётся разбираться с константами АРУ самостоятельно.

Аналоговый приём телевидения на этот тюнер обеспечивается.
Я не проверял низкочастотные (AV) аналоговые входы, но, по идее, они должны работать.
Также не проверял работу пульта ДУ, хотя соответствующее устройство добавляется.
Также не проверял приём аналогового радио.
Работа с кабельным цифровым DVB-C телевидением тоже не проверялась.

В процессе работы над драйвером я пользовался популярным плеером VLC, для того, чтобы принимать как цифровое, так и аналоговое эфирное ТВ.
Попутно обнаружил в нём несколько ошибок, связанных как раз с работой с ТВ тюнерами, отправил разработчикам патчи, и баги были исправлены начиная с версии VLC 2.1.3 .
https://trac.videolan.org/vlc/ticket/10309
https://trac.videolan.org/vlc/ticket/10287
Единственное но, авторы VLC отказались внести одно исправление в код VLC, поэтому для работы аналогового ТВ в свежих версиях VLC с данным тюнером (чип SAA7135) необходимо принудительно включать режим YUYV командой :v4l2-chroma=YUYV .
https://trac.videolan.org/vlc/ticket/10378

Для вещания мультиплексов в сеть я воспользовался программой DVBLAST, дописав её немного, чтобы можно было переключать PLP.
Код с моей доработкой я отправлял в их mail лист, если кому-нибудь будет интересно.

Материнская плата в стриммер-сервере имеет 4 “честных” PCI слота, в каждый из которых я планировал установить по одному тюнеру Behold TV T7, чтобы вещать в сеть мультикастом все 20 каналов ТВ и 3 радио одновременно. Нагрузка на процессор при работе DVBLAST и одного тюнера минимальна. Плюс DVBLAST ещё и в том, что с его помощью можно ретранслировать Program Guide (телепрограмма с описанием, наш второй мультиплекс идёт с ним), субтитры, где они есть, телетекст. Deinterlace можно делать непосредственно на клиентском VLC, если это необходимо. Даже ActiveX плагин VLC, по идее, это умеет.
Почему 4 тюнера для 2х мультиплексов? Потому, что один демодулятор способен обрабатывать только один Physical Layer Pipe (PLP) в конкретный момент времени. Поскольку, в первом мультиплексе у нас сразу 3 PLP, то для 2 наших мультиплексов требуется 4 демодулятора, а значит и 4 тюнера T7.
К сожалению, обстоятельства поменялись, и проверить работу 4х тюнеров одновременно мне не удалось. С одним тюнером “полёт” несколько месяцев нормальный.

Где взять исходники.

Для успешной сборки драйвера вам потребуется самостоятельно (из-за проприетарности кода) найти исходные коды, которые раньше были свободно доступными для загрузки у другого вендора под его продукт, но с таким же точно демодулятором.
Сейчас ссылка на этот архив с деревом media_build пока что доступна для загрузки со страницы http://members.quicknet.nl/pe63/DVBSky-T9580.html

Дистрибутив и версия операционной системы, с которой я работал - Fedora 19 I686.

Какие пакеты требуются, и как подготовить ОС к сборке v4l media_build очень хорошо расписано на сайте http://www.linuxtv.org/wiki/index.php/H ... ce_Drivers , поэтому, описывать этот процесс я здесь не буду.
Главное, в итоге, добиться того, чтобы пробная компиляция media_build проходила без ошибок. И после этого можно положить в ваш media_tree недостающие компоненты исходников для драйвера Si2168, подключить их, применить мои diff-ы, и собственно собрать сам драйвер для Behold TV T7.

Где взять обновление микропрограммы для Si2168.

Благодаря содействию компании Behold фирма производитель чипов Silabs выпустила исправление микропрограммы для своего демодулятора. Это обновление исправляет работу с PLP2 первого мультиплекса, своеобразная версия которого вещается в некоторых регионах.
“Вытащить” данное обновление можно из свежих drv_v5450.zip Windows драйверов для тюнера T7.
Вам нужно самостоятельно (из-за проприетарности кода), вашим любимым HEX редактором открыть файл beholder.bin и найти последовательность байт 04 01 80 00 61 D3 92 EC. С начала этой последовательности и до последовательности байт 05 2B D8 0E BE BB 7D 2D включительно выделить блок и сохранить полученный бинарный блок в отдельный бинарный файл.
Далее, какой-либо утилитой (под windows идеально подойдёт эта: http://stahlworks.com/dev/swiss-file-knife.html ) конвертировать полученный бинарный файл в HEX формат и привести его к виду (на примере первой последовательности байт) 0x04,0x01,0x80,0x00,0x61,0xD3,0x92,0xEC, - по 8 байт на строку.

В заголовок файла, перед первой последовательностью байт, добавить строки:
Код:
#ifndef _Si2168_PATCH_3_0b20_TABLE_H_
#define _Si2168_PATCH_3_0b20_TABLE_H_

#define Si2168_PATCH_3_0b20_PART    68
#define Si2168_PATCH_3_0b20_ROM      3
#define Si2168_PATCH_3_0b20_PMAJOR  '3'
#define Si2168_PATCH_3_0b20_PMINOR  '0'
#define Si2168_PATCH_3_0b20_PBUILD   2

unsigned char Si2168_Patch_3_0b20[] = {

<тут пошли хекс коды>




А в конце, добавить:
Код:
};

#define Si2168_Patch_3_0b20_LINES (sizeof(Si2168_Patch_3_0b20)/(8*sizeof(unsigned char)))

#endif /* _Si2168_PATCH_3_0b20_TABLE_H_ */

Файл с бинарным патчем микропрограммы готов, переименуйте его в si2168_30_ROM3_Patch_3_0b20.h (Заглавные и прописные сохраняем!).
Он должен получиться размером примерно 130 килобайт.
Из-за довольно большого патча первый запуск тюнера после включения компьютера длится примерно 20 секунд. Последующие запуски почти мгновенны.

Не забудьте, что для RF тюнера XC5000C тоже требуется микропрограмма. Если в вашем дистрибутиве её нет, то загрузить её можно по ссылке http://www.kernellabs.com/firmware/xc50 ... .1.30.7.fw и положить в соответствующее место. (/lib/firmware/)
Также для модуля ядра RF тюнера XC5000C необходимо при его загрузке передавать параметр options xc5000 no_poweroff=1

Исправлено 2015-05-30
Для этого, в Fedora 19, я ошибочно воспользовался "левым" для модуля XC5000C файлом: openfwwf.conf
В моём случае ничего страшного не произошло, и всё заработало как надо, но конечно, лучше действовать так, как задумано авторами вашего дистрибутива. (Если есть, то применить утилиту modconf, или создать/отредактировать файл в /etc/modprobe.d/<имя файла как имя модуля>.conf или tuner.conf или behold.conf) В каждом дистрибутиве по-своему. Особенно, если его покусал Поттеринг. :-)

Это или баг в его драйвере, или просто недоработка, но без этого параметра в RF тюнер ЕМНИП бесконечно начинает заливаться его микропрограмма, и, никакой настройки на нужную частоту, естественно, не происходит.
Сама фича с выключением, вроде бы и полезная, экономит энергию, при неиспользовании RF тюнер меньше греется, но для меня это было некритично, так как стример работает круглосуточно.

Все файлы с исходниками для SI2168 начинаются на SI216 или на SI215. Если вы будете собирать их в свежем, или моём снапшоте media_build , то их нужно скопировать и положить по тому же самому пути: media_build\linux\drivers\media\dvb-frontends\ Сюда же нужно скопировать файл с бинарным патчем для демодулятора si2168_30_ROM3_Patch_3_0b20.h

Чтобы подключить исходники демодулятора к дереву media_build нужно:
В файл media_build/v4l/.myconfig добавить строку:
Код:
CONFIG_DVB_SI2168                            := m

В файл media_build/linux/drivers/media/dvb-frontends/Kconfig добавить перед строкой config DVB_SI21X
Код:
config DVB_SI2168
        tristate "Si2168 based"
        depends on DVB_CORE && I2C
        default m if !MEDIA_SUBDRV_AUTOSELECT
        help
          A DVB-T2/T/C tuner module. Say Y when you want to support this frontend.

В файл media_build/linux/drivers/media/dvb-frontends/Makefile добавить после строки drxk-objs := drxk_hard.o
Код:
si2168-objs := si2168_demod.o si2168_si2158.o si2168_drv.o


и в самом конце этого файла добавить строку:
Код:
obj-$(CONFIG_DVB_SI2168) += si2168.o


Мой снапшот v4l от 18 ферналя 2014 года. Я присоединю его к сообщению, diff-ы должны лечь на него без проблем, единственное, что, возможно, его предварительно потребуется очистить от следов моей системы.
После попытки первой сборки станет понятно, требуется ли чистка.

Diff-ы в отдельном аттаче.
saa7134*.diff для соответствующих файлов в media_build/linux/drivers/media/pci/saa7134/
si2168*.diff для соответствующих файлов в media_build/linux/drivers/media/dvb-frontends/
xc5000.c.diff для файла media_build/linux/drivers/media/tuners/xc5000.c

PS:
Присоединить к сообщению снапшот media_build не получилось, видимо, из-за размера 13 магабайт.
Вот ссылка на file.mail.ru: http://files.mail.ru/77C2EAB043AF4A64AC3E5ED4AEF41120
"Файлы будут храниться до 22 мая 2014 года, каждое скачивание файлов продлевает их срок хранения еще на 5 дней."
Вложения:
 diffs.tgz [9.11 КБ]
Скачиваний: 1253
Последний раз редактировалось Demod 29 май 2015, 23:34, всего редактировалось 3 раз(а).
Профиль 
Сообщение Добавлено: 29 сен 2014, 17:34. Заголовок сообщения:  Re: Драйвер для тюнера Behold TV T7 под Linux
Зарегистрирован:
    14 ноя 2013, 04:42
Сообщения: 70
Поскольку Бехольдер не стал помогать мне в доработке дров, я не смог объяснить разработчикам Linux Media тонкостей в работе тюнера, и скорее всего драйвер в ядро не попадёт. Я выкладываю патч, который получился с помощью патча Demoda, и в результате моего общения с Antti Palosaari. Если у кого-нибудь хватит умения, то он доведёт его до ядра, у меня на это нет времени и знаний. Драйвер я использую для DVB-T2, в остальных режимах не проверял, пульт не проверял тоже. Если кто-то проверит все режимы вместе с аналогом, будет интересно узнать результат. Драйвер не выдаёт информацию о качестве сигнала, даёт какой-то уровень сигнала, но насколько он совпадает с реальностью неизвестно. Антенный вход переключается на 1 при аналоге и dvb-t, на 2 при dvb-c. У меня при старте системы драйвер заливает фирмваре где-то минуту, потом это уже не требуется.
Драйвер si2168 уже есть в открытом коде, поэтому проблем с авторским правом нет.
Патч сделан на текущий media_build.
Собственно установка простая, ставите media_build драйвера из http://git.linuxtv.org/cgit.cgi/media_build.git/about/
накладываете патч, распаковываете и копируете фирмваре в /lib/firmware, собираете и проверяете.
Если посмотреть как в этом пачте сделана работа с тюнером xc5000c, я думаю можно аналогично запустить Бехольдеровские железки, в которых обновилась ревизия тюнера xc5000с и где ошибка загрузки фирмваре.
Вложения:
Комментарий к файлу: фирмваре
 dvb-demod-si2168-30b20.fw.bz2 [25.13 КБ]
Скачиваний: 1016
Комментарий к файлу: патч
 media_build.behold-t7.diff.bz2 [3.77 КБ]
Скачиваний: 905
Профиль 
Сообщение Добавлено: 30 сен 2014, 00:23. Заголовок сообщения:  Re: Драйвер для тюнера Behold TV T7 под Linux
Зарегистрирован:
    31 дек 2013, 09:22
Сообщения: 147
ua0lnj,
Я больше не работаю там, где мог экспериментировать с тюнером T7.
Соответственно, тюнера под руками нет.
Но, я примерно помню, что и как было сделано на плате тюнера.
Опубликуй вопросы в форуме, и если не я, так кто-либо другой на них ответят.

Если бы Бехолдер официально одобрил публикацию патча микропрограммы демодулятора для драйвера Linux, хотя бы с такой же лицензией и условиях, как микропрограмма для RF тюнера XC5000C, то в пакадж NonFree этот патч линуксоиды включили бы без вопросов. ЕМНИП, после общения с членами команды v4l, я сделал вывод, что без разрешения от правообладателей патч микропрограммы не может попасть официально ни в один Linux пакадж с микропрограммами.

Кстати, так же было бы очень не плохо, если бы и для XC5000C появилось бы официальное разрешение, на использование его микропрограммы в Linux с продуктами Бехолд.

Вообще, просто протолкнуть что-либо в ядро, даже не будучи связанным какими-либо лицензионными ограничениями, и то сложно. Вдруг Линус встал сегодня не с той ноги? :-)
Если же мы в своей работе используем референсный код, то однозначно для этого нужно разрешение правообладателя.
Или остаётся ещё 2 относительно легальных способа, которые вопросов у линуксоидов, скорее всего, не вызовут: реверсить бинарный код виндового драйвера, либо, в случае с USB девайсами, снифить обмен через шину и на основе захваченных данных писать Linux драйвер. Что, ПМСМ, и сделал Antti Palosaari.
Это, кстати, видно по его исходникам для SI2168.

На счёт размера патча микропрограммы:
Я, конечно же, не уверен на 100 процентов в его корректности.
Но, во-первых, он успешно исправляет работу демодулятора, а во-вторых, чисто для проверки, я пробовал делать смещение его размера вперед и назад по дампу (в конце), как большими прыжками, так и мелкими в 1 байт. Во всех случаях, когда размер дампа отличался от опубликованного мной, загрузка патча прерывалась с ошибкой ровно в измененном месте.
Так что, ПМСМ, размер патча можно считать корректным.

По XC5000C:
Это всего лишь моё предположение, и я могу ошибаться, документации ведь нет.
Код:
--- xc5000.c.orig   2013-03-22 12:45:45.000000000 +0800
+++ xc5000.c   2014-02-23 22:25:18.000000000 +0800
@@ -86,6 +86,9 @@ struct xc5000_priv {
 #define XC_PRODUCT_ID_FW_NOT_LOADED   0x2000
 #define XC_PRODUCT_ID_FW_LOADED    0x1388
 
+/* Already initialised? */
+#define XC_PRODUCT_ID_FW_INITIALISED   0x14b4
+
 /* Registers */
 #define XREG_INIT         0x00
 #define XREG_VIDEO_MODE   0x01
@@ -1345,6 +1348,13 @@ struct dvb_frontend *xc5000_attach(struc
       printk(KERN_INFO
          "xc5000: Firmware has not been loaded previously\n");
       break;
+   case XC_PRODUCT_ID_FW_INITIALISED:
+      printk(KERN_INFO
+         "xc5000: Successfully identified at address 0x%02x\n",
+         cfg->i2c_address);
+      printk(KERN_INFO
+         "xc5000: Firmware has been already initialised?\n");
+      break;
    default:
       printk(KERN_ERR
          "xc5000: Device not found at addr 0x%02x (0x%x)\n",

В процессе тестирования драйвера, после очередного ребута, RF тюнер нет-нет, да и отказывался аттачиться.
Чего я только не пробовал. Даже циклические попытки реаттача с рандомной паузой. Это не помогало, так как, если чип начинал выдавать 0x14b4, то всё. Сливай воду и туши свет. :-) (только ребут)
И пока вот так его драйвер не пропатчил, ошибки не исчезли.
Но, с автором драйвера для XC5000C я не связывался, так как уверен, что для него такого объяснения будет недостаточно.
Профиль 
Сообщение Добавлено: 09 дек 2014, 06:43. Заголовок сообщения:  Re: Драйвер для тюнера Behold TV T7 под Linux
Зарегистрирован:
    14 ноя 2013, 04:42
Сообщения: 70
Вопросы по Т7:
Ревизия А30
Отличается ли ревизия А30 si2168 в Т7 от такой же ревизии Силабовского тюнера? Может быть в Т7 стоит А30.20, если такое есть вообще?
Собственно вопрос в том, почему фирмваре для si2168 от Силабсовой платы не грузится в Т7? Разные версии чипа или режим какой-то другой, при том что и там и там чип А30.
Сколько времени загружается фирмваре драйверами в Виндовс, тоже почти минуту или несколько секунд?

Ревизия В40
У меня нет такой ревизии, проверить не могу, поэтому вопрос, фирмваре тоже отличается от Силабовского или нет?
Профиль 
Сообщение Добавлено: 09 дек 2014, 16:37. Заголовок сообщения:  Re: Драйвер для тюнера Behold TV T7 под Linux
Зарегистрирован:
    31 дек 2013, 09:22
Сообщения: 147
Ульяна Анна Ноль Леонид Николай Краткий, принимаю вас хорошо, пять девять. Красноярск на связи. :-)

Если ошибаюсь, то пусть меня поправят. Все эти выводы сделаны мной при анализе исходников и Windows драйвера.

Демодулятор идёт с завода уже с микропрограммой.
То, что при инициализации драйвера мы в него заливаем - это именно патч, заплатка, исправление, а вовсе не фирмваре-микропрограмма.
Исходя из вышесказанного, на произвольный чип демодулятора какой попало патч не ляжет. Чипом, в процессе заливки неподходящего патча, будет выдана ошибка.

В тех драйверах для Windows, которые раскапывал я, и которые решили проблему со вторым PLP, был именно такой патч, и ЕМНИП, только один, (одна его версия).
Поэтому, предполагаю, что Бехолдер закупил партию чипов демодулятора для своего производства с микропрограммой определенной версии. Такой, какую предлагал SiLabs на тот момент для России. И не исключено, что для других стран версия заводской микропрограммы будет отличаться.

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

Вообще, такой большой объём патча, по-видимому, связан с большим объёмом вносимых в микропрограмму изменений.

Так что финну можно предложить следующее: несколько PLP в одном мультиплексе, на сколько мне известно, используется только в России. Всё что ему нужно сделать, это предусмотреть возможность самостоятельного выбора версии патча, отличного от идущего “по умолчанию”. А также, оставить возможность выбора, а грузить ли его в чип вообще, или нет. Это можно сделать через передачу дополнительных опций при загрузке модуля ядра.
ПМСМ, для Европы этот патч точно не нужен.
Кстати, и тебе, во Владивостоке, не факт, что необходимо это исправление. Проблема была только в некоторых регионах.
Если это и правда так, то можно обойтись более коротким патчем, выдернув его из самой первой версии драйверов, где появилась поддержка Т7.
Вообще без патча, тюнер лочил даже PLP0 как-то неуверенно. Но это тут, в Красноярске.

Скорость загрузки драйвера под Windows я тогда специально не засекал. Но мне чисто по ощущениям, показалось, что версия с исправлением для PLP2 реально инициализировалась дольше.

PS:
Точно так же обстояла ситуация и с обновлённой микропрограммой для телевизора LG.
Я, в поисках исправления для демодулятора, основываясь на отзывах пользователей телевизоров LG, что якобы им помогло обновление микропрограммы в решении идентичной проблемы, раскопал и её. (В той серии телевизоров был применён тоже Si2168.)
Внутри, ЕМНИП, тоже было несколько патчей для демодулятора, и я их пробовал заливать в T7.
Демодулятор один из патчей от LG принял без ошибок, но проблему с PLP это не решило.
Так и для Бехолдеров SiLabs не сразу выдал корректное исправление.
73!
Профиль 
Сообщение Добавлено: 09 дек 2014, 17:28. Заголовок сообщения:  Re: Драйвер для тюнера Behold TV T7 под Linux
Зарегистрирован:
    14 ноя 2013, 04:42
Сообщения: 70
:)

Без загрузки фирмваре у меня вообще не хочет работать, и в линух-медиа дровах тоже загрузка фирмваре сделана всегда.
Хотелось бы услышать ответы от представителя Бехольдера.
Профиль 
Сообщение Добавлено: 10 дек 2014, 13:24. Заголовок сообщения:  Re: Драйвер для тюнера Behold TV T7 под Linux
Beholder
Аватара пользователя
Зарегистрирован:
    19 авг 2004, 11:47
Сообщения: 190
ua0lnj
Demod
Si2168 уходил в production в 3 ревизиях:
A20 (давно не поставляется)
A30 (еще поставляется)
B40 (поставляется с недавнего времени)
В каждой ревизии, помимо аппаратных доработок, в ROM прописана определенная версия микрокода. Т.е. демодулятор может работать из коробки без подгрузки внешней фирмвари. SiLabs изначально заложила возможность подгрузки патчей микрокода, исправляющего ошибки в прошитом ROM.

На текущий момент, патч в A20 огромный, так как в ROM прошит очень старый микрокод. Мы не закупали ревизию A20, поэтому в комплекте драйверов даже нет патчей под A20 ROM.

Патч для A30 намного меньше, текущая версия 3.0.20, размер 25360, загрузка его на 400КГц шине I2C блоками по 8 байт занимает примерно 1800мс.

Патч для B40 заметно меньше, текущая версия 4.0.19, размер 12848 (на самом деле загружается меньше), он загружается блоками от 1 до 16 байт, длина строки 17 байт, первый байт указывает актуальную длину строки, поэтому реально в чип загружается меньше данных. У B40 есть одна особенность, он не стартует без патча совсем, чтобы запустить его без патча, достаточно загрузить вот этот блок из 8 байт:
Код:
// --> enter to bootloader mode
// load patch:
const BYTE Si2168B_STUB_B40_402[17] =
{
    (8), 0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
// <-- exit from bootloader mode

Тогда чип запустит встроенный в ROM микрокод 4.0.2.
Профиль 
Сообщение Добавлено: 10 дек 2014, 16:16. Заголовок сообщения:  Re: Драйвер для тюнера Behold TV T7 под Linux
Зарегистрирован:
    31 дек 2013, 09:22
Сообщения: 147
BTVSoft, спасибо!
Оказывается, я не очень сильно ошибался.
Профиль 
Сообщение Добавлено: 10 дек 2014, 16:51. Заголовок сообщения:  Re: Драйвер для тюнера Behold TV T7 под Linux
Зарегистрирован:
    14 ноя 2013, 04:42
Сообщения: 70
Благодарю за информацию, осталось понять почему у меня патч загружается 51000 мс, а не 1800...

Почему Т7 не воспринимает патч для Силабовского тюнера, т.е. ошибка загрузки выдаётся.
Патчи как-то привязаны к чему-то?
Профиль 
Сообщение Добавлено: 10 дек 2014, 17:36. Заголовок сообщения:  Re: Драйвер для тюнера Behold TV T7 под Linux
Beholder
Аватара пользователя
Зарегистрирован:
    19 авг 2004, 11:47
Сообщения: 190
ua0lnj
В SiLabs референсе не используется XCeive RF тюнер. Если вы про это.

Во всех A30 в ROM прошит микрокод 3.0.2
Код:
#define Si2168A_ROM3_3_0_2_PART      68
#define Si2168A_ROM3_3_0_2_ROM      3
#define Si2168A_ROM3_3_0_2_PMAJOR   '3'
#define Si2168A_ROM3_3_0_2_PMINOR   '0'
#define Si2168A_ROM3_3_0_2_PBUILD   2

Соответственно 3.0.20 загружается без проблем. Важно только I2C адрес знать. На T7 он 0xC8.

У нас на конексанте также нет проблем с загрузкой, хотя на USB чипах обычно с I2C мастером все сложнее. Правда надо отдать должное, у конексанта отличный I2C контроллер, чего нельзя сказать о Trident, с ним мы нахлебались.
Профиль 
Сообщение Добавлено: 10 дек 2014, 17:40. Заголовок сообщения:  Re: Драйвер для тюнера Behold TV T7 под Linux
Beholder
Аватара пользователя
Зарегистрирован:
    19 авг 2004, 11:47
Сообщения: 190
Небольшой совет, когда проверяете статус CTS, проверяйте по маске 0x3C, она должна быть пустая, иногда прилетает ложный статус, его нужно игнорировать, если по маске 0x3C не нули.
Профиль 
Сообщение Добавлено: 11 дек 2014, 02:07. Заголовок сообщения:  Re: Драйвер для тюнера Behold TV T7 под Linux
Зарегистрирован:
    14 ноя 2013, 04:42
Сообщения: 70
Я немного другое имел ввиду.
В линуховом драйвере для si2168 А30 сделали загрузку патча http://palosaari.fi/linux/v4l-dvb/firmw ... -a30-01.fw

Т.е. подразумевается, что он должен работать на любых устройствах с si2168 A30, но в Т7 этот патч не загружается.
Поэтому у меня и возник вопрос, возможно версия патча для А30 зависит от каких-то параметров чипа.

Чтобы отдать линуховый драйвер майнтейнерам в ядро, нужно решить 2 проблемы, которые есть сейчас. Это очень медленная загрузка патча, это я попробую решить. И как определить, что нужно грузить именно этот патч, а не тот про который я выше написал. Причём майнтейнеры хотят, чтобы не было привязки к устройству на котором стоит si2168, т.е. чтобы чип сам определял, какой патч грузить. Как вариант можно указывать это вручную через конфиг, но хотелось бы сделать автоматически.


Надеюсь я понятно написал :)
Профиль 
Сообщение Добавлено: 11 дек 2014, 08:13. Заголовок сообщения:  Re: Драйвер для тюнера Behold TV T7 под Linux
Зарегистрирован:
    31 дек 2013, 09:22
Сообщения: 147
ua0lnj, Antti Palosaari заблуждается.

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

Пользуясь предоставленной Бехолдером информацией, задача реализуема, но не “как два байта отослать”. Поскольку девелопер модуля для Linux хочет учитывать все возможные варианты чипов SiLabs, а не только те, которые применялись Бехолдером в его продуктах.

А в случае с большими патчами, и версиями чипов A20-A30, оптимизировать загрузку, возможно, и не удастся.
По крайней мере, сделать загрузку ещё быстрее, чем примерно 1,8 секунды, как у Бехолдера в Windows драйвере, или как в моих патчах, 18 секунд в Linux, ПМСМ, малореально. (Для версии 3.0.20) По крайней мере, "малой кровью". "Разгонишь" квадратную шину, где-нибудь это боком вылезет.

Почему майнтейнера смущает размер патча? Это не наша прихоть, это патч, рождённый самим SiLabs. Не понимаю. Вариантов всё равно нет. Либо использовать этот патч, либо не использовать, и сидеть любоваться глючащим демодулятором. :-)

Дай ему ссылку на этот топик, пусть он его почитает через гугль переводчик.
Профиль 
Сообщение Добавлено: 11 дек 2014, 10:55. Заголовок сообщения:  Re: Драйвер для тюнера Behold TV T7 под Linux
Зарегистрирован:
    14 ноя 2013, 04:42
Сообщения: 70
У меня твой патч тоже грузится минуту, и как я понял из кода, частота шины там 100 Кгц по умолчанию.
По идее, для одинаковой ревизии чипа должны подходить все патчи, не зависимо от обвязки чипа, в противном случае нужно знать, при каких значениях какого-нибудь регистра нужно грузить ту или иную прошивку.
Профиль 
Сообщение Добавлено: 11 дек 2014, 12:33. Заголовок сообщения:  Re: Драйвер для тюнера Behold TV T7 под Linux
Beholder
Аватара пользователя
Зарегистрирован:
    19 авг 2004, 11:47
Сообщения: 190
ua0lnj
У нас самый обычный A30, c ROM 3.0.2.

Методика там простая и общая для всей линейки чипов:
1) Выполняется аппаратный сброс чипа. На SAA713x используется пин PeripheralReset.
2) Set clock source (на T7 CLK_MODE_XTAL, на T8/Cruise CLK_MODE_CLK_CLKIO)
Код:
    /* set clock source */
    WORD clk_mode = (m_ConfigFE.FrontendParams.UseXTIN) ? Si2168_START_CLK_CMD_CLK_MODE_CLK_CLKIO : Si2168_START_CLK_CMD_CLK_MODE_XTAL;
    si2168_cmd_start_clk(clk_mode);

3) Enter to Bootloader Mode
Код:
    /* raise reset, enter to bootloader mode, use 16MHz clock */
    ntStatus = si2168_cmd_power_up(Si2168_POWER_UP_CMD_RESET_RESET, Si2168_POWER_UP_CMD_FUNC_BOOTLOADER, Si2168_POWER_UP_CMD_CLOCK_FREQ_CLK_16MHZ);
    if (ntStatus != STATUS_SUCCESS)
        return ntStatus;

4) Get Part Info
Код:
    tPART_INFO si2168_pi;
    RtlZeroMemory(&si2168_pi, sizeof(si2168_pi));

    ntStatus = si2168_cmd_part_info(&si2168_pi);
    if (ntStatus == STATUS_SUCCESS) {
        // анализ Part Info для принятия решения, какой патч загружать
    }

5) Load firmware patch (8 byte mode for A20/A30, 1+16 byte mode for B40)
6) Exit from bootloader mode
Код:
    /* exit from bootloader mode */
    ntStatus = si2168_cmd_start_firmware();
    if (ntStatus == STATUS_SUCCESS) {
        /* print firmware info */
        si2168_cmd_rev_info();
    }

7) Init I/O
Код:
    /* init chip I/O pins */
    si2168_init_pins();

Вменяемый драйвер I2C Master должен иметь возможность управлять частотой I2C CLK. Частота задается перед работой с конкретным Slave устройством. Хотя бы на уровне переключателя slow/fast.
PS.
Мы не используем референсный код SiLabs, модуль драйвера Si2168 был написан с чистого листа (есс-но опираясь на документацию и материалы SDK).
Профиль 
Показать сообщения за:  Поле сортировки:    
Начать новую темуОтветить на тему  Страница 1 из 22  [ Сообщений: 317 ]  На страницу   1, 2, 3, 4, 5 ... 22  След.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения
Найти:  
Перейти: