Jump to content

    

Dilim

Участник
  • Content Count

    17
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Dilim

  • Rank
    Участник
  1. Всем привет! У меня в наличии имеется: 1. Устройство на основе трансивера Micrel KSZ9031, которое формирует по гигабиту обычные UDP пакеты; 2. Компьютер с windows 7 (Realtek RTL8111F) и с windows 8 (Realtek RTL8171); 3. Компьютер с Ubuntu 14.04.1 (Marvell 88E8055); 4. Гигабитный "неуправляемый" свитч TP-Link TL-SG1005D на основе Realtek RTL8367, на котором видимо стоит некое подобие Linux (http://blog.zapto.org/?p=52). 5. Сетевая карта на основе Intel 82574L. Если соединить напрямую устройство (KSZ9031) с компьютером (windows 7, 8), то линк поднимается, пакеты идут и их видно через wireshark. Если соединить напрямую устройство (KSZ9031) с компьютером (Ubuntu 14.04.1), то линк поднимается, но UDP пакеты с помощью wireshark или других утилит не видны. Пропустив UDP пакеты через TL-SG1005D, поднимается только линк, UDP пакеты до компьютера (windows 7, 8 или Ubuntu 14.04.1) тоже не доходят. Пробовали пропустить пакеты через D-link DGS-1005A, пакеты также не доходят. Длина всех патчкордов из UTP 5e во всех конфигурациях не превышает одного метра. Смена портов назначения (destination port) и портов источника (source port) не помогает. Broadcast пакеты тоже не доходят. Расчет контрольной суммы (установка значения отличного от 0х0000) пользовательских данных в UDP пакете не помогает. Если генерить точно такие же пакеты с компьютера (windows 7, 8 или Ubuntu 14.04.1) с помощью обычных сокетов, то пакеты спокойно проходят через TL-SG1005D и через DGS-1005A. При подключении устройства (KSZ9031) с 82574L(windows 8) линк поднимается, но пакеты не видны даже в wireshark как бы я не старался. Дамп из wiresharkа с UDP пакетами, которые доходят если напрямую подключать устройство (KSZ9031) с компьютером (windows 7, 8) можно посмотреть здесь - https://sites.google.com/site/dumpudp/home/...rects=0&d=1. Хочется чтобы UDP пакеты в независимости от операционной системы и используемого трансивера доходили и через свитч тоже. Что я делаю не так? Есть ли какие-то методы решить эту проблему хотя бы частично? Буду крайне благодарен если поможете с этой задачей.
  2. Драйве Nand

    Спасибо, но всё оказалось проще: надо было увеличить тайминги.
  3. Драйве Nand

    Сейчас я гружусь с mmc и через u-boot записываю в нанд образы u-boot`а, ядра и файловой системы после чего перезагружаюсь уже с нанда. Т.к. загрузка проходит нормально имею смелось предположить, что запись в нанд происходит правильно. Поясните пожалуйста, что Вы имеете ввиду под геометрией памяти. Если это размер erase-блоков, то да, это учитывается.
  4. Драйве Nand

    Собственно есть готовая сборка linux для платы AM3517EVM. На оригинальной плате установлен чип nand Micron с разрядностью шины 16 бит. У меня же на отладночной плате установлен чип samsung с 8 разрядной шиной. Для запуска менял в файле nand_base.c разрядность шины (не нашел, где задать соответствующее определение). В итоге ядро загружается и начинает сыпаться сообщения: cannot write OOB for EB at 07320000, requested 8 bytes, read 0 bytes, error -5 jffs2_flush_wbuf(): Write failed with -5 JFFS2 warning: (1507) jffs2_sum_write_data: Write of 16232 bytes at 0x0d99c098 failed. returned -5, retlen 0 Write of 2340 bytes at 0x0dce0000 failed. returned -5, retlen 0 ну и так далее в том же духе. Через минут 15 и вовсе всё падает JFFS2 error: (1500) jffs2_link_node_ref: Adding new ref cf3e9488 at (0x0a031000-0x0a031000) not immediately after previous (0x0a040000-0x0a031000) kernel BUG at /home/logic/mybuild/src/linux/fs/jffs2/nodelist.c:644! подозреваю, что какие то проблемы с ECC, только вот понять не могу, что именно не так...
  5. Пытаюсь запустить аппаратный i2c и наткнулся на такую проблему: после инициализации RCC_APB2PeriphClockCmd(SL5324_I2C_SCL_GPIO_CLK | SL5324_I2C_SDA_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = SL5324_I2C_SCL_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; GPIO_Init(SL5324_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);//в этот момент линия падает в 0 GPIO_InitStructure.GPIO_Pin = SL5324_I2C_SDA_PIN; GPIO_Init(SL5324_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);//и тут падает RCC_APB1PeriphClockCmd(SL5324_I2C_CLK, ENABLE); I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; I2C_InitStructure.I2C_OwnAddress1 = 0x16; I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_InitStructure.I2C_ClockSpeed = 100000; I2C_Init(SL5324_I2C, &I2C_InitStructure); I2C_AcknowledgeConfig(SL5324_I2C, ENABLE); I2C_Cmd(SL5324_I2C, ENABLE); начинаю передачу данных, но стартовые условия не собираются while (I2C_GetFlagStatus(SL5324_I2C,I2C_FLAG_BUSY)); I2C_GenerateSTART(SL5324_I2C, ENABLE); while (I2C_GetFlagStatus(SL5324_I2C,I2C_FLAG_SB) == RESET); //здесь зацикливается I2C_Send7bitAddress(SL5324_I2C, 0x44, I2C_Direction_Transmitter); и т.д......... линии SCL и SDA подтянуты к 3.3v, но во время инициализации ног контроллера напряжение на них падает в ноль, хотя до этого там 3.3. Подскажите, что я делаю не так?
  6. ХА! действительно, так оно и было, для разных разрядностей по разному пишется... долго же я с этим мучался! Всем спасибо!
  7. Дело в том, что на плате с 16ти разрядным нанд такой способ загрузки работает. Не будут же отличаться ЕСС для разных разрядностей флешек.. или у TI всё настолько?)
  8. Пин gpmc_wait0 подключен к выводу READY/BUSY нанда. sys_boot пины проверял неоднократно, там все нормально, да и не похоже, что в них ошибка, потому что он вроде как пытается с нанда загрузится. Если бы не читал id, или читал бы неправильно, то не конфигурил бы правильно регистры GPMC_CONFIG. Так что тут вроде как всё хорошо. Судя по бут-сиквенс дальше он должен копировать образ загрузчика из нанда в RAM и при пошаговой отладке в регистре R0 на несколько шагов появлятся адрес 0x40200800 (с этого адреса начинается исполнение загрузчика в RAM - проверял на работающей плате с 16ти битным нандом) но после этого всё рушится.. Именно через юбут и записываю. После заливки сравнивал получившийся дамп нанда и файл загрузчика в hex редакторе - всё одинаково.
  9. Чип выбран по таблице, причем пробовали Micron и Samsung, правда с одинаковым chip ID 0xDA. Режим загрузки выбран, чтобы первый был нанд, и обмен идёт - это видно через отладчик. Читается ID, конфигурируются регистры GPMC(конфигурируется правильно) и после этого ребут. Да как раз вся проблема в том, что до выполнения загрузчика дело не доходит, если судить по отладчику, то за пределы rom кода самого процессора выполнение не идёт. Спасибо, jtag вчера настроил под виндой, теперь всё работает.
  10. Имеется плата с камнем TI am3517, 8ми битной Nand. С Nand плата не грузится, с MMC работает нормально. Подключение отладчика показало, что ROM код стартует, инициализирует регистры GPMC, после чего перезагружается и по новой. При пошаговой отладке не удалось понять на чём валится процесс загрузки, т.к. срабатывает исключение и выкидывает на какой то вектор, который в обычном режиме работы никогда не срабатывает (ставил брэйкпоинт в отладчике). Вопроса, собственно, два: 1. Почему не идет загрузка с nand? при загрузке с mmc записываю в nand первичный загрузчик, u-boot и т.д. дамп показывает, что всё записалось. 2.Как включить поддержку watchpoint для j-link под linux? вот здесь: http://processors.wiki.ti.com/index.php/J-...mulator_Support нашел, что по умолчанию в j-link watchpoints выключены и их как то надо включить. Работаю в убунте, code composer studio v 5. Под виндой нет поддержки данного камня у j-link.
  11. нужен Technical Reference Manual на Omap2420. Вроде такого: http://focus.ti.com/general/docs/lit/getli...mp;fileType=pdf только на другой проц. проблема в том, что на сайте TI я нашел документацию только на те железяки, которые они продают сейчас, а на старье ни одной ссылки. как дальше жить?
  12. кажется заработало! там надо было запустить некий скрипт окружения и уже с ним компилировать..
  13. вовсю изучаю, да больно мудрёно) вот makefile без изменений: CC = $(shell head -n 1 conf-cc) LD = $(shell head -n 1 conf-ld) SOURCES = memtester.c tests.c OBJECTS = $(SOURCES:.c=.o) HEADERS = memtester.h TARGETS = *.o compile load auto-ccld.sh find-systype make-compile make-load systype extra-libs INSTALLPATH = /usr/local # # Targets # all: memtester install: all mkdir -m 755 -p $(INSTALLPATH)/{bin,man/man8} install -m 755 memtester $(INSTALLPATH)/bin/ gzip -c memtester.8 >memtester.8.gz; install -m 644 memtester.8.gz $(INSTALLPATH)/man/man8/ auto-ccld.sh: \ conf-cc conf-ld warn-auto.sh ( cat warn-auto.sh; \ echo CC=\'`head -1 conf-cc`\'; \ echo LD=\'`head -1 conf-ld`\' \ ) > auto-ccld.sh compile: \ make-compile warn-auto.sh systype ( cat warn-auto.sh; ./make-compile "`cat systype`" ) > \ compile chmod 755 compile find-systype: \ find-systype.sh auto-ccld.sh cat auto-ccld.sh find-systype.sh > find-systype chmod 755 find-systype make-compile: \ make-compile.sh auto-ccld.sh cat auto-ccld.sh make-compile.sh > make-compile chmod 755 make-compile make-load: \ make-load.sh auto-ccld.sh cat auto-ccld.sh make-load.sh > make-load chmod 755 make-load systype: \ find-systype trycpp.c ./find-systype > systype extra-libs: \ extra-libs.sh systype ./extra-libs.sh "`cat systype`" >extra-libs load: \ make-load warn-auto.sh systype ( cat warn-auto.sh; ./make-load "`cat systype`" ) > load chmod 755 load clean: rm -f memtester $(TARGETS) $(OBJECTS) core memtester: \ $(OBJECTS) memtester.c tests.h tests.c tests.h conf-cc Makefile load extra-libs ./load memtester tests.o `cat extra-libs` memtester.o: memtester.c tests.h conf-cc Makefile compile ./compile memtester.c tests.o: tests.c tests.h conf-cc Makefile compile ./compile tests.c в файле conf-cc по умолчанию вот эта строка: cc -O2 -DPOSIX -D_POSIX_C_SOURCE=200809L -D_FILE_OFFSET_BITS=64 -DTEST_NARROW_WRITES -c это, как я понимаю, указание компилятора и параметры его вызова. я пытался менять на arm-arago-linux-gnueabi-gcc, то есть на тот, который мне нужен и указывать пусть до него в основном makefile с помощью: export PATH="/home/ti-sdk/linux-devkit/sysroots/i686-arago-linux/usr/bin:$PATH" после чего из консоли за пускал make memtester, но как то не сложилось( что я делаю не так? да, я не настолько нуб, чтобы не прочитать readme) я делал так, но в результате ошибки..
  14. Смотрел, там пишут как добавить пусть к тулчейну и переопределить имя компилятора. Как только не пробовал но в итоге при выполнении make получается только это: ( cat warn-auto.sh; \ echo CC=\'`head -1 conf-cc`\'; \ echo LD=\'`head -1 conf-ld`\' \ ) > auto-ccld.sh /bin/sh: cat: команда не найдена /bin/sh: строка 1: head: команда не найдена /bin/sh: строка 2: head: команда не найдена cat auto-ccld.sh make-compile.sh > make-compile /bin/sh: cat: команда не найдена make: *** [make-compile] Ошибка 127 В чём проблема? Он всё равно не может найти путь к компилятору? или я что то не так понимаю...
  15. Есть отладочная плата am3517evm на ядре cortex a8 и есть готовый SDK в котором собраны загрузчик, ядро и разные плюшки для запуска linux на данной плате. Для компиляции ядра и загрузчика написаны скрипты, которые используют кросс компилятор arm-arago-linux-gnueabi. Всё это делается под убунтой. Чтобы запустить на плате утилиту memtester, которая распространяется в виде исходников, нужно создать бинарник этой утилиты. После того, как я делаю make под убунтой полученный бинарник прекрасно запускается в ней же, но не хочет запускаться на плате. Как я понимаю нужно использовать компилятор из SDK, который бы собирал бинарник именно для платы. Что и как нужно прописать в makefile`е, чтобы make под убунтой использовала нужный компилятор? Если можно, пожалуйста попдробней для нуба..