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

Denchik

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

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

  • Посещение

Репутация

0 Обычный
  1. Однако. У меня этот define и так прописан, но это не помогает :-(. Какая у вас версия U-boot, и откуда брали?
  2. 1. U-boot тот же? Ничего не меняли? (кроме частоты кварца и откл. EMAC и Flash) 2. Параметры для ais выставляете правильные? ПС: Постом выше описывал свою проблему. Оказалось фиговая земля на общем выводе кондеров кварца (высокое (~20 Ом) сопротивление между выводом и общей "землей").
  3. Что-то тема заглохла. Образовалась новая проблема: Имею две платы. Одна работает нормально. Другая не хочет. Симптомы следующие: Не стартует PLL. Причем проявляется это при загрузке ais (в котором конфигурируется PLL). После отправки команды конфигурирования PLL от процессора ответы не приходят. Если в ais не конфигурировать PLL (т.е. работать на штатных 24МГц) все загружается и переданая прошивка работает. Если конфигурировать PLL не в ais, а моей программе, то зависание происходит сразу после подачи команды на переход из режима bypass в режим PLL. Причем процессор именно зависает. Дальнейший код не выполняется. Ощущение, что PLL не работает вообще! Что проверял: кварц генерирует 24МГц как положено. последовательность подачи питания и сброса в норме (хотя между подачей 1.2В и 3.3В проходит около 1мс). уровни питания в норме. на питании PLL стоят ферриты. микросхема PHY вроде в норме (тут в начале темы был такой трабл). Уже голову сломал. Не очень хочется выпаивать обвязку процессора. Может у кого похожее было?
  4. 1 - AisGen делает совершенно другое. Тут мой косяк. Надо было назвать не myais (так как ais тут не причем), а например magicnand. Ais - это набор команд для внутреннего загрузчика (RBL) для инициализации периферии, PLL. Дальше используется вторичный загрузчик (UBL). И вот для него и необходимо выполнить подготовку u-boot.bin для загрузки из nand. Уже не помню где, но видел (или пришел к такому выводу) настоятельные рекомендации TI для загрузки из nand использовать UBL. 2 - Нет это не баг. Действительно так и должно быть. Для успешной загрузки из NAND хоть чего нибудь (записаного при промощи u-boot) обязательно необходимо изменить алгоритм расчета ECC в u-boot и kernel!!! Иначе RBL просто будет считать, что вычитывает битый образ. Nand из которой грузитесь должна быть подключена на CS3! Еще у вас другая NAND, а значит другие размеры страницы и блока. ------------------------------------------------------------------------------------------------------------ Еше раз, так как чудес не бывает. Я использую промежуточный загрузчик UBL, так как это работает. Возможно есть другие варианты, но нет времени их искать. Далее попробую обьяснить другими словами: 1) немного терминологии u-boot.elf - при компиляции u-boot получаются несколько файлов и один из них "u-boot" (без расширения). u-boot.bin - при компиляции u-boot получаются несколько файлов и один из них "u-boot.bin" (так сказать бинарник). u-boot.ais - файл сгенерированный AisGen из u-boot.elf для загрузки по UART. u-boot.magic - файл после обработки u-boot.bin при помощи myais (не призываю слепо использовать, важен сам алгоритм). ubl.elf - файл "ubl" полученный в результате компиляции проекта UBL в CodeComposerStudio ubl.ais - файл сгенерированный AisGen из ubl.elf. Предположим, что у Вас рабочий u-boot.ais (с исправленным алгоритмом ECC), который вы можете загружать через UART и работать с nand (включена поддержка nand в u-boot). Делаем следующее (команды и адреса относительно моего железа - RAM 64MB, FLASH 128MB Micron pagesize 2048): - правим UBL под себя (настройки NAND, UART, дебагерный вывод и т.д.) + изменения которые приводил раньше. - собираем UBL и полученный файл обрабатываем AisGen. - генерируем файл u-boot.magic. - загружаем по UART u-boot.ais. - по tftp (опять же на моем примере) подтягиваем ubl.ais. tftp 0xc0700000 ubl.ais - стираем nand блок 1 (целиком) и записываем в него ubl.ais. nand erase 0x20000 0x20000 nand write 0xc0700000 0x20000 0x20000 - теперь подтягиваем u-boot.magic и кладем его в блок 2 (т.к. размер файла больше 128К то потребуется 2 блока) tftp 0xc0700000 u-boot.magic nand erase 0x40000 0x40000 nand write 0xc0700000 0x40000 0x40000 - вот теперь если все правильно то при установке загрузки из nand все должно работать. Давайте еще раз по шагам загрузки: 1 - При включении питания запускается внутренний загрузчик (RBL), который согласно пинам определяет откуда грузится (NAND, UART ...). В нашем случае с Nand, которая висит на CS3 (обязательно!!!). Блок 0 в NAND загрузчик не смотрит (там обычно лежат переменные u-boot). А смотрит блок 1. В нем лежит вторичный загрузчик (UBL), который (ВНИМАНИЕ) обработан AisGen. Если в AisGen были правильно установлены настройки, то в UBL инициализации вообще можно не делать. 2 - Итак RBL вычитал из NAND UBL (обычно во внутреннюю RAM) и передает ему (UBL) управление. Все что будет дальше ais не требует вообще! 3 - Для того, чтобы UBL смог вычитать из nand образ u-boot.bin этот самый u-boot должен лежать в определенном месте и определеным образом. Это расписано в исходниках UBL (в том числе и как я раньше писал). Еще раз хочу обратить внимание на то, что тут мы должны оперировать НЕ ELF файлом u-boot, а именно u-boot.bin, полученным при компиляции u-boot. А вообще попробуйте сначала запустить из NAND загрузчик UBL. Когда получиться дальше будет легче.
  5. Если еще актуально. По науке используют HDLC.
  6. Прошивка NAND и загрузка с нее (для потомков так сказать): 1) Подготовка u-boot: a - настройка, редактирование под себя и т.д. б - компиляция (использую CodeSoucery Lite 2007q3 - как показала жизнь наименее косячный toolchain) в - обрабатываем u-boot (имя файла получившегося при компиляции, второй файл - "u-boot.bin" понадобиться дальше) при помощи AisGen для OMAP-L137 (v.0.7.0.0) для загрузки по UART г - собственно тестируем u-boot. при необходимости повторяем а - г. Когда u-boot устраивает и необходимо грузиться из NAND переходим к шагу 2: 2) Загрузка с NAND 2.1) Подготовим загрузчик UBL (использую armubl-03.20.00.14 из соответствующего PSP): а - скачиваем и устанавливаем CodeComposerStudio 3.3 (можно и другую версию, но эта меньше весит :-) и проще). В качестве цели указываем TMS470R2x. (Если CCS будет ругаться - просто игнорируем) б - распаковываем armubl в - в CCS открываем проект armubl (для omap-l1x7) и в настройках Build Options указываем UBL_NAND и DEVICE UART0_FOR_DEBUG (номер UART естественно свой). В конфигурации проекта указываете BOOT_NAND. г - теперь поправим исходники: (указываю файл/функция) device.c/DEVICE_SDRAM_init - указываете свои настройки памяти SDRAM device.h - в определение типа структуры _DEVICE_UART_REGS_ дописываете: VUint32 MDR; device.c/DEVICE_UARTInit - в каждой настройке UART указываете (после UARTx->LCR |= 0x3;) UARTx->MDR &= 0; device.c/DEVICE_init - можно убрать инициализацию лишней периферии (например чипа питателя и т.д.) nandboot.c/NANDBOOT_copy - строки: // If the application is already in binary format, then our // received buffer can point to the specified load address // instead of the temp location used for storing an S-record // Checking for the UBL_MAGIC_DMA guarantees correct usage with the // Spectrum Digital CCS flashing tool, flashwriter_nand.out if ((magicNum == UBL_MAGIC_BIN_IMG) || (magicNum == UBL_MAGIC_DMA)) { // Set the copy location to final run location rxBuf = (Uint8 *)gNandBoot.ldAddress; } заменить на: rxBuf = (Uint8 *)gNandBoot.ldAddress; д - собираем проект е - полученный ubl-nand.out обрабатываем AisGen. Загрузчик UBL готов. 2.2 Подготовим u-boot.bin (обращаю внимание - именно бинарник!) для заливки в NAND а - для того чтобы UBL правильно считал u-boot из NAND необходимо следующее: в NAND UBL должен лежать начиная со страницы 0 блока 1, а вот с u-boot не так просто. UBL ищет u-boot (кстати, это не обязательно должен быть u-boot) начиная со страницы 0 блока 2. Причем данные там должны лежать следующие: блок 2 страница 0 00 - 0x55424С00 - magic number 04 - 0хс1080000 - точка входа entrypoint 08 - кол-во строк необходимы для хранения u-boot.bin (<размер файла>/<кол-во байт в странице вашей NAND> + 1 для выравнивания) 0C - номер блока где начинается u-boot.bin (в общем случае это 2) 10 - номер страницы с которой начинается u-boot.bin (в общем случае 1) 14 - 0xc1080000 - адрес куда UBL будет писать считанные из NAND данные ... - остальное до конца страницы не имеет значения. блок 2 страница 1 собственно u-boot.bin б - для того чтобы правильно и аккуратно это все легло в NAND лучше сделать все одним файлом . Теперь мы записываем NAND (на примере мой платы) UBL кладем nand write 0xc0700000 0x20000 0x20000 - занимаем весь блок 1 u-boot.bin (тот самый файл с волшебной структурой) - nand write 0xc0700000 0x40000 0x40000 выключаем питание переходим на загрузку из nand и имеем счастье. myais.zip
  7. Спасибо. С UART разобрался :-). А Вы используете именно такую последовательность? И работает? В процессе поиска подправил ubl из комплекта 03.20.00.14. Затем компилирую его с параметром USE_NAND. Полученный на выходе .out обрабатываю AisGen. А вот тут внимание: настройки те же что и для u-boot для загрузки по UART (изменение режима не влияет). Затем загружаю u-boot по UART и с его помощью заливаю полученный ubl в NAND по адресу 0х20000. Устанавливаю загрузку из NAND и ubl успешно загружается! Но u-boot (предварительно положенный следом за ubl) не подтягивает, так как не видит некоего MAGIC WORD (упоминается в Вашей первой ссылке). Основное отличие ubl от uboot - ubl грузится во внутренюю ОЗУ (80000000) а u-boot во внешнюю (с1080000).
  8. Что еще любопытно, когда запускал плату были проблемы с загрузкой по UART (у меня используется UART0). Если включить настройку LPCS, вообще не грузится. Отсюда сделал вывод, что модули UART по умолчанию включены. Возможно, что начальный загрузчик после определения источника загрузки выключает остальную периферию? То PavelG: Если я правильно понимаю, то адрес куда кладется u-boot определяется геометрией самой флеш. У меня каждый блок это 64 страницы по 2048 байт каждая, таким образом адрес должен быть 64*2048=131072= 0х20000.
  9. Поправил таблицу как описано в http://processors.wiki.ti.com/index.php/DM...Nand_ECC_layout. Стал запускаться такт на SDRAM. Но UART вообще ничего не передает в линию. Все же интересно было бы глянуть Ваш ini.
  10. Спасибо за информацию. Однако прискорбно. Обнаружил еще один момент: 1) загрузка u-boot - обнаруживает отсутствие таблицы bad block и создает ее. 2) если перезагрузится из того же u-boot, то при следующей загрузке таблицы находятся. Но если загрузить ядро, то оно типа тоже определяет отсутствие таблицы (хотя u-boot как бы ее создал) и создает ее, а при перезагрузке уже u-boot не видит таблицу созданую ядром. Чувствую косяк в настройках, но u-boot или kernel?
  11. Нет. ядро и файловая подтягиваются u-bootом по сети с tftp сервера. Тут проблем нет. ПС: Если не стартует u-boot, то смысл писать во флешку ядро?
  12. PavelG таже проблема. Если гружу по UART все ок, все работает. NAND пишется/читается нормально как из под u-boot, так и в linux. Согласно документации NAND висит на CS3. Пины установлены для загрузки из NAND и при старте корректно считываются (JTAG у меня нет поэтому контролировал наличие обращение к NAND по CS3). Осциллографом контролирую тактовый сигнал на SDRAM и собственно он так и не появляется. А теперь по порядку: 1) подготовка файла u-boot. Согласно документации возможна загрузка сразу u-boot без использования UBL. Для этого необходимо обработать бинарный файл U-boot при помощи утилиты AisGen. Причем, если испльзуется оконный AisGen, то берется u-boot (файл без расширения, находится в директории куда собирался u-boot) к нему нужно добавить расширение .out. Можно использовать и u-boot.bin, но только с HexAIS и указанием адреса входа. Делал: HexAis-OMAP-L137.exe -i <файл .ini> -o u-boot.ais -entrypiont 0xc1080000 u-boot.bin@0xc1080000 Редактировал файл ini... Прчем в ini режим загрузки всегда NONE. Включал/отключал настройки переферии. Ничего не помогает. 2) Загружаю по UART рабочий образ u-boot. Далее по tftp скачиваю образ для nand и записываю его. #tftp 0xc0700000 u-boot-nand.bin #nand erase #nand write 0xc0700000 0x20000 0x40000 То, что nand пишется - проверено. 3) Выключаю питание 4) Устанавливаю перемычки для загрузки из nand 5) Включаю питание 6) Активность на CS3 есть (по документации должен считываться блок), тактовой на SDRAM нет, UART молчит как рыба об лед. Что не так? - NAND из поддерживаемых. Код по таблице 0xF1 (Micron 128MiB 2048 на страницу, 64 страницы на блок). Может адрес 0х20000 (куда кладу образ) не верен? - Мне кажется, что застревает где-то на обработке сценария Ais загрузчиком RBL. - Делал парсинг образа (aisparse.exe) все - вроде нормально. Уже идеи кончились.
×
×
  • Создать...