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

T113-S3. Ламерский вопрос по работе бутлоадера.

39 minutes ago, Arlleex said:

Это еще как? То есть слинковали программу так, как будто она без загрузчика? И на что тогда надеетесь?:popcorm1:

Видимо я плохо описал ситуацию. Программа без загручика. Загрузчик -   https://github.com/szemzoa/awboot  модифицирован для загрузки бинарника из SPI NOR, содержит EGON header, залит в SPI NOR, и успешно стартует в RAM, инициализирует DDR, SPI  etc... Затем awboot анализирует содержимое SPI NOR с адреса 0х10000 на наличие там хидера уже пользовательского бинарника, не EGON а самопального, содержащего Magic Code = 0х5555AAAA, а также адрес начала и конца бинарника, а затем собствено сам бинарник, и обнаружив его, загружает бинарник в DDR. Это был изначальный подход. Я  же изменил этот подход: Заранее зная длину своего бинарника и его адрес в SPI NOR я убрал из своего бинарника самопальный хидер и залил его в чистом виде. И  соответственно изменил подход  в awboot. Теперь он просто  загружает бинарник в DDR из SPI NOR с фиксированного адреса и фиксированной длины и затем стартует его. Таким образом я освободился от проблем со смещением векторов в своем бинарнике, заливаю его в исходном, рабочем виде, в чем и убедился, выводя его дамп в уарт.  Но оно всеравно не работает.
    Сегодня попробовал подключиться на лету с помощью JLink и обнаружил,что исполнение зацикленно ходит в районе startup RTThread ..

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, nanorobot сказал:

заливаю его в исходном, рабочем виде, в чем и убедился, выводя его дамп в уарт.  Но оно всеравно не работает.

Т.е. то, что вы заливаете, если загрузить xfel с адреса 0х40000000 и запустить с него же, работает исправно? Проверяли?

Теперь, то, что загружается с флешки соответствует тому, что нужно, т.е. целостность файла и корректность считывания?

1 час назад, nanorobot сказал:

что исполнение зацикленно ходит в районе startup RTThread ..

Не знаю, что у вас там за ртос, но вполне возможно, если все вышеуказанное проверено, то возможно некорректный инит таймера или уарта, который уже был проинициализирован в буте...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 hours ago, mantech said:

Т.е. то, что вы заливаете, если загрузить xfel с адреса 0х40000000 и запустить с него же, работает исправно? Проверяли?

Теперь, то, что загружается с флешки соответствует тому, что нужно, т.е. целостность файла и корректность считывания?

Не знаю, что у вас там за ртос, но вполне возможно, если все вышеуказанное проверено, то возможно некорректный инит таймера или уарта, который уже был проинициализирован в буте...

1. Да, работает исправно, только заливаю JLink'ом.

2. Полной верификации пока не делал, делал как выше описнано, считаю что можно быть вполне уверенным, что считывание корректно. Чуть позже проверю полностью.

3. возможно.

PS. Не догоняю, как залить бинарник размером 800К с помощью xfel, ведь DDR то не инициализрована? Специальная прошивка awboot(как вариант), модифицированная таким образом, чтобы после инициализаци DDR возвращалась в режим FEL?

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так у xfel.exe есть возможность инициализировать для последующей загрузки DDR

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 hours ago, mantech said:

Т.е. то, что вы заливаете, если загрузить xfel с адреса 0х40000000 и запустить с него же, работает исправно? Проверяли?

Нет, не работает, при загрузке и старте при помощи xfel ... Только при загрузке через JLink.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, nanorobot сказал:

Нет, не работает, при загрузке и старте при помощи xfel ..

Инит ДДР перед заливкой запускаете?

Тогда чего вы ждете от загрузчика?? Добивайтесь, чтоб работала.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, mantech said:

Инит ДДР перед заливкой запускаете?

Тогда чего вы ждете от загрузчика?? Добивайтесь, чтоб работала.

да, запускаю, само собой. Спасибо GenaSPB, просветил ..
 

Если не инитить DDR получаю usb bulk send error

 

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 минут назад, nanorobot сказал:

да, запускаю, само собой.

Таким образом - 

xfel ddr t113-s3
xfel write 0x40000000 main.bin
xfel exec  0x40000000
 

main.bin - ваш бинарник

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да, именно так. Удивило, что после инита DDR на плате загорается лед подключенный к PE.2 До выполнения xfel exec  ...

 

 

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 минут назад, nanorobot сказал:

да, именно так.

По адресу 0x40000000 примерно так идет-

void __attribute__((section(".start"))) __attribute__((naked)) start(void)
{
 asm volatile (
               "b Entry         \n" //Jump to Entry (init.S)
               ".long 0x4E4F4765\n" //eGON
               ".long 0x3054422E\n" //.BT0
               ".long 0x00000000\n" //checksum for boot0 (must be calculated !!!)
               ".long 0x00008000\n" //length for boot0 (32 kB)
               ".long 0x00000000\n"
               ".long 0x00000000\n"
               ".long 0x00000000\n"
              );
}
 

 

 ".long 0x4E4F4765\n" //eGON
               ".long 0x3054422E\n" //.BT0
               ".long 0x00000000\n" //checksum for boot0 (must be calculated !!!)
               ".long 0x00008000\n" //length for boot0 (32 kB)

Это не обязательно, главное 1я строчка..

 

Entry:
         MRC     p15, 0, r0, c1, c0, 0         @ Read CP15 System Control register
         BIC     r0, r0, #(0x1 << 12)          @ Clear I bit 12 to disable I Cache
         BIC     r0, r0, #(0x1 <<  2)          @ Clear C bit  2 to disable D Cache
         BIC     r0, r0, #0x1                  @ Clear M bit  0 to disable MMU
         BIC     r0, r0, #(0x1 << 11)          @ Clear Z bit 11 to disable branch prediction
         MCR     p15, 0, r0, c1, c0, 0         @ Write value back to CP15 System Control register

         MOV     r0,#0
         MCR     p15, 0, r0, c8, c7, 0         @ I-TLB and D-TLB invalidation
         MCR     p15, 0, r0, c7, c5, 6         @ BPIALL - Invalidate entire branch predictor array

         LDR   r0, =_stack                     @ Read the stack address
         MSR   cpsr_c, #MODE_UND|I_F_BIT       @ switch to undef  mode
         MOV   sp,r0                           @ write the stack pointer
         SUB   r0, r0, #UND_STACK_SIZE         @ give stack space

         MSR   cpsr_c, #MODE_ABT|I_F_BIT       @ Change to abort mode
         MOV   sp, r0                          @ write the stack pointer
         SUB   r0,r0, #ABT_STACK_SIZE          @ give stack space

         MSR   cpsr_c, #MODE_FIQ|I_F_BIT       @ change to FIQ mode
         MOV   sp,r0                           @ write the stack pointer
         SUB   r0,r0, #FIQ_STACK_SIZE          @ give stack space

         MSR   cpsr_c, #MODE_IRQ|I_F_BIT       @ change to IRQ mode
         MOV   sp,r0                           @ write the stack pointer
         SUB   r0,r0, #IRQ_STACK_SIZE          @ give stack space

         MSR   cpsr_c, #MODE_SVC|I_F_BIT       @ change to SVC mode
         MOV   sp,r0                           @ write the stack pointer
         SUB   r0,r0, #SVC_STACK_SIZE          @ give stack space

         MSR   cpsr_c, #MODE_SYS|I_F_BIT       @ change to system mode
         MOV   sp,r0                           @ write the stack pointer

         MOV     r0, #0                        @ Invalidate and Enable Branch Prediction  
         MCR     p15, #0, r0, c7, c5, #6
         ISB
         MRC     p15, #0, r0, c1, c0, #0
         ORR     r0, r0, #0x00000800
         MCR     p15, #0, r0, c1, c0, #0

	 MRC p15, #0, r1, c1, c0, #2           @ r1 = Access Control Register
	 ORR r1, r1, #(0xf << 20)              @ enable full access for p10,11
	 MCR p15, #0, r1, c1, c0, #2           @ Access Control Register = r1
	 MOV r1, #0
	 MCR p15, #0, r1, c7, c5, #4           @flush prefetch buffer
	 MOV r0,#0x40000000
	 FMXR FPEXC, r0                        @ Set Neon/VFP Enable bit

         LDR   r10,=libc_init
         MOV   lr,pc                           @ Dummy return from start_boot
         BX    r10                             @ Branch to start_boot
         SUB   pc, pc, #0x08                   @ looping

 

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не решаюсь продолжать дальше, ибо почувствовал что не понимаю ... 

Я полагал, что eGON хидер требуется  при заливке бинарника в SPI NOR или NAND что бы BROM смог опознать наличие бинарника и считать его параметры для корректной заливки в RAM, и применяется, как правило,  при написании  вторичного загрузчика. Мы обсуждаем заливку бинарника непосредственно в DDR, зачем там егон хидер?  Все мои представления в корне неверны?

22 minutes ago, mantech said:

 

Entry:
         MRC     p15, 0, r0, c1, c0, 0         @ Read CP15 System Control register
         BIC     r0, r0, #(0x1 << 12)          @ Clear I bit 12 to disable I Cache
         BIC     r0, r0, #(0x1 <<  2)          @ Clear C bit  2 to disable D Cache
         BIC     r0, r0, #0x1                  @ Clear M bit  0 to disable MMU
         BIC     r0, r0, #(0x1 << 11)          @ Clear Z bit 11 to disable branch prediction
         MCR     p15, 0, r0, c1, c0, 0         @ Write value back to CP15 System Control register

         MOV     r0,#0
         MCR     p15, 0, r0, c8, c7, 0         @ I-TLB and D-TLB invalidation
         MCR     p15, 0, r0, c7, c5, 6         @ BPIALL - Invalidate entire branch predictor array

         LDR   r0, =_stack                     @ Read the stack address
         MSR   cpsr_c, #MODE_UND|I_F_BIT       @ switch to undef  mode
         MOV   sp,r0                           @ write the stack pointer
         SUB   r0, r0, #UND_STACK_SIZE         @ give stack space

         MSR   cpsr_c, #MODE_ABT|I_F_BIT       @ Change to abort mode
         MOV   sp, r0                          @ write the stack pointer
         SUB   r0,r0, #ABT_STACK_SIZE          @ give stack space

         MSR   cpsr_c, #MODE_FIQ|I_F_BIT       @ change to FIQ mode
         MOV   sp,r0                           @ write the stack pointer
         SUB   r0,r0, #FIQ_STACK_SIZE          @ give stack space

         MSR   cpsr_c, #MODE_IRQ|I_F_BIT       @ change to IRQ mode
         MOV   sp,r0                           @ write the stack pointer
         SUB   r0,r0, #IRQ_STACK_SIZE          @ give stack space

         MSR   cpsr_c, #MODE_SVC|I_F_BIT       @ change to SVC mode
         MOV   sp,r0                           @ write the stack pointer
         SUB   r0,r0, #SVC_STACK_SIZE          @ give stack space

         MSR   cpsr_c, #MODE_SYS|I_F_BIT       @ change to system mode
         MOV   sp,r0                           @ write the stack pointer

         MOV     r0, #0                        @ Invalidate and Enable Branch Prediction  
         MCR     p15, #0, r0, c7, c5, #6
         ISB
         MRC     p15, #0, r0, c1, c0, #0
         ORR     r0, r0, #0x00000800
         MCR     p15, #0, r0, c1, c0, #0

	 MRC p15, #0, r1, c1, c0, #2           @ r1 = Access Control Register
	 ORR r1, r1, #(0xf << 20)              @ enable full access for p10,11
	 MCR p15, #0, r1, c1, c0, #2           @ Access Control Register = r1
	 MOV r1, #0
	 MCR p15, #0, r1, c7, c5, #4           @flush prefetch buffer
	 MOV r0,#0x40000000
	 FMXR FPEXC, r0                        @ Set Neon/VFP Enable bit

         LDR   r10,=libc_init
         MOV   lr,pc                           @ Dummy return from start_boot
         BX    r10                             @ Branch to start_boot
         SUB   pc, pc, #0x08                   @ looping

 

 

это надо обдумать ..

 

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

xfel exec не требует никаких хедеров. Просто вызывает функци. по указанному в параметре адресу.
Например, если у вас какой-то header знимект первый килобайт, а за ним код - делаем так

xfel write 0x40000000 tc1_t113s3_app.alw32
xfel exec 0x40000400

 

Изменено пользователем GenaSPB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

24 минуты назад, nanorobot сказал:

зачем там егон хидер?

 

38 минут назад, mantech сказал:

Это не обязательно, главное 1я строчка..

Это ни о чем не говорит?  Просто использовал универсальный стартовый модуль...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, GenaSPB said:

xfel exec не требует никаких хедеров. Просто выхывает функци. по укаханному в параметре адресу.
Напримекр если у вас какой-то header знимект первый килобайт, а за нрим код - длаем так

xfel write 0x40000000 tc1_t113s3_app.alw32xfel exec 0x40000400

Это то понятно, спасибо. Потому выше и высказал недоумение по поводу eGON..Главное неясность текущего момента, в чем может быть разница между двумя методами запуска одного и того же бинарника, через XFEL  JLink. Ну JLink использует другой файл - ELF, который суть то же самое плюс отладочная информация ..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26 минут назад, nanorobot сказал:

Все мои представления в корне неверны?

Надо просто потренировать матчасть, вы что-то где-то услышали и решили, что все легко и просто, ИМХО.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...