Jump to content

    

shamrel

Свой
  • Content Count

    157
  • Joined

  • Last visited

Posts posted by shamrel


  1. Хотел пройти мимо, так как с таким семейством процессоров не работал, и не очень понятна ваша конфигурация. Но захотел разобраться.

    В качестве первичного загрузчика, что используется (u-boot, grub)?

  2. Можно обратить внимание на стандартную библиотеку stdio.h. Функция printf вам в помощь.

    В зависимости от настроек компилятора, может получиться вполне приемлемый код.

    Нежели, нужно быстро обрабатывать, или мало свободного ОЗУ (подключение stdio откушает довольно таки много RAM), то по методу Сергея Борща.

  3. Мне кажется, без минимальной схемы - тут никуда. Я имею ввиду функциональной.

    Если у вас частота на АЦП неизменна(50 МГц) - какой клок вам нужен на CIC? По идее данные заходят на CIC с частотой работы (дискретизации) АЦП. А вот выходят из CIC - на меньшей частоте. Но обычно это реализуется не другой частотой, а значимостью сигнала. То есть на входе - каждый такт значимый, а на выходе есть некий отдельный признак значимых данных. Который возникает раз в 1/2/4/8 и т.д. тактов.

    Все верно. Все в соответствии с вашей идеей. :) Только термин "значимость" слышу первый раз.

    CIC состоит из двух частей, первая часть работает на частоте DAC (50 МГц) . Вторая часть должна работать на пониженной частоте. Разработчик, который вел проект до меня, сделал это через тактирование. Клоки для второй части CIC брались от делителя (на счетчике) от клоков DAC. Проект был реализован в редакторе Schematic и без всяких sdc. Проект успешно (!) прошел тестирования и пошел в серию. Пока не понадобилось внести изменение в функционал и перевести на другую элементную базу. Небольшие изменения вносимые в произвольную часть схемы нарушали работоспособность. Когда добавил .sdc и прогнал в TimeQuest получил сплошные слаки. Исходная прошивка перестала быть работоспособной. Было принято решение переписать на Verilog.

    Что еще добавить? Пожалуй, то что я с ПЛИС до этого серьезно не работал.

    Возвращаясь к теме. Dmitriyspb предложил идею, которую сейчас прорабатываю. Первая и вторая часть тактируется одной, системной частотой, а понижение частоты происходит посредствам "пропускания" тактов. Типа:

     

    always @(posedge clk)

    ....

    if(sample)...

     

    где clk -- клоки высокочастотные (200МГц), а sample -- разрешение.

     

  4. Я не совсем понимаю схему (недостаточно данных), но если на АЦП клок заходит с плис то делаем следующую вещь: Опорный клок-> Делитель на целое число с учетом DDR триггера на выходе -> выходной DDRC триггер.

     

    Отсутствие PLL (и выходного триггера (обязательно расположенного в блоке ввода вывода, у Xilinx это называется iob, у Altera возможно по-другому) даст более качественную выходную частоту нежели с PLL (хотя наверное чуть-чуть хуже, чем при использовании внешних компонентов). Использование DDR триггера позволит делить клок на числа некратные двойке.

     

    По идее должно быть сильно лучше чем с PLL. Насколько возможно отсутствие PLL - Не совсем понял из условий задачи.

     

    Ещё не совсем понял, как вы выбираете частоту дискретизации извне? У вас гарантированно только полезный сигнал приходит на АЦП? Уже отфильтрован внешними условиями/схемами?

    Собственно, система такая. Есть 4 АЦП, каждый АЦП работает на 50МГц. Тактируется с ПЛИС (Altera). Частота АЦП неизменна. Внутри ПЛИС на каждый канал установлен дециматор CIC. После фильтра данные идут на мультиплексор. Выходы 4 каналов складываются в один большой FIFO. С другой стороны FIFO данные передаются в компьютер. Для работы CIC нужна опорная частота, которая будет определять коэффициент децимации, а по сути эквивалентную частоту дискретизации канала. Этот коэффициент децимации скидывается управляющей программой с компьютера. Таким образом, управление мультиплексоров должно выполнятся на частоте в 4 раза больше, чем частота CIC, и достигать максимума в 200МГц, когда децимация не требуется. На плату приходит 50МГц с внешнего генератора.

    В кристалле 2 PLL, одна используется для High speed USB, вторую планирую использовать для опроса АЦП.

    По поводу DDR триггера. Я не знаю как это реализовать. С ПЛИС работаю недавно.

  5. Vascom, имхо, мультиплексор внесет трудно прогнозируемую задержку. Особенно, если учесть, что исходные клоки (делитель 1) и клоки, после делителя (делитель на 2 и более) имеют всяко разную задержку. Да даже в идеале фаза будет смещена на 180.

     

    Dmitriyspb, спасибо! Что-то похожее крутилось в голове, но не могло сформироваться! Собственно, делитель не кратный 2, думаю, не составит труда сделать. Главное, что б на выходе длительность разрешающего импульса была равна периоду задающего такта.

     

    Внешний PLL -- наверное хорошо, но бюджет устройства крайне ограничен. Каждую лишнюю точку пайки считают.

     

    P.S.: Dmitriyspb, отдельное вам спасибо, за то, что показали как в ASCII на диаграмме единичку рисовать, а то я все символом 'T' :)

     

     

  6. Приветствую!

    В системе есть тактовая частота Fclk = 200МГц. От этой частоты нужно тактировать АЦП, ЦАП и цепочки фильтров. Причем, частота выборки устанавливается из вне (передается параметр) и может быть любой из Fclk/N , где N -- целое число 16-битное число (включая 1).

    Как можно это сделать? Делитель на счетчике с загрузкой? Выход не будет синхронным с основной частотой, да и минимальный коэффициент деления 2, а нужно 1 (нет деления). Использовать перестраиваемый PLL? Сильно громоздко получается (в Altera), или может я не до конца разобрался как это сделать. Или смириться с асинхронностью схемы?

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

    Собственно, если еще актуально, то вот пример Термометра на LabVIEW.

    Там же модули для работы с FTDI и исходники, правда на Си для DS18B20 под атмегу. При необходимости можно запилить и под ПЛИС.

     

  8. Сергей, zhevak, благодарю за советы!

    Удалось поднять дебаг в Эклипсе, причем дебаг по Си коду.

    Создал пустой файл crt0.S, доставил плагин "zylin".

    Отладка запустилась. Точки останова ставятся, код выполняется. Значения переменных можно отследить. Однако, для работы с регистрами периферии нужен специальный файл с описанием архитектуры в формате XML (плагин "EmbSys Registers" ), иначе, только по адресам, естественно, под мой чип такого файла не оказалось. Вся система вышла на удивление нестабильной и глючной, потому виртуалка и буду IAR осваивать. :(

     

    Резюме. Отлаживать MSP430 под Eclipse в Линух можно, но сложно. НЕ РЕКОМЕНДУЮ!

    Еще раз, всем спасибо. Тему можно считать закрытой.

  9. В продолжение.

    Где взять crt0.S ? Где он должен лежать и для чего он вообще нужен? Почему в *.elf файле прописаны какие-то фантастические пути к crt0.S, типа:

    /home/pf/git/msp430eclipse/dk.xpg.msp430eclipse/scripts/src/gcc/libgcc/config/msp430/crt0.S

    Как Эклипс натравить на нужный файл?

  10. Приветствую!

    Собственно, в описании темы проблема озвучена. В настоящий момент развернут Toolchain для MSP, успешно подружен с Eclipse.

    Из командной строки работает mspdebug.

    Первый вопрос, как научить Eclipse дебажить код?

    Уважаемый мною (читал ваш блог и не только на технические темы) zhevak в одной из тем на форуме рассказал как дебажить контроллер в консольном режиме. В связи с чем вопрос, как с этим работать? Как имея программу на Си произвести ее отладку? Как узнать адреса для точек останова, выполнить пошагово код, прочитать регистры периферии? Или для этого нужно сначала дизассемблировать?

     

  11. Один из способов снять напряжение с VBUS:

     

     для USB1:
    devmem2  0x47401460 b 0x00
    devmem2  0x47401460 b 0x01
    
    для USB2:
    devmem2  0x47401c60 b 0x00
    devmem2  0x47401c60 b 0x01

     

    Но это же не красиво. :(

    Ну как же так?!

    Хочется пользоваться драйвером, и не хочется верить, что с обновлением ядра сломали удобный механизм.

  12. [url=http://electronix.ru/redirect.php?http://sysadm.pp.ua/linux/usb.html]http://sysadm.pp.ua/linux/usb.html[/url]

    В комментариях тоже полезное есть.

    Спасибо за помощь, но нет.

    echo "0" > /sys/bus/usb/devices/2-1/power/autosuspend

    echo "auto" > /sys/bus/usb/devices/2-1/power/level

    В этих файлах и так эти значения по умолчанию.

    Во все писаемые файлы из директории power уже писал все что угодно, и по исходникам смотрел, что туда вообще писать можно.

    # ls -l /sys/bus/usb/devices/1-1/power/
    -r--r--r--    1 root     root          4096 Oct 29 10:40 active_duration
    -rw-r--r--    1 root     root          4096 Oct 29 10:32 autosuspend
    -rw-r--r--    1 root     root          4096 Oct 29 10:32 autosuspend_delay_ms
    -r--r--r--    1 root     root          4096 Oct 29 10:33 connected_duration
    -rw-r--r--    1 root     root          4096 Oct 29 10:33 control
    -rw-r--r--    1 root     root          4096 Oct 29 10:32 level
    -rw-r--r--    1 root     root          4096 Oct 29 10:40 persist
    -r--r--r--    1 root     root          4096 Oct 29 10:40 runtime_active_time
    -r--r--r--    1 root     root          4096 Oct 29 10:40 runtime_status
    -r--r--r--    1 root     root          4096 Oct 29 10:40 runtime_suspended_time
    -rw-r--r--    1 root     root          4096 Oct 29 10:40 wakeup
    -r--r--r--    1 root     root          4096 Oct 29 10:40 wakeup_abort_count
    -r--r--r--    1 root     root          4096 Oct 29 10:40 wakeup_active
    -r--r--r--    1 root     root          4096 Oct 29 10:40 wakeup_active_count
    -r--r--r--    1 root     root          4096 Oct 29 10:40 wakeup_count
    -r--r--r--    1 root     root          4096 Oct 29 10:40 wakeup_expire_count
    -r--r--r--    1 root     root          4096 Oct 29 10:40 wakeup_last_time_ms
    -r--r--r--    1 root     root          4096 Oct 29 10:40 wakeup_max_time_ms
    -r--r--r--    1 root     root          4096 Oct 29 10:40 wakeup_total_time_ms
    

    Да, эти же манипуляции проводил и с /sys/bus/usb/devices/usb1/power/

    Проверил саму физическую возможность отключения питания. В device tree ножку, отвечающую за USB0_DRVVBUS,

    объявил как GPIO. в результате в "ручном" режиме питание отключается, однако при загрузке, естественно, ошибка с

    VBUS. Ну, и конечно, USB нормально не работает.

     

     

     

  13. Доброго Здоровья!

    Имеется плата на AM3359 ( на основе Beagle Bone Black) с запущенным linux 3.12, в качестве файловой системы использован слегка модифицированный линукс Angstrom.

    На USB1 запаян FT2232H. Стоит задача включать/выключать питание USB, для перезапуска FT2232H чипа (+ кое какая перефирия питается от +5В USB.).

    Начальные условия:

    # lsusb 
    Bus 001 Device 002: ID 0403:6010 Future Technology Devices International, Ltd FT2232C Dual USB-UART/FIFO IC
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    
    # ls  /sys/bus/usb/devices/
    1-0:1.0  1-1      1-1:1.0  1-1:1.1  2-0:1.0  usb1     usb2

    Мои мытарства.

    Способ N1. Пытаемся воспользоваться старым приемом, записать в /sys/bus/usb/devices/usb1/power/level значение "suspend".

    Говорит, что инвалид аргумент, кроме того, радостно сообщает, что " WARNING! power/level is deprecated; use power/control instead".

    Пробуем с power/control -- тоже самое. Лезем в документацию и исходники, и выясняем, что теперь туда можно записать только значения

    "on" и "auto".

     

    Способ N2.. На импортных форумах рекомендуют для отключения/включения питания отбиндить, а затем заново забиндить устройство.

    Пытаюсь сделать это так:

    echo '1-0:1.0' > /sys/bus/usb/drivers/usb/unbind
    echo '1-1' > /sys/bus/usb/drivers/usb/unbind
    echo '1-1:1.0' > /sys/bus/usb/drivers/usb/unbind
    echo '1-1:1.1' > /sys/bus/usb/drivers/usb/unbind

    На все потуги ответ один: sh: write error: No such device

    До бинда дело не доходит.

     

    Как отключить питание на линии USB?

     

     

  14. Доброго Здоровья! Не стал плодить тему, тем более, что название текущей как нельзя лучше подходит к сути вопроса.

    Как в исходниках u-boot грамотно активировать вывод сообщений, типа: pr_debug, debug, pr_warning?

    Пробовал в ./include/configd/custom_board.h добавлять соответствующие флаги, например:

     

    #define DEBUG (1)

    #define CONFIG_MTD_DEBUG (1)

    #define CONFIG_MTD_DEBUG_VERBOSE (7)

     

    эффекта не возымело.

    Как включить отладку? Можно ли включить отладку только для определенного модуля? С виду, все для этого есть, а вот руки кривоваты.

     

  15. ..по моему опыту LQFP с шагом 0.5 мм - я накладываю общую маску на все ножки, монтажники паяют и проверяют пайку под микроскопом.

    Сам я такие паял микроволной , потом смотрел под микроскопом.

    Проблем не было.

    Здравия! Для монтажа на линии обязательно между ножек должен быть полосок зеленки!

    Мы делаем так: ширина ножки -- 0.27мм, отступ маски от края ножки -- 0.055мм, мостик маски получается 0.1мм.

    Параметры выработаны монтажным цехом (SMD на линии) за много лет. Для производителей печатных плат такие зазоры относят к типовому техпроцессу.

    post-31229-1407725011_thumb.png

  16. Доброго Здоровья!

    Схожая проблема. Имеется SMA розетка на плату -- вход/выход приемопередатчика на СС1101 (433МГц).

    Корпус изделия пластиковый, разъем служит для подключения внешней антенны. Требуется защитить вход от разрядов 4 кВ.

    Сигнальный проводник разъема соединен с общим проводом двумя встречно-параллельно включенными диодами BAV99 (эффективно спасает от теристорного эффекта по входу CC1101). Проблема заключается в том, что корпус разъема является опорным для сигнала, и способ отвода разряда с шасси по отдельной поверхности, как это принято делать для Ethernet и USB, тут не пройдет. Как быть?

    Кроме того, стоит проблема накопления потенциала на плате при длительном строке эксплуатации. Устройство запитано через DCDC от трехфазной сети. Это можно решить, соединив общий провод с нейтралью через конденсатор, скажем, 10нФ (4кВ) и резистор 1-2 МОм ? Делать отдельный разъем для "чистого заземления" крайне затруднительно.

  17. Спасибо, Jury093, и низкий поклон!

    Из линукса получается смонтировать, отформатировать, развернуть образ rootfs.

    Сейчас проблема в том, что u-boot и ядро имеют различную схему ECC. То-есть,

    образ файловой системы, записанный под u-boot, не монтируется в Linux. А если прошить в

    NAND образ u-boot.img и MLO из под Линукса, то не грузиться с NAND. Если же u-boot.img и MLO

    записаны в NAND под u-boot, то все хорошо. Сейчас загрузиться получается с uSD, но на серийном

    устройстве ее не будет. Нужно все действия выполнять под u-boot.

     

    Образ делал в два этапа: сначала mkfs.ubifs, а потом ubinize. Ядро и u-boot собраны с

    схемой ECC -- BH8 (аппаратный). u-boot версии 2014.01. Раньше можно было выбирать

    схему есс командой nandecc, теперь команды этой нет.

    .conffig содержит:

    
    #
    # Disk-On-Chip Device Drivers
    #
    # CONFIG_MTD_DOC2000 is not set
    # CONFIG_MTD_DOC2001 is not set
    # CONFIG_MTD_DOC2001PLUS is not set
    # CONFIG_MTD_DOCG3 is not set
    CONFIG_BCH_CONST_M=13
    CONFIG_BCH_CONST_T=8
    CONFIG_MTD_NAND_ECC=y
    # CONFIG_MTD_NAND_ECC_SMC is not set
    CONFIG_MTD_NAND=y
    # CONFIG_MTD_NAND_ECC_BCH is not set
    # CONFIG_MTD_SM_COMMON is not set
    # CONFIG_MTD_NAND_MUSEUM_IDS is not set
    # CONFIG_MTD_NAND_DENALI is not set
    # CONFIG_MTD_NAND_GPIO is not set
    CONFIG_MTD_NAND_OMAP2=y
    CONFIG_MTD_NAND_OMAP_BCH=y
    CONFIG_MTD_NAND_OMAP_BCH8=y
    # CONFIG_MTD_NAND_OMAP_BCH4 is not set
    CONFIG_MTD_NAND_IDS=y
    # CONFIG_MTD_NAND_DISKONCHIP is not set
    # CONFIG_MTD_NAND_DOCG4 is not set
    # CONFIG_MTD_NAND_NANDSIM is not set
    CONFIG_MTD_NAND_PLATFORM=y
    # CONFIG_MTD_ALAUDA is not set
    # CONFIG_MTD_ONENAND is not set
    

     

    из файла конфигурации платформы для u-boot:

    #ifdef CONFIG_NAND
    #define CONFIG_NAND_OMAP_GPMC
    #define CONFIG_NAND_OMAP_ELM
    #define CONFIG_SYS_NAND_5_ADDR_CYCLE
    #define CONFIG_SYS_NAND_PAGE_COUNT	(CONFIG_SYS_NAND_BLOCK_SIZE / \
    				 CONFIG_SYS_NAND_PAGE_SIZE)
    #define CONFIG_SYS_NAND_PAGE_SIZE	2048
    #define CONFIG_SYS_NAND_OOBSIZE		64
    #define CONFIG_SYS_NAND_BLOCK_SIZE	(128*1024)
    #define CONFIG_SYS_NAND_BAD_BLOCK_POS	NAND_LARGE_BADBLOCK_POS
    #define CONFIG_SYS_NAND_ECCPOS		{ 2, 3, 4, 5, 6, 7, 8, 9, \
    				 10, 11, 12, 13, 14, 15, 16, 17, \
    				 18, 19, 20, 21, 22, 23, 24, 25, \
    				 26, 27, 28, 29, 30, 31, 32, 33, \
    				 34, 35, 36, 37, 38, 39, 40, 41, \
    				 42, 43, 44, 45, 46, 47, 48, 49, \
    				 50, 51, 52, 53, 54, 55, 56, 57, }
    
    #define CONFIG_SYS_NAND_ECCSIZE		512
    #define CONFIG_SYS_NAND_ECCBYTES	14
    #define CONFIG_SYS_NAND_ONFI_DETECTION
    #define CONFIG_NAND_OMAP_ECCSCHEME	OMAP_ECC_BCH8_CODE_HW
    #define CONFIG_SYS_NAND_U_BOOT_START	CONFIG_SYS_TEXT_BASE
    #define CONFIG_SYS_NAND_U_BOOT_OFFS	0x80000
    #endif
    #endif
    
    
    /* NAND support */
    #ifdef CONFIG_NAND
    #define CONFIG_CMD_NAND
    #define GPMC_NAND_ECC_LP_x16_LAYOUT	1
    #if !defined(CONFIG_SPI_BOOT) && !defined(CONFIG_NOR_BOOT)
    #define MTDIDS_DEFAULT			"nand0=omap2-nand.0"
    #define MTDPARTS_DEFAULT		"mtdparts=omap2-nand.0:128k(SPL)," \
    				"128k(SPL.backup1)," \
    				"128k(SPL.backup2)," \
    				"128k(SPL.backup3),1792k(u-boot)," \
    				"128k(u-boot-spl-os)," \
    				"128k(u-boot-env),5m(kernel),-(rootfs)"
    #define CONFIG_ENV_IS_IN_NAND
    #define CONFIG_ENV_OFFSET		0x260000 /* environment starts here */
    #define CONFIG_SYS_ENV_SECT_SIZE	(128 << 10)	/* 128 KiB */
    #endif
    #endif
    
    

     

    P.S: Причина редактирования: добавил конфигурацию.

  18. Здоровья всем!

    Проследил по исходникам путь от считывания DT, до инициализации драйвера. Нашел вчем трабла, hwmod для GPMC модуля был задал не корректно. Исправил.

    В ситеме появились признаки NAND:

    root@am33:~# dmesg | grep NAND

    [ 32.703146] jffs2: version 2.2. (NAND) (SUMMARY) �© 2001-2006 Red Hat, Inc.

    [ 34.003647] enabling NAND BCH ecc with 8-bit correction

    [ 34.020513] NAND device: Manufacturer ID: 0x2c, Chip ID: 0xda (Micron MT29F2G08AB4

    [ 34.492286] OneNAND driver initializing

     

    root@am33:~# cat /proc/mtd

    dev: size erasesize name

    mtd0: 00020000 00020000 "SPL1"

    mtd1: 00020000 00020000 "SPL2"

    mtd2: 00020000 00020000 "SPL3"

    mtd3: 00020000 00020000 "SPL4"

    mtd4: 001e0000 00020000 "U-boot"

    mtd5: 00020000 00020000 "environment"

    mtd6: 00500000 00020000 "Kernel"

    mtd7: 0f880000 00020000 "File-System"

     

    root@am33:~# dmesg | grep GPMC

    [ 0.099427] omap-gpmc 50000000.gpmc: GPMC revision 6.0

    [ 0.099645] GPMC CS0: cs_on : 0 ticks, 0 ns (was 0 ticks) 0 ns

    [ 0.099659] GPMC CS0: cs_rd_off : 5 ticks, 50 ns (was 30 ticks) 44 ns

    [ 0.099672] GPMC CS0: cs_wr_off : 5 ticks, 50 ns (was 30 ticks) 44 ns

    [ 0.099684] GPMC CS0: adv_on : 1 ticks, 10 ns (was 0 ticks) 6 ns

    [ 0.099697] GPMC CS0: adv_rd_off: 4 ticks, 40 ns (was 30 ticks) 34 ns

    [ 0.099709] GPMC CS0: adv_wr_off: 5 ticks, 50 ns (was 30 ticks) 44 ns

    [ 0.099721] GPMC CS0: oe_on : 1 ticks, 10 ns (was 7 ticks) 6 ns

    [ 0.099734] GPMC CS0: oe_off : 6 ticks, 60 ns (was 24 ticks) 54 ns

    [ 0.099746] GPMC CS0: we_on : 1 ticks, 10 ns (was 5 ticks) 6 ns

    [ 0.099759] GPMC CS0: we_off : 4 ticks, 40 ns (was 22 ticks) 40 ns

    [ 0.099771] GPMC CS0: rd_cycle : 9 ticks, 90 ns (was 30 ticks) 82 ns

    [ 0.099784] GPMC CS0: wr_cycle : 9 ticks, 90 ns (was 30 ticks) 82 ns

    [ 0.099797] GPMC CS0: access : 7 ticks, 70 ns (was 21 ticks) 64 ns

    [ 0.099808] GPMC CS0: page_burst_access: 0 ticks, 0 ns (was 0 ticks) 0 ns

    [ 0.099819] GPMC CS0: bus_turnaround: 0 ticks, 0 ns (was 0 ticks) 0 ns

    [ 0.099831] GPMC CS0: cycle2cycle_delay: 0 ticks, 0 ns (was 15 ticks) 0 ns

    [ 0.099842] GPMC CS0: wait_monitoring: 0 ticks, 0 ns (was 0 ticks) 0 ns

    [ 0.099853] GPMC CS0: clk_activation: 0 ticks, 0 ns (was 0 ticks) 0 ns

    [ 0.099865] GPMC CS0: wr_data_mux_bus: 0 ticks, 0 ns (was 0 ticks) 0 ns

    [ 0.099876] GPMC CS0: wr_access : 0 ticks, 0 ns (was 22 ticks) 0 ns

     

    root@am33:~# ls -l /dev/mtd*

    crw------- 1 root root 90, 0 Feb 18 13:35 /dev/mtd0

    crw------- 1 root root 90, 1 Feb 18 13:35 /dev/mtd0ro

    crw------- 1 root root 90, 2 Feb 18 13:35 /dev/mtd1

    crw------- 1 root root 90, 3 Feb 18 13:35 /dev/mtd1ro

    crw------- 1 root root 90, 4 Feb 18 13:35 /dev/mtd2

    crw------- 1 root root 90, 5 Feb 18 13:35 /dev/mtd2ro

    crw------- 1 root root 90, 6 Feb 18 13:35 /dev/mtd3

    crw------- 1 root root 90, 7 Feb 18 13:35 /dev/mtd3ro

    crw------- 1 root root 90, 8 Feb 18 13:35 /dev/mtd4

    crw------- 1 root root 90, 9 Feb 18 13:35 /dev/mtd4ro

    crw------- 1 root root 90, 10 Feb 18 13:35 /dev/mtd5

    crw------- 1 root root 90, 11 Feb 18 13:35 /dev/mtd5ro

    crw------- 1 root root 90, 12 Feb 18 13:35 /dev/mtd6

    crw------- 1 root root 90, 13 Feb 18 13:35 /dev/mtd6ro

    crw------- 1 root root 90, 14 Feb 18 13:35 /dev/mtd7

    crw------- 1 root root 90, 15 Feb 18 13:35 /dev/mtd7ro

    brw-rw---- 1 root disk 31, 0 Feb 18 13:35 /dev/mtdblock0

    brw-rw---- 1 root disk 31, 1 Feb 18 13:35 /dev/mtdblock1

    brw-rw---- 1 root disk 31, 2 Feb 18 13:35 /dev/mtdblock2

    brw-rw---- 1 root disk 31, 3 Feb 18 13:35 /dev/mtdblock3

    brw-rw---- 1 root disk 31, 4 Feb 18 13:35 /dev/mtdblock4

    brw-rw---- 1 root disk 31, 5 Feb 18 13:35 /dev/mtdblock5

    brw-rw---- 1 root disk 31, 6 Feb 18 13:35 /dev/mtdblock6

    brw-rw---- 1 root disk 31, 7 Feb 18 13:35 /dev/mtdblock7

     

    Однако, вот беда! При попытки смонтировать, выходит куча ошибок:

    [ 2691.557480] UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytess

    [ 2691.568412] [<c0010317>] (unwind_backtrace+0x1/0x8a) from [<c01eb9a1>] (ubi_io_re)

    [ 2691.577605] [<c01eb9a1>] (ubi_io_read+0x155/0x1f0) from [<c01ebce3>] (ubi_io_read)

    [ 2691.587332] [<c01ebce3>] (ubi_io_read_vid_hdr+0x4f/0x13c) from [<c01eeccd>] (scan)

    [ 2691.597345] [<c01eeccd>] (scan_peb.part.4+0x10d/0x3e4) from [<c01ef009>] (scan_al)

    [ 2691.606370] [<c01ef009>] (scan_all+0x65/0x754) from [<c01ef9b9>] (ubi_attach+0x15)

    [ 2691.614922] [<c01ef9b9>] (ubi_attach+0x15d/0x234) from [<c01e82c3>] (ubi_attach_m)

    [ 2691.624471] [<c01e82c3>] (ubi_attach_mtd_dev+0x503/0x97c) from [<c01e88e3>] (ctrl)

    [ 2691.634421] [<c01e88e3>] (ctrl_cdev_ioctl+0x7f/0x104) from [<c009e239>] (do_vfs_i)

    [ 2691.643799] [<c009e239>] (do_vfs_ioctl+0x3a9/0x3f0) from [<c009e2af>] (sys_ioctl+)

    [ 2691.652532] [<c009e2af>] (sys_ioctl+0x2f/0x44) from [<c000c401>] (ret_fast_syscal)

    [ 2691.661554] UBI: scanning is finished

    [ 2691.665405] UBI error: late_analysis: MTD device is not UBI-formatted and possiblt

    [ 2691.677391] UBI error: ubi_attach_mtd_dev: failed to attach mtd7, error -22

     

    В настройках ядра включено все, что связано с NAND и присущему ему файловыми системами.

    Может в этом проблема? Что-то лишнее включил. Что минимально следует включить в ядре, чтоб получить работающий NAND?

  19. тогда надо добится в логе ядра похожей строчки:

    [    8.314117] NAND device: Manufacturer ID: 0xec, Chip ID: 0xd3 (Samsung NAND 1GiB 3,3V 8-bit)

    разумеется с данными вашего чипа..

    найдите в исходниках ядра драйвер нанда, навтыкайте туда в функцию _probe отладочных printk - если драйвер вызывается, то по треку можно понять, где происходит сбой инициализации..

    если не вызывается, то смотрите драйвер контроллера gpmc для АРМа..

    вполне может, что у вас ошибка в описание железа в dts файле (я с этими структурами незнаком и надеюсь, что нескоро понадобится)

    ... не выходит Каменный Цветок...

    Складывается впечатление, что ядро и не начинает искать NAND.

    Не могу проследить путь вызова драйвера, связь DTB и собственно драйвера.

    В файл ./drivers/mtd/nand/nand_base.c. добавил информацию для дебага, поставил всюду printk, из всего многообразия, вызывается только функция nand_base_init(void), которая, собственно, кроме регистрации светодиода на переключение согласно NAND ничегошеньки не делает, функции инициализации NAND при запуски ядра не используются. Эти функции подсовываются макросу

    EXPORT_SYMBOL(nand_scan);
    EXPORT_SYMBOL(nand_scan_ident);

    реализацию EXPORT_SYMBOL нашел в ./include/linux/export.h , но понимания мне не добавила.

    Люди добрые, научите, как дебажить ядро?

     

  20. т.е. юбут "видит" нанд и может с ним работать?

    тогда надо добится в логе ядра похожей строчки:

    [    8.314117] NAND device: Manufacturer ID: 0xec, Chip ID: 0xd3 (Samsung NAND 1GiB 3,3V 8-bit)

    разумеется с данными вашего чипа..

    найдите в исходниках ядра драйвер нанда, навтыкайте туда в функцию _probe отладочных printk - если драйвер вызывается, то по треку можно понять, где происходит сбой инициализации..

    если не вызывается, то смотрите драйвер контроллера gpmc для АРМа..

    вполне может, что у вас ошибка в описание железа в dts файле (я с этими структурами незнаком и надеюсь, что нескоро понадобится)

    Добро. Спасибо за совет! буду ядро дебажить.