Перейти к содержанию
    

Boom-Zoom

Участник
  • Постов

    20
  • Зарегистрирован

  • Посещение

Весь контент Boom-Zoom


  1. В квартусе я только мышкой пины с модулем nios соединять умею) Но если правильно понял и речь о RGMII интерфейсе то у меня было две ситуации связанные с DDIO (Quartus 13.1): - проект не собирался если в сигнал тап была попытка анализировать внутренний регистр U_RGMII корки TSE и пины используемые интерфейсом RGMII, на анализ нужно было ставить что то одно; - мне советовали в assignment editor добавить правило, в котором нужно указать что пины RGMII подключаются через DDIO регистры. Попробовал, проект так же не собирался. Поэтому у меня в проекте содержимое assignment editor,почти, отражает содержимое pin planner, правило global clock добавлял на входную тактовую. И ещё правилами тактовых приёма и передачи игрался, в каком они состоянии не помню.
  2. Недавно удалось получить положительный результат. Решил похвалиться) И рассказать о ключевых моментах. Во первых решил сначала пробовать запускать проект на 100 мб используя MII. Опытный коллега, который использовал MII/GMII интерфейс выдал самописный коммутатор сигналов, который нужен для полноценной поддержки трёх скоростей. Без него либо 10/100 либо 1000. Этот коммутатор есть на картинках в руководстве на корку TSE в виде кубика, с описанием принципа его работы. Картинку я вспомнил, описание не вспомнил) но перечитывать не стал т.к. выдали обкатанное решение. Ещё дал совет перепроверить автосогласование. Вставил к себе в проект ииии... ничего не заработало. Стал копаться в процессе автосогласования. Заметил такою вещь - с партнёром у которого принудительно выставленно 100 у меня поднимается линк 1000. Подумал...Почитал... Нашёл статусные регистры в которых есть данные о поддерживаемых партнёром режимах работы. В итоге добавил в функцию настройки марвела цикл ожидания окончания процесса автосогласования. Написал функцию которая читает статусные регистры марвела, хранящие свой режим работы и режим работы партнёра, на их основе определяет максимальную, общую для себя и партнёра скорость и основываясь на этой скорости настраивает три бита SPEED, 10MB и HALF_DUPLEX в регистре команд TSE. Общий смысл такой: если оба партнёра поддерживают 1000 полный дуплекс, то биты 10MB и HALF_DUPLEX выставлять не надо. Если общая максимальная скорость 100 полный дуплекс, то биты SPEED и HALF_DUPLEX выставлять не надо и т.д. После вызова PHYDeviceInit(); Добавил вызов новой функции. Соответственно переколбасил настройку регистра команд дальше по тексту. Запустил. Немного поотлаживал протоколы arp и icmp и всё заработало как часы. Пробовал на 100 полный дуплекс (это MII) и 1000 полный дуплекс (GMII). Переконфигурировал корку TSE на RGMII, изменил режим работы марвела с GMII на RGMII, зашил. И RGMII завёлся с полпинка. PROFIT))). Всем отвечавшим и сопереживавшим спасибо. Надеюсь кому то эта тема поможет.
  3. Спасибо за совет, проверю. Пока решил на GMII перейти, перенастроил проект, данные из TSE сразу появились. Но передачи в сеть сегодня так и не добился. Решил что сначала дожму GMII, потом вернусь к RGMII.
  4. Общую тактовую подаю на PLL, повышаю её в два раза, от 250 МГц тактирую SignalTap и собственно в нём смотрю. Если вы про осциллограф, то до него ещё дело не дошло т.к. эти линии внутри ПЛИС не вырабатываются.
  5. Про передачу марвелом я почитываю... Но сейчас дело в том что от 88E1111 в сторону TSE данные идут (приём работает). А в обратную сторону данные на TSE от системы обработки поступают, но на выход TSE данные не выставляет. Может быть кто то сможет скрины из SignalTap выложить с успешной транзакцией(переданным далее по RGMII пакетом) по Avalon-St от SGDMA к TSE? Или может быть есть ещё какая то информация относительно линий ff_tx_mod[1..0] которую я упустил?
  6. Всем доброго времени суток! Некоторое время назад начал разбираться с интерфейсом RGMII и уже неделю не могу добиться данных на передачу по этому интерфейсу. Своих идей уже нет и как я почитал на форумах такой проблемы ни у кого и близко не было, в основном затыки на передачу на уровне физики возникают. Исходный данные у меня такие: -IDE Quartus 13.1; -отладочная плата на базе Stratix III, на ней микросхема PHY 88E1111; -PHY и TSE сконфигурировал для связи по RGMII, тактовая 125 МГц; -обработка пакетов производится связкой TSE+SGDMA+NIOS2; -TSE сконфигуриван с выравниванием по 32; -соединение отладочной платы с ПК точка-точка; -приём настроить удалось, пакет от ПК (ARP) сохраняется в память, по прерыванию я его обрабатываю и отправляю ответ; -SGDMA_tx обрабатывает дескриптор, и я вижу в SignalTap как по шине Avalon-ST в TSE передаётся сформированный мной ответный пакет (скрин 1 из SignalTap); И тут у меня вопрос: SGDMA отновременно с концом пакета EOP выставляет 4 байта данных (frame word) и out_empty[1..0]=2, которые подключены к линиям ff_tx_mod[1..0] корки TSE - в доке на TSE говорится что это "Indicates invalid bytes in the final frame word", а русской доке на Avalon-ST говорится что EOP интепретируется каждым ведомым индивидульно. Вопрос 1: теоретически всё правильно-SGDMA сказал TSE сколько валидных байт защёлкнуть на такте при появлении EOP? Вопрос 2: эта же двойка присутствует на такте "старт пакета" - это правильно? -тактовую на вход TSE интерфейса RGMII tx_clk подаю от PLL 125 МГц; -в SignalTap по фильтру all names удалось найти внутренние линии/отладочные регистры корки TSE под названием U_RGMII и на линии tx_data я вижу свои данные вместе с безошибочной преамбулой RGMII на передачу и двумя потерянными байтами 0xFF, tx_control не вижу (скрин 2 из SignalTap); -на пинах не вижу не tx_data не tx_control; Вопрос 3: если с выравниванием проблемы нет то куда можно капнуть? -адрес буфера с пакетом выравнивал на 32, но пока писал что то сомневаться начал, после праздника попробую поиграться.... -передача по TSE разрешена, прикреплю на всякий случай код настройки TSE; -HW reset от кнопки есть и использую; void MacInit() { // Initialize MAC registers IOWR_ALTERA_TSEMAC_CMD_CONFIG( TSE_MAC_BASE, IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_BASE) | ALTERA_TSEMAC_CMD_SW_RESET_MSK ); while(IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_BASE) & ALTERA_TSEMAC_CMD_SW_RESET_MSK); //Установил адрес MDIO устройства IOWR_ALTERA_TSEMAC_MDIO_ADDR0(TSE_MAC_BASE, 0x12); //Инициализация физического уровня HWresetPHY(); PHYDeviceInit(); //Шаг a alt_u32 mode = 0; //Запрещяю приём и передачу mode = IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_BASE) & (~ALTERA_TSEMAC_CMD_TX_ENA_MSK) & (~ALTERA_TSEMAC_CMD_RX_ENA_MSK); IOWR_ALTERA_TSEMAC_CMD_CONFIG( TSE_MAC_BASE, mode ); //Жду когда биты разрешения приёма и передачи станут 0 при чтении mode = IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_BASE); while( (mode & ALTERA_TSEMAC_CMD_TX_ENA_MSK) || (mode & ALTERA_TSEMAC_CMD_RX_ENA_MSK) ) mode = IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_BASE); //IOWR_32DIRECT( TSE_MAC_BASE, 0xD0*4, 8<<16 ); //Шаг b IOWR_ALTERA_TSEMAC_RX_ALMOST_EMPTY(TSE_MAC_BASE, 8); IOWR_ALTERA_TSEMAC_RX_ALMOST_FULL(TSE_MAC_BASE, 8); IOWR_ALTERA_TSEMAC_RX_SECTION_EMPTY(TSE_MAC_BASE, TSE_MAC_RECEIVE_FIFO_DEPTH-16); IOWR_ALTERA_TSEMAC_RX_SECTION_FULL(TSE_MAC_BASE, 16); IOWR_ALTERA_TSEMAC_TX_SECTION_EMPTY(TSE_MAC_BASE, TSE_MAC_TRANSMIT_FIFO_DEPTH-16); IOWR_ALTERA_TSEMAC_TX_ALMOST_FULL(TSE_MAC_BASE, 3); IOWR_ALTERA_TSEMAC_TX_ALMOST_EMPTY(TSE_MAC_BASE,8); IOWR_ALTERA_TSEMAC_TX_SECTION_FULL(TSE_MAC_BASE, 16); //Шаг c IOWR_ALTERA_TSEMAC_MAC_0(TSE_MAC_BASE,0x7761632A); IOWR_ALTERA_TSEMAC_MAC_1(TSE_MAC_BASE,0x00002A61); //Шаг d IOWR_ALTERA_TSEMAC_FRM_LENGTH(TSE_MAC_BASE, 1518);//frame length 16-bit - 1518 IOWR_ALTERA_TSEMAC_TX_IPG_LENGTH(TSE_MAC_BASE,12); //IOWR_ALTERA_TSEMAC_PAUSE_QUANT(TSE_MAC_BASE, 0xFFFF); //XON //IOWR_32DIRECT(TSE_MAC_BASE, 0x44, 0xFFFF); //XOFF mode = ALTERA_TSEMAC_CMD_XON_GEN_MSK | ALTERA_TSEMAC_CMD_ETH_SPEED_MSK | ALTERA_TSEMAC_CMD_PROMIS_EN_MSK | ALTERA_TSEMAC_CMD_HD_ENA_MSK | ALTERA_TSEMAC_CMD_TX_ADDR_INS_MSK //| ALTERA_TSEMAC_CMD_LOOPBACK_MSK | ALTERA_TSEMAC_CMD_XOFF_GEN_MSK | ALTERA_TSEMAC_CMD_CNT_RESET_MSK | ALTERA_TSEMAC_CMD_RX_ERR_DISC_MSK; IOWR_ALTERA_TSEMAC_CMD_CONFIG( TSE_MAC_BASE, mode); //Шаг e IOWR_ALTERA_TSEMAC_CMD_CONFIG( TSE_MAC_BASE, mode | ALTERA_TSEMAC_CMD_SW_RESET_MSK ); while(IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_BASE) & ALTERA_TSEMAC_CMD_SW_RESET_MSK); //alt_u32 rr = IORD_32DIRECT(TSE_MAC_BASE, 0x3A*4); //Шаг f mode |= ALTERA_TSEMAC_CMD_TX_ENA_MSK | ALTERA_TSEMAC_CMD_RX_ENA_MSK; IOWR_ALTERA_TSEMAC_CMD_CONFIG( TSE_MAC_BASE, mode ); //Жду когда биты разрешения приёма и передачи станут 1 при чтении mode = IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_BASE); while( !(mode & ALTERA_TSEMAC_CMD_TX_ENA_MSK) || !(mode & ALTERA_TSEMAC_CMD_RX_ENA_MSK) ) mode = IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_BASE); } Заранее спасибо за ответы)
  7. http://dmilvdv.narod.ru/Translate/ELSDD/in...dded_linux.html Отличный ресурс
  8. Ядро 2.6 (uClinux)

    Драйвер не работал из за того что в конфиге железа и в файле config.c были приняты разные соглашения об именовании диапазона ВВ контроллера и прерывания, привёл дефайны в соответствие.
  9. Вопрос надо закрыть... Решил проблему, elf был слинкован динамически, а нужные библиотеки не компилировались, слинковал статически и всё заработало.
  10. Ядро 2.6 (uClinux)

    то ли в книжке про ядро, то ли в статье из инета такой обобщённый пример настройки модуля был
  11. Может я чего то не понял, но timer_pdata[] - имя массива само по себе указатель, а так как строка неопределённой длины должна оканчиваться нулём static const char timer_pdata[] {" "0", /* 0 is the name of the timer */ ",NULL}
  12. Ядро 2.6 (uClinux)

    Пишет что неверный символ, по разному пробовал подставлять modinfo- не знал про такую утилиту, попробую завтра
  13. Ядро 2.6 (uClinux)

    Всем привет! Мне необходимо пондять сеть на микро линуксе, проблема заключается в том что драйвер не стартует. Название драйвера smc91x. Сетку поднимаю на отладочной плате 2C35 с ПЛИС CycloneII фирмы Альтера, разработчик рекомендует его делать встроеным (такой способ приведё у них в WiKi и на форуме), но у меня ничего не выходит, так же как и с модулем. Компилируя модуль, драйвер компилится, на выходе получается файл smc91x.ko. Кладу его в папку /usr (мне так удобне), далее в файле modprobe.conf добавляю строку alias eth0 smc91x. В заголовке исходника драйвера написано что ему нужно передать три аргумента: базовый адрес, прерывание и время ожидания. Добавляю в modprobe.conf строку options smc91x io=0x300(подсмотрел из загрузки линукса скомпилинного производителем) irq=6 (знаю точно) nowait=0 (по умолчанию). Затем в папке /usr делаю depmod -a smc91x.ko он у меня ругается на расположение файла, переношу его в /lib/modules/2.6.34 делаю depmod -a smc91x.ko. Никакого вывода не происходит (пробовал разные ключи), я так понял что зависимостей нет? Делаю modprobe smc91x в ответ SEGV, так же был вариант - не поддерживаемый тип файла Пробую insmod smc91x.ko - драйвер добавляется lsmod module smc91x size 21706 used 0 Пробую ifconfig eth0 up в ответ SIOCGIFFLAGS: no such device В module_init и ещё несколько функций драйвера добавил свой printk, но не один ничего не вывел. Такое ощущение что он грузится в память, но управление ему не передается. Если делать драйвер встроенным всё компилится, в файле который содержит названия встроенных модулей (не помню его название) имя нужного драйвера есть. Передаю параметры через kernelargs netdev=6,0x300,0x30f,0,eth0 в соответсвии с доком на параметры моего ядра, т.к. моему драйверу надо три параметра то лишние откинутся (я так предпологаю, точно не уверен) Суть в том что драйвер молчит в обоих случаях. Подскажите куда копать? Может в ядре поддержу чегото ещё включить/убрать? ПРИЛОЖЕНИЯ: На скриншоте лог с нормальной загрузкой драйвера при старте образа от Альтеры kernel_config_.txt dreiver_source_smc91x.txt kernel_parameters.txt
  14. 1. elf точно не для ПК, strace попробую. 2 точно-ссылка Сижу копаюсь в кишках... нашёл интересный сайт про uclinux где подробно расписан процесс его загрузки...
  15. Решил всётаки запустить инит. В процессе разбирательств выяснил что инит в КФС присутствует в elf формате, когда патаешься его запустить пишет can't execute, если компилишь инит не стандартный, а из busybox инит получается бинарный при его запуске выводится сообщении смысл коготорого в том что инит первый запускаемый процесс и система виснет. Загрузив zImage от производителя и попробовав запустить инит (elf формат), он нормально исполняется - пытается монтировать vfs proc и sysfs выводит лого и возвращается в консоль. Перепробовал много вариантов конфигурации, начал разбираться с логикой запуска инит... В следствии чего возникли вопросы: - как будет вести себя инит если inittab пустой или отсутствует, или он его не находит? - по какой причине может не запустится elf файл (предпологаем что скомпилирован он с нужными параметрами), может ли он начать исполнение, но не найдя каких то зависимостей выдать такое сообщение? - и почему инит исполняемый файл, а не скрипт?
  16. На вопрос я забавно ответил) Мне показалоль написано "Так..." При помощи JTAG, работаю с cyclone II, использую несколько утилит командной строки идущих в комплекте с Quartus'ом 11, пример командной строки в первом посте есть.
  17. да Вобщем все получилось! Ура!! :rolleyes: Покурил буржуйские форумы начал копать в сторону настроек mtd утилит и параметров компиляции jffs2, но опасения не подтвердились. После долгих изысканий отключил в настройках ядра параметр^ -enable UBI (из буржуйского описания смутно представляю что он делает, попозже разберусь для себя) после чего пропали ошибки: old jffs2 bitmask found at you cannot use older jffs2 filesystem whith newer kernel, а так же обращения по неправильным адресам Немного поправил размеры партиций, но не думаю что в этом дело... Далее init=/bin/sh спасло ситуацию!))) огромное спасибо за совет! Init на кфс присутствует, но почему то указав его ядру запуск не происходит Но вот две ошибки остались, хотя работает и с ними: physmap-flash physmap-flash.0 could not reserve memory region physmap-flash probe of physmap-flash.0 failed whith error -12 Файлы создаются, данные в них записываюся и сохраняются, после отключения и включения питания всё на месте. Есть только одна мелочь которая беспокоит: когда происходит запись на флеш сыпятся сообщения как на третьем логе.
  18. Надо будет попробовать задать nit=/bin/sh. Проверял логи, init компилится. Сейчас ситуация такова: я сбросил настройки в дефолтные, настроил по мануалу опции ядра + включил опции отладки фс и ядра, подсунул ему командную строку root=/dev/mtdblock1 rw rootfstype=jffs2 mtdparts=physmap-flash.0:6M(kernel)ro,-(rootfs) init=/bin/BusyBox/init (дефаултная настройка я пологаю /sbin/init) в итоге партиции создаются те которые мне нужны сответствующего размера (в логе только косяк перед уходом последний раз компилил забыл скобки поставить в командной строке,поэтому второй раздел partition_001 называется). Пишет что файловую систему он монтирует, что радует конечно. Но инит найти не может. И я не могу понять куда лезет jffs2_scan_ereaseblock, зачем ей адреса в середине партиции ядра и в конце флешки? Мозгом чую что в настройках ядра какая то несогласованность, но вот как её исправить... Вот выдержки из лога: physmap-flash physmap-flash.0 could not reserve memory region physmap-flash probe of physmap-flash.0 failed whith error -12 old jffs2 bitmask found at you cannot use older jffs2 filesystem whith newer kernel not init found Подскажите что делать если кто то сталкивался, а пока курю форумы и мануалы.
  19. Да, действительно перепутал параметр в команде, поправил, но ничего не изменилось. CONFIG_CMDLINE_FORCE=y - через make menuconfig такого найти не смог, возможно опция может по другому называться? Читая про процесс загрузки linux узнал что ядро стартуя монтирует временную урезанную файловую систему в ОЗУ только для чтения, потом запускает самые необходимые драйверы, а далее монтирует КФС. Есть ряд вопросов: - init находится в ФС которая монтируется в ОЗУ или в КФС? - как проверить монтируется ли ФС в ОЗУ? - можно ли обойтись без ФС монтируемой в ОЗУ? - и как проверить что init скомпилился и попал туда куда нужно? P.S. Включил поддрежку Init в busybox
  20. uClinux+jffs2 без u-boot

    Всем доброго времени суток! У меня возникла проблема с запуском uClinux. Суть такова: Есть аппаратная конфигурация - заведомо рабочая. - есть собранный образ uClinux cо следующими настройками: #### To enable MTD [*] Memory Technology Device (MTD) support ---> --- Memory Technology Device (MTD) support [ ] Debugging (NEW) [ ] MTD concatenating support (NEW) [*] MTD partitioning support [ ] RedBoot partition table parsing (NEW) [ ] Command line partition table parsing (NEW) [ ] TI AR7 partitioning support (NEW) *** User Modules And Translation Layers *** [*] Direct char device access to MTD devices -*- Common interface to block layer for MTD 'translation layers [ ] TI AR7 partitioning support (NEW) *** User Modules And Translation Layers *** [*] Direct char device access to MTD devices -*- Common interface to block layer for MTD 'translation layers [*] Caching block device access to MTD devices +включена physical device map (это название на память) #### To enable CFI flash RAM/ROM/Flash chip drivers ---> [*] Detect flash chips by Common Flash Interface (CFI) probe [ ] Detect non-CFI AMD/JEDEC-compatible flash chips (NEW) [ ] Flash chip driver advanced configuration options (NEW) [ ] Support for Intel/Sharp flash chips # for neek [*] Support for AMD/Fujitsu flash chips # others [ ] Support for ST (Advanced Architecture) flash chips (NEW) [ ] Support for RAM chips in bus mapping (NEW) [ ] Support for ROM chips in bus mapping (NEW) [ ] Support for absent chips in bus mapping (NEW) #### To enable flash filesystem support File systems --> Miscellaneous filesystems ---> [*] Journalling Flash File System v2 (JFFS2) support Так же включены нужные mtd утилиты В основных настройках ядра параметры offset addres и linking addres = 0х0 defaul command string = root=/dev/mtdblock0 rw rootfstype=jffs2 Всё настроено на работу с двумя partitions 0x600000-0xA00000 - rootfs 0x000000-0x600000 - kernel При запуске ядра mtd-parts их выводит, под номером 0 - считает rootfs 1 - kernel - есть образ rootfs.jffs2 - размеры партиций взяты с запасом по размеру Зашиваю образ ядра //после компиляции у меня на выходе elf формат образа, поэтому сначала преобразую во flash $SOPC_KIT_NIOS2/bin/elf2flash --base=0x0 --end=0xffffff --reset=0x0 --input=soft --output=flash.flash --boot=$SOPC_KIT_NIOS2/components/altera_nios2/boot_loader_cfi.srec //так зашиваю $SOPC_KIT_NIOS2/bin/nios2-flash-programmer "flash.flash" --base=0x0 --mmu --sidp=0x21208B8 --id=0x3BD3BE2B --accept-bad-sysid --device=1 --instance=0 '--cable=USB-Blaster [uSB-0]' --program --verbose Так загружаю образ ФС // из bin во flash $> *bin2flash --input=rootfs.jffs2 –output=rootfs.flash --location=0x0060 0000 –verbose //зашиваю > *nios2-flash-programmer ”jffs2.flash” --base=0x0 –mmu --program --verbose Зашивается в логе зашивается всё по правильным адресам т.е. ядро в партицию начиная с 0х0, фс в партицию начиная с 0х600000 При загрузке выдает ошибку: freeing unused kernel memory 72k freed <0xC618D000 - c619E000> Kernel panic - not syncing: no init found. Try passing init = option to kernel. Помогите примонтировать файловую систему) Лог загрузки:
×
×
  • Создать...