nanorobot 3 9 января, 2021 Опубликовано 9 января, 2021 (изменено) · Жалоба Соседний топик разросся и всем надоел. Попытаюсь задать теме новый старт. UBoot с поодержкой ethernet собрать так и не удалось. Помощь уважаемого aaarrr не спасла. Попробовал из текущего uboot два приложнения(свое, и чужое - xboot) запустить с sdcard. С адреса 0x400000000. В обоих случаях результат отрицательный. Свое приложение HelloWord я готов считать насквозь косячным. Но...Приложение xboot при запуске посредством утилиты sunxi-fel с того же адреса 0x40000000 таки работало.. UBoot стандартный, без моих допиливаний. XBoot загружал и запускал следующим образом: load mmc 0:1 0x40000000 xboot.bin go 0x40000000 Изменено 9 января, 2021 пользователем nanorobot Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 9 января, 2021 Опубликовано 9 января, 2021 (изменено) · Жалоба 8 минут назад, nanorobot сказал: запустить с sdcard. С адреса 0x400000000. В обоих случаях результат отрицательный. Свое приложение HelloWord я готов считать насквозь косячным. Ваша прога через усб (sunxi-fel) запустилась? Условие, что не должно превышать 32кбайта. В курсе, что для прямого запуска (усб, сдкарта), должен быть заголовок с контрольной суммой? 13 минут назад, nanorobot сказал: Свое приложение HelloWord я готов считать насквозь косячным. Какая в нем есть инициализация и чего? Я начинал освоение подобных процов с простого мигания диодом на ножке порта, т.к. понятия не имел об инициализации более сложной периферии, прерываний и пр... Изменено 9 января, 2021 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 3 9 января, 2021 Опубликовано 9 января, 2021 (изменено) · Жалоба 14 minutes ago, mantech said: Ваша прога через усб (sunxi-fel) запустилась? Условие, что не должно превышать 32кбайта. В курсе, что для прямого запуска (усб, сдкарта), должен быть заголовок с контрольной суммой? мое приложение > 32k. про заголовок с CRC не в курсе.. запуск через усб (sunxi-fel) заголовка не требует? где прочитать про заголовки с CRC и способы их генерации? upd: разглядел что при запуске через USB заголовок тоже нужен. тем страннее неработа при запуске с SD через UBOOT Изменено 9 января, 2021 пользователем nanorobot Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 9 января, 2021 Опубликовано 9 января, 2021 · Жалоба 1 минуту назад, nanorobot сказал: мое приложение > 32k. Что вы там такого наворотили, что >32кб? У меня в этот объем вошла инициализация портов, уарта, ДДР, сд карты и еще мелочи. Начинайте с чего-нить попроще, как написал выше. 4 минуты назад, nanorobot сказал: где прочитать про заголовки с CRC и способы их генерации? Посмотрите на linux-sunxi подобных ресурсах. Вот пример простой программы с заголовком: #define u32 unsigned long int #define CCMBase 0x01C20000 /* Clock Module */ #define GPIOBase 0x01C20800 /* GPIO */ #define GPIOIncrement 0x24 #define GPIO_A (GPIOBase+(0*GPIOIncrement)) #define GPIO_B (GPIOBase+(1*GPIOIncrement)) #define GPIO_C (GPIOBase+(2*GPIOIncrement)) #define GPIO_D (GPIOBase+(3*GPIOIncrement)) #define GPIO_E (GPIOBase+(4*GPIOIncrement)) #define GPIO_F (GPIOBase+(5*GPIOIncrement)) #define GPIO_G (GPIOBase+(6*GPIOIncrement)) #define GPIO_H (GPIOBase+(7*GPIOIncrement)) #define 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 #define APB0_Gating *(volatile u32*)(CCMBase+0x68 ) #define PortG_Config *(volatile u32*)(GPIO_G +Port_CFG1) #define PortG_Data *(volatile u32*)(GPIO_G +Port_DAT ) void delay_ms(u32 ms) { register u32 loops=ms*500; __asm__ __volatile__ ("1:\n" "subs %0, %1, #1\n" "bne 1b":"=r" (loops):"0"(loops)); } void __attribute__((section(".start"))) __attribute__((naked)) start(void) { __asm__ __volatile__ ("b main \n" //Jump to main() ".long 0x4E4F4765\n" //eGON ".long 0x3054422E\n" //.BT0 ".long 0x00000000\n" //checksum for boot0 (must be calculated !!!) ".long 0x00000400\n" //length for boot0 (1 kB) ".long 0x00000000\n" ".long 0x00000000\n" ".long 0x00000000\n"); } void main(void) { APB0_Gating|=0x0020; //enable clocking for GPIO PortG_Config|=0x10; //configure port G pin 9 to output Loop: PortG_Data^=0x0200; //toggle output to on/off delay_ms(1000); //delay 1s goto Loop; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 3 9 января, 2021 Опубликовано 9 января, 2021 (изменено) · Жалоба 4 minutes ago, mantech said: Что вы там такого наворотили, что >32кб? У меня в этот объем вошла инициализация портов, уарта, ДДР, сд карты и еще мелочи. Начинайте с чего-нить попроще, как написал выше. сделано под RT-THREAD и не убирались неиспользуемые драйвера и сервисы. Видимо отсюда и весь объем.. само приложение простейшее, мигание лед и вывод в уарт хелловорд Изменено 9 января, 2021 пользователем nanorobot Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 9 января, 2021 Опубликовано 9 января, 2021 · Жалоба 1 минуту назад, nanorobot сказал: само приложение простейшее, мигание лед и вывод в уарт хелловорд Простейшее то, что привел выше, занимает пару килобайт. Инит уарта там не простой, требует еще инита прерываний, в курсе? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 3 9 января, 2021 Опубликовано 9 января, 2021 · Жалоба 6 minutes ago, mantech said: Что вы там такого наворотили, что >32кб? У меня в этот объем вошла инициализация портов, уарта, ДДР, сд карты и еще мелочи. Начинайте с чего-нить попроще, как написал выше. Посмотрите на linux-sunxi подобных ресурсах. Вот пример простой программы с заголовком: #define u32 unsigned long int #define CCMBase 0x01C20000 /* Clock Module */ #define GPIOBase 0x01C20800 /* GPIO */ #define GPIOIncrement 0x24 #define GPIO_A (GPIOBase+(0*GPIOIncrement)) #define GPIO_B (GPIOBase+(1*GPIOIncrement)) #define GPIO_C (GPIOBase+(2*GPIOIncrement)) #define GPIO_D (GPIOBase+(3*GPIOIncrement)) #define GPIO_E (GPIOBase+(4*GPIOIncrement)) #define GPIO_F (GPIOBase+(5*GPIOIncrement)) #define GPIO_G (GPIOBase+(6*GPIOIncrement)) #define GPIO_H (GPIOBase+(7*GPIOIncrement)) #define 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 #define APB0_Gating *(volatile u32*)(CCMBase+0x68 ) #define PortG_Config *(volatile u32*)(GPIO_G +Port_CFG1) #define PortG_Data *(volatile u32*)(GPIO_G +Port_DAT ) void delay_ms(u32 ms) { register u32 loops=ms*500; __asm__ __volatile__ ("1:\n" "subs %0, %1, #1\n" "bne 1b":"=r" (loops):"0"(loops)); } void __attribute__((section(".start"))) __attribute__((naked)) start(void) { __asm__ __volatile__ ("b main \n" //Jump to main() ".long 0x4E4F4765\n" //eGON ".long 0x3054422E\n" //.BT0 ".long 0x00000000\n" //checksum for boot0 (must be calculated !!!) ".long 0x00000400\n" //length for boot0 (1 kB) ".long 0x00000000\n" ".long 0x00000000\n" ".long 0x00000000\n"); } void main(void) { APB0_Gating|=0x0020; //enable clocking for GPIO PortG_Config|=0x10; //configure port G pin 9 to output Loop: PortG_Data^=0x0200; //toggle output to on/off delay_ms(1000); //delay 1s goto Loop; } весьма признателен, буду изучать 1 minute ago, mantech said: Простейшее то, что привел выше, занимает пару килобайт. Инит уарта там не простой, требует еще инита прерываний, в курсе? полагал, что инит уарта входит в инит RT-Thread. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 9 января, 2021 Опубликовано 9 января, 2021 (изменено) · Жалоба 5 минут назад, nanorobot сказал: полагал, что инит уарта входит в инит RT-Thread. Совсем не факт. Начинать нужно с самого простого, по своему опыту, любой неправильный инит приводил к зависанию... 5 минут назад, nanorobot сказал: весьма признателен, буду изучать Это было для А13го, поэтому посмотрите правильность адресов gpio, заголовок такой же. Контрольную сумму считал так: checksum.exe led.bin spl.bin led.bin - источник spl.bin-результат checksum.exe Изменено 9 января, 2021 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 9 января, 2021 Опубликовано 9 января, 2021 · Жалоба 4 hours ago, nanorobot said: UBoot с поодержкой ethernet собрать так и не удалось. Помощь уважаемого aaarrr не спасла. Рецепт был актуален для u-boot 2018.01, теперь все немного изменилось. Для свежего: 1. Патч 0001-Allwinner-V3s-EMAC-support.patch 2. Результат сборки u-boot-sunxi-with-spl.bin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 3 12 января, 2021 Опубликовано 12 января, 2021 (изменено) · Жалоба Первый шаг сделан. Светодиодиками помигал(бинарник 300 с чем то байт). Многое стало яснее... Но есть и неожиданности. Мигающее приложение загружаю/запускаю в RAM c адреса 0х4000 используя утилиту sunxi-fel. Утлиту для вычисления контрольной суммы заголовка написал сам(уважаемый mantech предложил мне свою, но она под винду, а у меня линукс). Точнее допилил пример с гитхаба который по факту не работал, все время выдавал КС = 0. Эксперимента ради загрузил без вычисления КС, тоже загружается и работает... Возможно я не до конца понял про заголовок и КС - в каком случае они нужны.. Возвращаясь к XBOOT. Использую его в единственном качестве - из него можно загрузить SPL, который инициализирует DDR память и дает возможность используя ту же самую утилиту sunxi-fel загрузить в эту память приложение не ограниченное размером 32к и запустить его. Вероятно есть более прямые пути для этого, но пока мне о них неизвестно(наверное это UBOOT с SPL), и мне удобно использовать этот. При этом не нужен ни UBOOT ни что либо еще. Отдаю себе отчет в том, что эта технология применима только на этапе отладки - ну этот этап еще надолго.. Изменено 12 января, 2021 пользователем nanorobot Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 12 января, 2021 Опубликовано 12 января, 2021 · Жалоба 10 минут назад, nanorobot сказал: Вероятно есть более прямые пути для этого, но пока мне о них неизвестно Прямой путь здесь только один, грузим программу инита ДДР, и нужного загрузочного устр-ва, затем грузим основной загрузчик, уже в ДДР, и делаем все, что пожелается, можно дальше грузить что-то, а можно уже и саму целевую программу. Все-равно придется в 2 этапа грузиться, т.к. AW не позаботился о хотябы 128кило статической памяти для полнофункционального загрузчика, и не сделал предварительной конфигурации памяти, как это сделали в IMX чипах... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 3 12 января, 2021 Опубликовано 12 января, 2021 (изменено) · Жалоба 9 minutes ago, mantech said: Прямой путь здесь только один, грузим программу инита ДДР, и нужного загрузочного устр-ва, затем грузим основной загрузчик, уже в ДДР, и делаем все, что пожелается, можно дальше грузить что-то, а можно уже и саму целевую программу. Все-равно придется в 2 этапа грузиться, т.к. AW не позаботился о хотябы 128кило статической памяти для полнофункционального загрузчика, и не сделал предварительной конфигурации памяти, как это сделали в IMX чипах... Собственно именно так, или почти так, у меня сейчас и происходит. Программа инита ДДР и загрузки XBOOT. Полагаю, что есть возможность оба этапа совместить в своем приложении, но это высший пилотаж, котрый мне (пока) не по плечу. Изменено 12 января, 2021 пользователем nanorobot Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 12 января, 2021 Опубликовано 12 января, 2021 (изменено) · Жалоба 2 минуты назад, nanorobot сказал: но это высший пилотаж, котрый мне (пока) не по плечу. Это нормально. Сначала разберитесь до конца с портами, потом инит уарта и контроллера прерываний, а там уже можно и за ДДР браться, благо есть исходники... Изменено 12 января, 2021 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 3 24 января, 2021 Опубликовано 24 января, 2021 (изменено) · Жалоба Разбираюсь с DMA. Копаю исходники проекта rpidmx512. Регулярно встречаю макросы содержащие 'COHERENT_REGION ' и указывающие на область памяти начинающейся с адреса H3_MEM_DRAM_START + 0x400000. Эта область памяти чем то уникальна? В V3S тоже есть аналогичная? Доступные даташиты для v3s и h4 слова coherent не знают.. Изменено 24 января, 2021 пользователем nanorobot Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_3m 4 25 января, 2021 Опубликовано 25 января, 2021 · Жалоба 17 часов назад, nanorobot сказал: Разбираюсь с DMA. Копаю исходники проекта rpidmx512. Регулярно встречаю макросы содержащие 'COHERENT_REGION ' и указывающие на область памяти начинающейся с адреса H3_MEM_DRAM_START + 0x400000. Эта область памяти чем то уникальна? В V3S тоже есть аналогичная? Доступные даташиты для v3s и h4 слова coherent не знают.. Это скорее всего зависит от настроек MMU. По идее COHERENT_REGION должна быть некэшируемой чтобы процессор видел операции DMA без инвалидации кэша. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться