|
Alwinner A13 не стартует с SD-карты, Отладочная плата A13-olinuxino |
|
|
|
Mar 30 2018, 13:15
|

Местный
  
Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126

|
Здравствуйте! Начал осваивать Allwinner A13 и пока безуспешно. Использую отладочную плату "A13-olinuxino", загрузиться хочу с SD карты (4 ГБ класс скорости 4). Компилятор arm-none-eabi , исходник программы ниже, мигает светодиодом на порте G 9 (штатный порт на отладочной плате со светодиодом): CODE #define uint32_t unsigned long int
#define CCMBase 0x01C20000 //clock module #define Def_APB0_Gating CCMBase + 0x68
//#define Def_APB0_Gating 0x01C20068
#define GPIOBase 0x01C20800 #define GPIOIncrement 0x24
#define ALLWINNER_GPIO_A GPIOBase #define ALLWINNER_GPIO_B GPIOBase + (1*GPIOIncrement) #define ALLWINNER_GPIO_C GPIOBase + (2*GPIOIncrement) #define ALLWINNER_GPIO_D GPIOBase + (3*GPIOIncrement) #define ALLWINNER_GPIO_E GPIOBase + (4*GPIOIncrement) #define ALLWINNER_GPIO_F GPIOBase + (5*GPIOIncrement) #define ALLWINNER_GPIO_G GPIOBase + (6*GPIOIncrement) #define ALLWINNER_GPIO_H GPIOBase + (7*GPIOIncrement) #define ALLWINNER_GPIO_I GPIOBase + (8*GPIOIncrement)
#define Port_CFG0 0x00 //pin direction and function 0 to 7 #define Port_CFG1 0x04 //pin direction and function 8 to 15 #define Port_CFG2 0x08 //pin direction and function 16 to 24 #define Port_CFG3 0x0C //pin direction and function 25 to 32 #define Port_DAT 0x10 #define Port_DRV0 0x14 #define Port_DRV1 0x18 #define Port_PUL0 0x1C
void main(void) { int i; int j; int foo;
uint32_t *portGConfig; uint32_t *portGData; uint32_t *APB0Gating;
//setup pointers for registers portGConfig = (uint32_t *)(ALLWINNER_GPIO_G + Port_CFG1); portGData = (uint32_t *)(ALLWINNER_GPIO_G + Port_DAT); APB0Gating = (uint32_t *)(Def_APB0_Gating);
//enable clocking for GPIO *APB0Gating |= 0x0020; //configure port G pin 9 to output *portGConfig |= 0x10; //set output to on *portGData |= 0x0200;
Loop:
foo = 0; for (j = 0; j < 100; j++) { //toggle output *portGData ^= 0x0200;
foo=j; for (i = 0; i < 30000000; i++) { if(i>10) { foo++; } } }
goto Loop;
} Файл линковщика: Код MEMORY { RAM (XRW) : ORIGIN = 0x00000000, LENGTH = 0x00004000 /* 16 KB */ }
SECTIONS { .start : { *(.start) } > RAM .text : { *(.text) } > RAM .bss : { *(.bss) } > RAM .fill : { FILL(0x00); . = ORIGIN(RAM) + LENGTH(RAM) - 1; BYTE(0x00); } > RAM /DISCARD/ : { *(.dynstr*) } /DISCARD/ : { *(.dynamic*) } /DISCARD/ : { *(.plt*) } /DISCARD/ : { *(.interp*) } /DISCARD/ : { *(.gnu*) } /DISCARD/ : { *(.note*) } } ассемблерный листинг: Код test.elf: file format elf32-littlearm
Disassembly of section .text.startup:
00000000 <main>: 0: e59f3030 ldr r3, [pc, #48]; 38 <main+0x38> 4: e5932068 ldr r2, [r3, #104]; 0x68 8: e3822020 orr r2, r2, #32 c: e5832068 str r2, [r3, #104]; 0x68 10: e59328dc ldr r2, [r3, #2268]; 0x8dc 14: e3822010 orr r2, r2, #16 18: e58328dc str r2, [r3, #2268]; 0x8dc 1c: e59328e8 ldr r2, [r3, #2280]; 0x8e8 20: e3822c02 orr r2, r2, #512; 0x200 24: e58328e8 str r2, [r3, #2280]; 0x8e8 28: e59f300c ldr r3, [pc, #12]; 3c <main+0x3c> 2c: e2533001 subs r3, r3, #1 30: 1afffffd bne 2c <main+0x2c> 34: eafffffb b 28 <main+0x28> мейк-скрипт: Код arm-none-eabi-gcc -Os -march=armv7-a -std=c99 -marm -fpic -Wall -fno-common -fno-builtin -ffreestanding -nostdinc -nostdlib -fno-strict-aliasing -mno-thumb-interwork -fno-stack-protector -fno-toplevel-reorder -Wstrict-prototypes -Wno-format-nonliteral -Wno-format-security -c test.c -o test.o
arm-none-eabi-ld -T test.lds -M -o test.elf test.o
arm-none-eabi-objdump -D test.elf > test.asm
arm-none-eabi-objcopy -O binary test.elf test.bin
mksunxiboot.exe test.bin test-sd.bin Для создания загрузочного образа использую программу с аргументами: mksunxiboot.exe test.bin test-sd.bin С помощью дискового редактора копирую весь образ на 16-й сектор карты памяти (это смещение 8кБ от начала). Карта памяти отформатирована в винде. Первые сектора - ДОСовский загрузчик-заглушка . Из ассемблерного листинга видно что программа идет с адреса 0, как требуется в A13. Хедер вроде тоже с верной контрольной суммой. Стек инитится BROM-ом (при старте) SP=0x7FF8 Вставляю карту в одладочную плату, подаю питание (внешний БП 6V 2A) - и ничего не горит. Пожалуйста, помогите разобраться, чего не хватает и что не так? Весь проект прилагаю, мейк-файлы, скрипты и утилиты там же.
src.zip ( 21.23 килобайт )
Кол-во скачиваний: 17P.S. Звонил светодиод и ножку контроллера - контакт есть, диод зажигается от тестера. Объявил переменные volatile, не помогло: CODE void main(void) { volatile int i; volatile int j; volatile int foo;
volatile uint32_t *portGConfig; volatile uint32_t *portGData; volatile uint32_t *APB0Gating;
//setup pointers for registers portGConfig = (volatile uint32_t *)(ALLWINNER_GPIO_G + Port_CFG1); portGData = (volatile uint32_t *)(ALLWINNER_GPIO_G + Port_DAT); APB0Gating = (volatile uint32_t *)(Def_APB0_Gating);
//enable clocking for GPIO *APB0Gating |= 0x0020; //configure port G pin 9 to output *portGConfig |= 0x10; //set output to on *portGData |= 0x0200;
Loop:
foo = 0; for (j = 0; j < 100; j++) { //toggle output *portGData ^= 0x0200;
foo=j; for (i = 0; i < 30000000; i++) { if(i>10) { foo++; } } }
goto Loop;
}
00000000 <main>: 0: e59f3094 ldr r3, [pc, #148]; 9c <main+0x9c> 4: e24dd010 sub sp, sp, #16 8: e5932068 ldr r2, [r3, #104]; 0x68 c: e3822020 orr r2, r2, #32 10: e5832068 str r2, [r3, #104]; 0x68 14: e59328dc ldr r2, [r3, #2268]; 0x8dc 18: e3822010 orr r2, r2, #16 1c: e58328dc str r2, [r3, #2268]; 0x8dc 20: e59328e8 ldr r2, [r3, #2280]; 0x8e8 24: e3822c02 orr r2, r2, #512; 0x200 28: e58328e8 str r2, [r3, #2280]; 0x8e8 2c: e3a02000 mov r2, #0 30: e58d200c str r2, [sp, #12] 34: e58d2008 str r2, [sp, #8] 38: e59d2008 ldr r2, [sp, #8] 3c: e3520063 cmp r2, #99; 0x63 40: cafffff9 bgt 2c <main+0x2c> 44: e59328e8 ldr r2, [r3, #2280]; 0x8e8 48: e2222c02 eor r2, r2, #512; 0x200 4c: e58328e8 str r2, [r3, #2280]; 0x8e8 50: e59d2008 ldr r2, [sp, #8] 54: e58d200c str r2, [sp, #12] 58: e3a02000 mov r2, #0 5c: e58d2004 str r2, [sp, #4] 60: e59d1004 ldr r1, [sp, #4] 64: e59f2034 ldr r2, [pc, #52]; a0 <main+0xa0> 68: e1510002 cmp r1, r2 6c: ca000007 bgt 90 <main+0x90> 70: e59d2004 ldr r2, [sp, #4] 74: e352000a cmp r2, #10 78: c59d200c ldrgt r2, [sp, #12] 7c: c2822001 addgt r2, r2, #1 80: c58d200c strgt r2, [sp, #12] 84: e59d2004 ldr r2, [sp, #4] 88: e2822001 add r2, r2, #1 8c: eafffff2 b 5c <main+0x5c> 90: e59d2008 ldr r2, [sp, #8] 94: e2822001 add r2, r2, #1 98: eaffffe5 b 34 <main+0x34> 9c: 01c20000 biceq r0, r2, r0 a0: 01c9c37f biceq ip, r9, pc, ror r3
Сообщение отредактировал IgorKossak - Mar 30 2018, 14:33
Причина редактирования: [codebox] для длинного кода. [code]-для короткого!!!
|
|
|
|
|
 |
Ответов
|
Apr 1 2018, 08:36
|

Местный
  
Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126

|
Спасибо всем кто хотел помочь и помог! Удалось запустить плату с A13 ! Было 2 ошибки. Ошибка номер 1.Начал с проверки COM-порта. Замкнул вывод 2 с выводом 3 на системном блоке компа, убедился как тут писали, что связь есть: получаю то же, что и отправляю. Значит порт исправен и WinXP дает доступ к нему. Дальше: подсоединил адаптер, запитал его от 3,3V от платы A13-Olinuxino. Выводы TX и RX адаптера соединил вместе. Вот тут и зарылась собака - в ответ летит не то, что отправляю!Запитал адаптер отдельно от 5V, протестил: обмен исправен. Понизил питание до 3V - снова пошла лажа на скорости 115200 бит/c!. Понизил скорость до 2400 бит/c - обмен при питании 3V нормальный. Сделал вывод, что тот MAX3232, что стоит в адаптере не позволяет при питании 3,3V давать обмен на 115200 бит/c. Порылся в закромах, нашёл в резерве одну MAX3232, выпаял ту что была на адаптере и впаял новую. Проверил снова обмен при 5V и при 3.3V на скорости 115200 бит/c - работает исправно! Делаю вывод о бракованной партии микросхем MAX3232, которая попала мне в адаптере. Фотка фуфела MAX3232, не работающего на 115200 бит/с при 3,3V:  Фотка нормальной микросхемы:
Ошибка номер 2.Программа дискового редактора, которую я использовал: HxD Hex-редактор от Maёl Horz, неверно делала запись на 16-й сектор карты!Позже, скачав win32-disk-imager-0-7-en-win.zip (эта не свежая версия, но идёт под WinXP, что для меня важно!) и записав образ sunxi-spl.bin из папки a13_olinuxino_hwpack, я получил наконец-то запуск программы на A13:
Действительно, для отладки используется порт UART1. Образ sunxi-spl.bin для A13 прилагаю:
sunxi_spl.zip ( 11.61 килобайт )
Кол-во скачиваний: 15ну и далее попробовал запустить Debian, тот самый, что якобы на карту с 4 ГБ влезает (на самом деле нет, олимексовцы по-мойму забыли, что 4 ГБ это не 4*1024^3 байт, а 4*1000^3  ) всё пошло:
Качал вот этот архив: A13_debian_34_90_mainline_u-boot_release_11_3.7z, с торрента - файл прикладываю:
A13_debian_34_90_mainline_u_boot_release_11_3.zip ( 25.23 килобайт )
Кол-во скачиваний: 13Естественно, перед заливкой образа, архив распаковать. Образ писал программой, что описана выше: win32-disk-imager-0-7-en-win.zipПотом всё-же решил посмотреть, где же глючит HxD и почему она пишет 16-й сектор не туда, куда надо и не видит там ничего после записи win32-disk-imager-0-7-en-win.zip. Для этого прочёл образ с карты (1% достаточно) и увидел, что сигнатура eGON.BT0 была на 145-м секторе! Делайте выводы, господа! Вот так софтина может подставить программиста! --- Шаг 3.После как разобрался в ошибках, попробовал закатать образ своей программы с мигающим светодиодом. Так как HxD - оказался на поверку говном, а win32-disk-imager не может писать образы не с начала, пришлось 0x2000 байт с самого начала SD-карты скопировать в отдельный файл. Затем бинарно клеить эти 0x2000 байт со своей программой (у которой уже есть хедер и посчитана контрольная сумма). Тоесть алгоритм такой: 1) компилируем и линкуем свою программу (при этом моделируя набросок заголовка: прыжок на main(), заполняя оставшееся место нулями) 2) вычисляем контрольную сумму в получившемся бинарнике (я использую checksumm.exe собственноручно скомпилированную из сорцов Гитхаба) 3) склеиваем 2 файла: первые 0x2000 байт со своим бинарником (я использую свой конкатенатор concat.exe) 4) полученный файл *.img катаем на SD-карту win32-disk-imager-ом. 5) вставляем карту в A13-olinuxino, включаем питание и радуемся результату!  Загрузка мгновенна, никаких кнопок Power и Home/U-boot жать не надо! Прикрепляю рабочий проект целиком - оптимизация по скорости, максимальная. Проект перелопатил из олимексовского говнокода. (+ утилита для контрольной суммы):
A13_led.zip ( 21.39 килобайт )
Кол-во скачиваний: 13Использую такие тулчейны: gcc-arm-none-eabi-6-2017-q2-update-win32.exe gcc-arm-none-eabi-4_8-2014q3-20140805-win32.exe Без разницы какой, после инсталляции важно прописать переменные окружения в операционной системе , иначе не будет работать как надо. Сорцы пишу в Блокноте (с синтаксической подсветкой типа "Bred"), для сборки батники или make-файлы. По-мойму это лучше, чем искать проприетарное тяжеловесное дерьмо, за которое мудаки требуют деньги (в контексте последних ARM-ов). И к тому же которое под WinXP идёт либо криво или вообще не пускается. Ну и вспомогательные вещи: утилита склейки concat.exe и файл первых 0x2000 байт, которые должны быть до программы. Утилита склеивает 2 файла : "0x2000.bin" и "spl.bin" в один "image.img" - его катать на карту win32-disk-imager-ом!
concat_util.zip ( 33.44 килобайт )
Кол-во скачиваний: 10Если достать нормальный дисковый редактор, то можно сразу spl.bin катать на 16-й сектор. Без всяких склеек с 0x2000.bin. Но пока такой программы не нашёл, все клянчат деньги и не дают работать на запись... --- В целом я рад - началу освоения Alwinner положено!!! Надеюсь, что то что написал, поможет начинающим разобраться и не спотыкаться на те грабли, что мне пришлось испытать. to mantech: регистры, порты ввода-вывода, переменные, менющиеся в обработчиках прерываний - должны быть объявлены как volatile, иначе компилятор оставляет за собой право выкинуть часть кода или закешировать эти переменные в регистры (особенно с максимальной оптимизацией, где не учитывается специфика работы с аппаратурой: допускается многократное присваивание в один и тот же регистр)
Сообщение отредактировал __inline__ - Apr 1 2018, 09:37
|
|
|
|
|
Apr 1 2018, 10:30
|
Знающий
   
Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050

