проблема с детектом SD карты устранена, и она, как выяснилось, вообще не связана ни с SDRAM , ни с бутстрапом.
дело было в выпавшей пластинке (см. ниже).
непонятно как это произошло.
в общем загрузиться удалось (из DDR), но память SDRAM нормально работать не хочет.
1. как я понял, SDR мапится на адрес 20 млн (0x20000000).
из юбута пробую писать и читать оттуда.
то ли пишет то ли читает неправильно:
пытаемся записать aabbccdd, а в результате видим aa9bcc9d:
2. запаяли то, что было заложено в схеме производителя на плату SK-AT91SAM9G45, а именно:
чип MT48LC16M16A2P-7E IT:D
3. В коментах бутстрапа в инициализации SDR памяти встречается комент:
//Configure DDR_MICRON_MT47H64M8.
Из этого становится непонятно, под какую SDRAM вообще этот бутстрап собран. То что названо в коментах - это вообще DDR, а не SDR.
наконец-то удалось запустить плату без DDR, под чистым SDRAM.
завтра будем морозить плату в камере. посмотрим сможет ли теперь она продержаться до -30С.
ниже прилагаю мини отчет о том как запустить плату на голом SDRAM (без DDR). при этом доступной RAM памяти получается всего 22 метра из 32 установленных, но это можно исправить если сдвинуть разбивку памяти (bootstrap/uboot/kernel) более плотно.
1. сначала правим бутстрап, соотв. ветка тут: http://www.starterkit.ru/html/index.php?name=forum&op=view&id=15303
в свойствах кейловского проекта в закладке C/C++, Define:
- оставляем DESTINATION_sdram
- убираем DESTINATION_ddram
- ставим DEST_ADDR=0x21F00000
(т.к. SDRAM у нас идет с адреса 0x20000000).
buletz спасибо за наводку. Долго не мог сообразить где править данный адрес в u-boot.
TEXT_BASE = 0x21f00000
Также дополнительно правили
#define PHYS_SDRAM 0x20000000
#define PHYS_SDRAM_SIZE 0x02000000
Ну и если надо базовый адрес LCD.
А данный дефайн CONFIG_SYS_LOAD_ADDR
значения не имеет, ибо при загрузке адреса всё равно беруться из переменных типа nand_boot и т.д.