Jump to content

    

shamrel

Свой
  • Content Count

    159
  • Joined

  • Last visited

Everything posted by shamrel


  1. at91sam9m10 + emmc

    Хотел пройти мимо, так как с таким семейством процессоров не работал, и не очень понятна ваша конфигурация. Но захотел разобраться. В качестве первичного загрузчика, что используется (u-boot, grub)?
  2. OpenWRT сброс настроек

    Моя статья по теме: Быстро поднятое не считается упавшим. Повышаем отказоустойчивость встраиваемых систем Заодно и попиарюсь Будут вопросы, пишите.
  3. конвертор бинарного формата в ASCII

    Можно обратить внимание на стандартную библиотеку stdio.h. Функция printf вам в помощь. В зависимости от настроек компилятора, может получиться вполне приемлемый код. Нежели, нужно быстро обрабатывать, или мало свободного ОЗУ (подключение stdio откушает довольно таки много RAM), то по методу Сергея Борща.
  4. freeRTOS - не работает простая мигалка

    Могу рекомендовать Создание задач и управление ими в операционной системе реального времени FreeRTOS Там вроде под AVR и предельно просто.
  5. Приветствую! В системе есть тактовая частота Fclk = 200МГц. От этой частоты нужно тактировать АЦП, ЦАП и цепочки фильтров. Причем, частота выборки устанавливается из вне (передается параметр) и может быть любой из Fclk/N , где N -- целое число 16-битное число (включая 1). Как можно это сделать? Делитель на счетчике с загрузкой? Выход не будет синхронным с основной частотой, да и минимальный коэффициент деления 2, а нужно 1 (нет деления). Использовать перестраиваемый PLL? Сильно громоздко получается (в Altera), или может я не до конца разобрался как это сделать. Или смириться с асинхронностью схемы?
  6. Цитата(AJIEKCEu @ Jan 16 2016, 05:37) Мне кажется, без минимальной схемы - тут никуда. Я имею ввиду функциональной. Если у вас частота на АЦП неизменна(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 -- разрешение.
  7. Цитата(AJIEKCEu @ Jan 14 2016, 22:58) Я не совсем понимаю схему (недостаточно данных), но если на АЦП клок заходит с плис то делаем следующую вещь: Опорный клок-> Делитель на целое число с учетом 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 триггера. Я не знаю как это реализовать. С ПЛИС работаю недавно.
  8. Vascom, имхо, мультиплексор внесет трудно прогнозируемую задержку. Особенно, если учесть, что исходные клоки (делитель 1) и клоки, после делителя (делитель на 2 и более) имеют всяко разную задержку. Да даже в идеале фаза будет смещена на 180. Dmitriyspb, спасибо! Что-то похожее крутилось в голове, но не могло сформироваться! Собственно, делитель не кратный 2, думаю, не составит труда сделать. Главное, что б на выходе длительность разрешающего импульса была равна периоду задающего такта. Внешний PLL -- наверное хорошо, но бюджет устройства крайне ограничен. Каждую лишнюю точку пайки считают. P.S.: Dmitriyspb, отдельное вам спасибо, за то, что показали как в ASCII на диаграмме единичку рисовать, а то я все символом 'T'
  9. Рекомендую рабочий вариант с объяснениями: A serial interface is a simple way to connect an FPGA to a PC. We just need a transmitter and receiver module Правда, реализация на Verilog, но мне в свое время хорошо помог.
  10. Цитата(exe40 @ Nov 24 2014, 11:05) Походу автор - студент и ему задали написать программу считывания температуры на языке Верилог(Только причем тут лабвью, там же собственный язык), а он хочет чтобы мы сделали это за него и , желательно, бесплатно Собственно, если еще актуально, то вот пример Термометра на LabVIEW. Там же модули для работы с FTDI и исходники, правда на Си для DS18B20 под атмегу. При необходимости можно запилить и под ПЛИС.
  11. Приветствую! Собственно, в описании темы проблема озвучена. В настоящий момент развернут Toolchain для MSP, успешно подружен с Eclipse. Из командной строки работает mspdebug. Первый вопрос, как научить Eclipse дебажить код? Уважаемый мною (читал ваш блог и не только на технические темы) zhevak в одной из тем на форуме рассказал как дебажить контроллер в консольном режиме. В связи с чем вопрос, как с этим работать? Как имея программу на Си произвести ее отладку? Как узнать адреса для точек останова, выполнить пошагово код, прочитать регистры периферии? Или для этого нужно сначала дизассемблировать?
  12. Отладка MSP430 под эклипсом в linux.

    Сергей, zhevak, благодарю за советы! Удалось поднять дебаг в Эклипсе, причем дебаг по Си коду. Создал пустой файл crt0.S, доставил плагин "zylin". Отладка запустилась. Точки останова ставятся, код выполняется. Значения переменных можно отследить. Однако, для работы с регистрами периферии нужен специальный файл с описанием архитектуры в формате XML (плагин "EmbSys Registers" ), иначе, только по адресам, естественно, под мой чип такого файла не оказалось. Вся система вышла на удивление нестабильной и глючной, потому виртуалка и буду IAR осваивать. Резюме. Отлаживать MSP430 под Eclipse в Линух можно, но сложно. НЕ РЕКОМЕНДУЮ! Еще раз, всем спасибо. Тему можно считать закрытой.
  13. Отладка MSP430 под эклипсом в linux.

    В продолжение. Где взять crt0.S ? Где он должен лежать и для чего он вообще нужен? Почему в *.elf файле прописаны какие-то фантастические пути к crt0.S, типа: /home/pf/git/msp430eclipse/dk.xpg.msp430eclipse/scripts/src/gcc/libgcc/config/msp430/crt0.S Как Эклипс натравить на нужный файл?
  14. Цитата(cupertino1 @ Mar 20 2015, 11:32) Здравствуйте! Подойдут ли для работы с MSP430 датчики и сенсоры от Arduino? Спасибо. Подойдут.
  15. Доброго Здоровья! Имеется плата на AM3359 ( на основе Beagle Bone Black) с запущенным linux 3.12, в качестве файловой системы использован слегка модифицированный линукс Angstrom. На USB1 запаян FT2232H. Стоит задача включать/выключать питание USB, для перезапуска FT2232H чипа (+ кое какая перефирия питается от +5В USB.). Начальные условия: CODE# 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.. На импортных форумах рекомендуют для отключения/включения питания отбиндить, а затем заново забиндить устройство. Пытаюсь сделать это так: CODE 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?
  16. Один из способов снять напряжение с VBUS: CODE для USB1: devmem2 0x47401460 b 0x00 devmem2 0x47401460 b 0x01 для USB2: devmem2 0x47401c60 b 0x00 devmem2 0x47401c60 b 0x01 Но это же не красиво. Ну как же так?! Хочется пользоваться драйвером, и не хочется верить, что с обновлением ядра сломали удобный механизм.
  17. Цитата(Lagman @ Oct 28 2014, 17:50) [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 уже писал все что угодно, и по исходникам смотрел, что туда вообще писать можно. CODE# 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 нормально не работает.
  18. U-Boot

    Доброго Здоровья! Не стал плодить тему, тем более, что название текущей как нельзя лучше подходит к сути вопроса. Как в исходниках 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) эффекта не возымело. Как включить отладку? Можно ли включить отладку только для определенного модуля? С виду, все для этого есть, а вот руки кривоваты.
  19. Цитата(Lmx2315 @ Aug 8 2014, 11:13) ..по моему опыту LQFP с шагом 0.5 мм - я накладываю общую маску на все ножки, монтажники паяют и проверяют пайку под микроскопом. Сам я такие паял микроволной , потом смотрел под микроскопом. Проблем не было. Здравия! Для монтажа на линии обязательно между ножек должен быть полосок зеленки! Мы делаем так: ширина ножки -- 0.27мм, отступ маски от края ножки -- 0.055мм, мостик маски получается 0.1мм. Параметры выработаны монтажным цехом (SMD на линии) за много лет. Для производителей печатных плат такие зазоры относят к типовому техпроцессу. [attachment=86377:pcb.png]
  20. Правильная работа с FTDI

    В своей практике используем description. Также можно по префиксу в серийном модуле.
  21. Доброго Здоровья! Схожая проблема. Имеется SMA розетка на плату -- вход/выход приемопередатчика на СС1101 (433МГц). Корпус изделия пластиковый, разъем служит для подключения внешней антенны. Требуется защитить вход от разрядов 4 кВ. Сигнальный проводник разъема соединен с общим проводом двумя встречно-параллельно включенными диодами BAV99 (эффективно спасает от теристорного эффекта по входу CC1101). Проблема заключается в том, что корпус разъема является опорным для сигнала, и способ отвода разряда с шасси по отдельной поверхности, как это принято делать для Ethernet и USB, тут не пройдет. Как быть? Кроме того, стоит проблема накопления потенциала на плате при длительном строке эксплуатации. Устройство запитано через DCDC от трехфазной сети. Это можно решить, соединив общий провод с нейтралью через конденсатор, скажем, 10нФ (4кВ) и резистор 1-2 МОм ? Делать отдельный разъем для "чистого заземления" крайне затруднительно.
  22. Linux-3.8.13. Device Tree.

    Доброго Здоровья! Имеется устройства на основе Beaglebone Black (BBB). На плату добавлена NAND память MT29F2G08ABAEAH4. Схема включения в приложении. [attachment=83127:nand.PDF] В настоящий момент система грузиться с SD карты. Однако, хочется грузиться с NAND. Для этого считаю нужным добавить в файлы "Device Tree", описывающие платформу, информацию о NAND. При добавлении руководствовался информацией: PATCH. Philip Avinash. В результате чего,в файл am335x-bone-common.dtsi добавил: CODE am33xx_pinmux: pinmux@44e10800 { pinctrl-names = "default"; pinctrl-0 = <&nandflash_pins_s0>; ... nandflash_pins_s0: nandflash_pins_s0 { pinctrl-single,pins = < 0x0 0x30 /* gpmc_ad0.gpmc_ad0, INPUT | PULLUP | MODE0 */ 0x4 0x30 /* gpmc_ad1.gpmc_ad1, INPUT | PULLUP | MODE0 */ 0x8 0x30 /* gpmc_ad2.gpmc_ad2, INPUT | PULLUP | MODE0 */ 0xc 0x30 /* gpmc_ad3.gpmc_ad3, INPUT | PULLUP | MODE0 */ 0x10 0x30 /* gpmc_ad4.gpmc_ad4, INPUT | PULLUP | MODE0 */ 0x14 0x30 /* gpmc_ad5.gpmc_ad5, INPUT | PULLUP | MODE0 */ 0x18 0x30 /* gpmc_ad6.gpmc_ad6, INPUT | PULLUP | MODE0 */ 0x1c 0x30 /* gpmc_ad7.gpmc_ad7, INPUT | PULLUP | MODE0 */ 0x70 0x30 /* gpmc_wait0.gpmc_wait0, INPUT | PULLUP | MODE0 */ 0x74 0x37 /* gpmc_wpn.gpio0_30, INPUT | PULLUP | MODE7 */ 0x7c 0x8 /* gpmc_csn0.gpmc_csn0, PULL DISA */ 0x90 0x8 /* gpmc_advn_ale.gpmc_advn_ale, PULL DISA */ 0x94 0x8 /* gpmc_oen_ren.gpmc_oen_ren, PULL DISA */ 0x98 0x8 /* gpmc_wen.gpmc_wen, PULL DISA */ 0x9c 0x8 /* gpmc_be0n_cle.gpmc_be0n_cle, PULL DISA */ >; }; }; ocp: ocp { ... elm: elm@48080000 { status = "okay"; }; gpmc: gpmc@50000000 { status = "okay"; ranges = <0 0 0x08000000 0x10000000>; /* CS0: NAND */ /*compatible = "ti,am3352-gpms"; ?????? */ ti,hwmods = "gpms"; nand@0,0 { reg = <0 0 0>; /* CS0, offset 0 */ nand-bus-width = <8>; ti,nand-ecc-opt = "bch8"; gpmc,sync-clk = <0>; gpmc,cs-on = <0>; gpmc,cs-rd-off = <44>; gpmc,cs-wr-off = <44>; gpmc,adv-on = <6>; gpmc,adv-rd-off = <34>; gpmc,adv-wr-off = <44>; gpmc,we-off = <40>; gpmc,oe-off = <54>; gpmc,access = <64>; gpmc,rd-cycle = <82>; gpmc,wr-cycle = <82>; gpmc,wr-access = <40>; gpmc,wr-data-mux-bus = <0>; #address-cells = <1>; #size-cells = <1>; elm_id = <&elm>; /* MTD partition table */ partition@0 { label = "SPL1"; reg = <0x00000000 0x000020000>; }; partition@1 { label = "SPL2"; reg = <0x00020000 0x00020000>; }; partition@2 { label = "SPL3"; reg = <0x00040000 0x00020000>; }; partition@3 { label = "SPL4"; reg = <0x00060000 0x00020000>; }; partition@4 { label = "U-boot"; reg = <0x00080000 0x001e0000>; }; partition@5 { label = "environment"; reg = <0x00260000 0x00020000>; }; partition@6 { label = "Kernel"; reg = <0x00280000 0x00500000>; }; partition@7 { label = "File-System"; reg = <0x00780000 0x0F880000>; }; }; }; }; В файл am33xx.dtsi добавил: CODE ocp { .... gpmc: gpmc@50000000 { compatible = "ti,am3352-gpmc"; ti,hwmods = "gpmc"; /*reg = <0x50000000 0x01000000>;*/ reg = <0x50000000 0x2000>; interrupts = <100>; gpmc,num-cs = <7>; gpmc,num-cs = <8>; gpmc,num-waitpins = <2>; #address-cells = <2>; #size-cells = <1>; status = "disabled"; }; elm: elm@48080000 { reg = <0x48080000 0x2000>; interrupts = <4>; /*compatible = "ti,am3352-elm";*/ ti,hwmods = "elm"; status = "disabled"; }; } Также в этом файле пришлось отключить(закоментировал) mmc2 и mmc3. Иначе при попытке смуксить пины на NAND ядро паниковало. В настройках ядра включено все, что связано с NAND и присущему ему файловыми системами. В системе появилось устройство /dev/ubi_ctrl, однако при попытки приатачить его получаю ошибку: root@am33:~# ubiattach /dev/ubi_ctrl -m 2 ubiattach: error!: cannot attach mtd2 error 19 (No such device) У кого есть соответствующий опыт, помогите. Как включить NAND? P.S.: Уважаемые модераторы, может быть имеет смысл слить с темой "DS1338. AM33xx. Linux-3.8.13. Device Tree." ?
  23. Linux-3.8.13. Device Tree.

    Спасибо, 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 содержит: CODE # # 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: CODE #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: Причина редактирования: добавил конфигурацию.
  24. Linux-3.8.13. Device Tree.

    Здоровья всем! Проследил по исходникам путь от считывания 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 Цитата(shamrel @ Feb 12 2014, 07:53) В настройках ядра включено все, что связано с NAND и присущему ему файловыми системами. Может в этом проблема? Что-то лишнее включил. Что минимально следует включить в ядре, чтоб получить работающий NAND?
  25. Linux-3.8.13. Device Tree.

    Цитата(Jury093 @ Feb 13 2014, 12:54) тогда надо добится в логе ядра похожей строчки: Код[    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 , но понимания мне не добавила. Люди добрые, научите, как дебажить ядро?