Решил докурутить загрузку с SD карточек.
Пример выдаваемый Atmel неработоспособен, вернее он вобще не собирается.
Посмотрел пример для G20 плат, чуть поправил опции проекта и выключил макрос MCI2_INTERFACE, собирается и даже работает до момента копирования файла с карточки в память, на котором уходит на перезагрузку:
Насколько хватило терпения, проследил где падает, дошел до функции "chk_mounted" ...
Пока мыслей нет, куда ему "ткнуть" чтоб он в чувства пришел, проект выкладываю здесь, может у кого какие мысли возникнут, сам проект под Keil.
Да-а, писалась эта штука без оглядки на возможные вариации упаковки в разных компиляторах ...
После того как отключил Icache, процес двинулся чуть дальше, уперлась в функции SdGetExtInformation, а имено при вызове Acmd13 или Acmd51, насколько я понял, можно и без них обойтись, продвинулся чуть дальше:
Теперь виснет в дебрях f_open, наверняка опять нестыковки с упаковкой в структурах или еще какая хрень, текущая версия лежит здесь.
ИМХО надо смотреть в сторону фатовских заголовочников от атмела.
Проблема тянется еще с G20.
Файлы записанные на карточку средствами G20 отлично читались и на G20 и на взрослых машинах. Файлы записанные со взрослой машины вообще не виделись через G20.
Вроде проблема решалась, если карту форматировать из под линуха, ну и файлы ессно заливать через линух.
код ваш не смотрел, но если строку "-I- Copy "appli.bin" from SdCard to 0x73f00000" выдает функция ДО попытки считать/открыть файл, то значит что файл просто напросто не найден.
Советую для проверки вывести в терминал средствами отладочника список файлов, которые он нашел. Что-то подсказывает что appli.bin там не будет.
три дня посвятил исследованию вопроса - ничего утешительного
проследил до строчки где происходит зависание:
файл sdmmc_mci.c подпрограмма SendCommand
не может выйти из цикла:
подумал на баг силикона из errata, но пока не могу подвести обоснование. баг фиксится в mci_hc.c, но в mci.c соответствующая п/п даже не вызывается.
#CROSS_COMPILE=arm-angstrom-linux-gnueabi- make mrproper && make at91sam9g45sd_defconfig
#make menuconfig // - чтобы поправить размер памяти - больше там ничего не нужно трогать
#CROSS_COMPILE=arm-angstrom-linux-gnueabi- make
CROSS_COMPILE у вас естественно свой будет. Образ идущий с платой не загрузится - он запакован как-то не так - видимо "постаринке" загзипен. Нужно в ядре через make uImage его сделать (утилита mkimage из uboot при этом должна быть быть доступна в переменной окружения PATH), я готовый с сайта атмел брал. Карта SD должна содержать в 1 первом разделе с фс fat/fat32 бинаник бутстрапа переименованный в BOOT.BIN - обратите внимание что если вы делаете все в linux (или виртуальной машине с linux) буквы должны быть заглавные иначе бутром его не видит и имидж ядра, по умолчанию его нужно переименовать в IMAGE.BIN - тут я не уверен нужны ли заглавные буквы, я делал заглавными.