|
Цитата(__inline__ @ Apr 1 2018, 11:36)  Спасибо всем кто хотел помочь и помог! Удалось запустить плату с A13 !  спасибо, что поделились результатами, кто-нить следующий придет, прочитает и обойдет подобные грабли.. по max3232 - у вас либо перемаркированная max232 или фейк от китайцев ближайший пост: https://www.eevblog.com/forum/reviews/fake-...tional-details/Цитата (на самом деле нет, олимексовцы по-мойму забыли, что 4 ГБ это не 4*1024^3 байт, а 4*1000^3 sm.gif ) там помимо олимексовцев, д.б. разозленные клиенты, которые заплатили деньги за плату, а "образ на карточку не лезет" напишите им фидбек - "какого хрена 'ссылка' не лезет на 4ГБ", если это их косяк, то исправят Цитата Если достать нормальный дисковый редактор, то можно сразу spl.bin катать на 16-й сектор. Без всяких склеек с 0x2000.bin. поищите winhex или какой-нить discedit, у того же олимекса были ссылки на дисковые редакторы формально, можно загрузиться с uSD в дефолтный дебьян и пилить вторую карточку через usb ридер прямо на плате, но это уж как кому удобнее..
|
|
|
|
|
Apr 1 2018, 13:43
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(Jury093 @ Apr 1 2018, 13:30)  поищите winhex или какой-нить discedit, у того же олимекса были ссылки на дисковые редакторы
формально, можно загрузиться с uSD в дефолтный дебьян и пилить вторую карточку через usb ридер прямо на плате, но это уж как кому удобнее.. Я предлагал ТСу программу cfimager от фриски. Пишет с на сд карту свой бинарь с первого сектора и ничего изобретать не нужно... Причем, что удобно, в ней нет гуя, работает с командной строки без установки драйверов или еще чего-либо. Цитата(Obam @ Apr 1 2018, 13:44)  В маркировке MAX-а смущает "+": вот не помню, это способность большого ESD (1.5кВ)? А если перемаркированная 232, то можно было бы увеличить ёмкости конденсаторов накопительных. В прочем, на фиг (; С успехом вас (: Неа, тут это не поможет, проверял. Цитата(__inline__ @ Apr 1 2018, 11:36)  Сорцы пишу в Блокноте (с синтаксической подсветкой типа "Bred"), для сборки батники или make-файлы.
По-мойму это лучше, чем искать проприетарное тяжеловесное дерьмо, за которое мудаки требуют деньги (в контексте последних ARM-ов). И к тому же которое под WinXP идёт либо криво или вообще не пускается. Т.е. ИДЕ не используете. А если ошибка в программе, как она отображается? В ИДЕ можно сразу на строчку с ошибкой кликнуть, ИМХО удобнее будет...
Сообщение отредактировал mantech - Apr 1 2018, 13:37
|
|
|
|
|
Apr 1 2018, 14:49
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(aaarrr @ Apr 1 2018, 17:12)  В консоли, естественно. Перейти на нужную строку в нужном файле можно и без ИДЕ - обычно все и так перед глазами. Не говорю, что нельзя, просто в иде удобнее, особенно, когда файлов больше сотни, а у ТСа, если он реально будет камень осваивать, будет и больше...
|
|
|
|
Сообщений в этой теме
__inline__ Alwinner A13 не стартует с SD-карты Mar 30 2018, 13:15 aaarrr Попробуйте сначала этот бинарник из-под u-boot... Mar 30 2018, 13:40 __inline__ может быть проблема в этом: Кодsudo dd if=bin/rele... Mar 30 2018, 14:24 aaarrr Цитата(__inline__ @ Mar 30 2018, 17:24) м... Mar 30 2018, 14:31  mantech Цитата(aaarrr @ Mar 30 2018, 17:31) Содер... Mar 30 2018, 20:11   Jury093 Цитата(mantech @ Mar 30 2018, 23:11) Не д... Mar 31 2018, 12:24    aaarrr Цитата(Jury093 @ Mar 31 2018, 15:24) кста... Mar 31 2018, 12:32    mantech Цитата(Jury093 @ Mar 31 2018, 15:24) стра... Mar 31 2018, 13:17     aaarrr Цитата(mantech @ Mar 31 2018, 16:17) На с... Mar 31 2018, 13:23      Jury093 Цитата(aaarrr @ Mar 31 2018, 16:23) Госп... Mar 31 2018, 13:30       aaarrr Цитата(Jury093 @ Mar 31 2018, 16:30) ну в... Mar 31 2018, 13:35      mantech Цитата(aaarrr @ Mar 31 2018, 16:23) Госп... Mar 31 2018, 14:27       aaarrr Цитата(mantech @ Mar 31 2018, 17:27) я на... Mar 31 2018, 15:26 __inline__ Ещё один момент: на отладочной плате A13-Olinuxin... Mar 30 2018, 15:03 aaarrr Allwinner'ы грузятся с нулевой SD карты при лю... Mar 30 2018, 15:08 __inline__ Цитата(aaarrr @ Mar 30 2018, 16:08) Allwi... Mar 31 2018, 05:01 __inline__ Взял spl и u-boot отсюдова: http://dl.linux-sunxi.... Mar 31 2018, 06:50 Jury093 Цитата(__inline__ @ Mar 31 2018, 09:50) С... Mar 31 2018, 08:35 __inline__ Я много вариантов перепробовал: и с мигающим диодо... Mar 31 2018, 11:06 aaarrr Цитата(__inline__ @ Mar 31 2018, 14:06) Н... Mar 31 2018, 11:59 __inline__ На счёт соединения с ком-портом, адаптер вызвонил ... Mar 31 2018, 14:09 aaarrr Цитата(__inline__ @ Mar 31 2018, 17:05) П... Mar 31 2018, 14:10 aaarrr Цитата(__inline__ @ Mar 31 2018, 17:09) Е... Mar 31 2018, 14:21  __inline__ Цитата(aaarrr @ Mar 31 2018, 15:21) volat... Mar 31 2018, 14:31 Jury093 Цитата(__inline__ @ Mar 31 2018, 17:09) С... Mar 31 2018, 15:14  mantech Цитата(Jury093 @ Mar 31 2018, 18:14) возь... Mar 31 2018, 16:32   aaarrr Цитата(mantech @ Mar 31 2018, 19:32) Кста... Mar 31 2018, 16:46    mantech Цитата(aaarrr @ Mar 31 2018, 19:46) Видим... Mar 31 2018, 17:10   Jury093 Цитата(mantech @ Mar 31 2018, 19:32) Кста... Mar 31 2018, 17:29 __inline__ В общем что это http://radiokot.ru/articles/59/
чт... Mar 31 2018, 14:14 __inline__ Вот такой адаптер (MAX3232
) Mar 31 2018, 14:24 aaarrr Цитата(__inline__ @ Mar 31 2018, 17:09) Д... Mar 31 2018, 14:29  aaarrr Цитата(Jury093 @ Apr 1 2018, 13:30) там п... Apr 1 2018, 11:08   Jury093 Цитата(aaarrr @ Apr 1 2018, 14:08) Просто... Apr 1 2018, 15:39    aaarrr Цитата(Jury093 @ Apr 1 2018, 18:39) карто... Apr 1 2018, 15:51 mantech Цитата(__inline__ @ Apr 1 2018, 11:36) Ка... Jul 23 2018, 11:55 Obam В маркировке MAX-а смущает "+": вот не п... Apr 1 2018, 10:44 __inline__ Всем спасибо за помощь!
Цитата(mantech)Я пр... Apr 1 2018, 16:22 aaarrr Цитата(__inline__ @ Apr 1 2018, 19:22) Ка... Apr 1 2018, 16:33 aaarrr Цитата(__inline__ @ Apr 1 2018, 19:22) 2)... Apr 1 2018, 17:34
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|