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

Зачем там i+=8 ? Ну i+=4 я бы еще как то понял, т.к. запись далее идет по 32 бита.

Но сектор же стирается целиком ? Зачем вызывать процедуру стирания sectorlen/8 раз ?

Вы, похоже, не читали код и комментарии в нём. Там сказано, что эта функция стирает все секторы. То есть цикл перебирает эти секторы. Если посмотрите, что такое FLASH_Sector_0, FLASH_Sector_1 и т.д., то увидите, что это арифметическая прогрессия с разностью 8. Так что всё сходится.

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


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

Вы, похоже, не читали код и комментарии в нём. Там сказано, что эта функция стирает все секторы. То есть цикл перебирает эти секторы. Если посмотрите, что такое FLASH_Sector_0, FLASH_Sector_1 и т.д., то увидите, что это арифметическая прогрессия с разностью 8. Так что всё сходится.

 

 

Пардон, вопрос снят, попутал FLASH_Sector_1 с

 

 

 

#define ADDR_FLASH_SECTOR_0 ((uint32_t)0x08000000) /* Base @ of Sector 0, 16 Kbyte */

#define ADDR_FLASH_SECTOR_1 ((uint32_t)0x08004000) /* Base @ of Sector 1, 16 Kbyte */

#define ADDR_FLASH_SECTOR_2 ((uint32_t)0x08008000) /* Base @ of Sector 2, 16 Kbyte */

 

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


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

stm32G431. Печать развели так, что проц. всегда грузится в System memory (0x1FFF 0000) вместо флеш (0x0800 0000), т.к. BOOT0 (PB8) подвешен к питанию..

Решил изменить FLASH option bytes, чтоб не читал ногу PB8 при включение так (nSWBOOT0=0):

const char OffBoot0[] __attribute__((at(0x1FFF7800))) = {
	0xAA, 0xF8, 0xEF, 0xFB, 0x55, 0x07, 0x10, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
	0x00, 0xC0, 0xFF, 0x7F, 0xFF, 0x3F, 0x00, 0x80, 0xFF, 0xFF, 0xC0, 0xFF, 0x00, 0x00, 0x3F, 0x00,
	0xFF, 0xFF, 0xC0, 0xFF, 0x00, 0x00, 0x3F, 0x00, 0x80, 0xFF, 0xFE, 0xFF, 0x7F, 0x00, 0x10, 0x00
};

.hex файл заливается без ошибок (проверка проходит), но стоит перегрузить проц. все биты восстанавливаются.:(

Есть идее как заставить грузиться на 0x0800 0000?

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


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

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

Есть идее как заставить грузиться на 0x0800 0000?

Подвесить BOOT туда, куда надо.

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


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

ИМХО, фигня какая-то в коде написана. Либо Flash Algorithm должен знать, как работать с областью Option Bytes.

P.S. Программатором тупо в ST-Link Utility галочки нужные можно попробовать расставить, тыкнув на Option Bytes...

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


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

Согласно этой таблице нужно, чтобы кроме nSWBOOT0=0, еще и был nBOOT0=1.

BOOT1.JPG.e11a59bd5143ad475982b6811d5550fd.JPG

А еще радикально проблему решает BOOT_LOCK=1. Сейчас проверил на демоплатке G474. Переставил перемычку BOOT в режим системного загрузчика и поигрался с битами через ST-Link Utility. Оба способа работают - платка грузится с 0x08000000. Что касается вашего способа задания битов. Вы комплиментарные биты не забыли установить? Может поэтому не работает...

BOOT2.thumb.JPG.55be6c6a8eb497f1eba2ca680a806e21.JPG

BOOT.thumb.JPG.82501ec22439dd1144b439a42f865911.JPG

On 7/14/2021 at 4:50 PM, ViKo said:

Подвесить BOOT туда, куда надо.

В этой серии эту ногу можно использовать для своих целей как PB8. Для этого нужны манипуляции с Option Bytes.

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


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

Мужики, спасибо за ответы! Эти варианты рассматривал как очевидные, но задача немного в другом: передать/переслать прошивку монтажникам на месте, у них из инструмента только J_Link, шить умеют, но что-то сложнее это уже напряг. Поэтому пытаюсь создать прошивку с областью Option Bytes (на крайняк два *.hex). Считал банк OPT 0x1FFF7800-0x1FFF 7830, заменил нужные биты (см.картинку) и зашил обратно, но биты...

В общем вопрос как правильно шить область Flash OPT имея только хекс-файл?

Безымянный.jpg

Безымянный.jpg

On 7/17/2021 at 11:04 AM, MDD said:

А еще радикально проблему решает BOOT_LOCK=1.

За BOOT_LOCK спасибо за наводку!

On 7/17/2021 at 11:04 AM, MDD said:

... Вы комплиментарные биты не забыли установить? Может поэтому не работает...

Обижаете ;)

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


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

41 минуту назад, Karloson сказал:

но задача немного в другом: передать/переслать прошивку монтажникам на месте, у них из инструмента только J_Link, шить умеют, но что-то сложнее это уже напряг. Поэтому пытаюсь создать прошивку с областью Option Bytes (на крайняк два *.hex).

Эта область программируется по совершенно другому алгоритму, поэтому навряд ли их получится запрограммировать просто разместив в нужном месте константы.

Вашим монтажникам обязательно нужна родная оболочка от J-Link с галочками, рюшечками и кружевными трусиками? openOCD позволяет с командной строки за один запуск и залить файл и запрограммировать option bytes в нужные значения. Командную строку ему можно написать в файле .bat/.cmd/.sh, который можно передавать монтажникам вместе с образом прошивки - от них потребуется только запустить этот файл. Может и оболочка J-Link так умеет?

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


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

Для серийной прошивки своих плат с контроллерами более старых семейств STM32 использую ST-Link Utility в режиме командной строки. Там нужные Opion Bytes тоже задаются в командной строке. Т.е. запустил bat файл и всё нужное в контроллер прошилось. Сейчас на смену ST-Link Utility пришел Cube Programmer. Посмотрел на него мануал, он тоже умеет работать в режиме командной строки. Но эти программы вроде не умеют работать через J-Link, только через ST-Link.

Может будет проще снабдить монтажников китайским ST-Link, чем с J-Link разбираться?

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


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

45 минут назад, MDD сказал:

Но эти программы вроде не умеют работать через J-Link, только через ST-Link

openOCD умеет, если вдруг родная от jlink не умеет

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


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

1 hour ago, Сергей Борщ said:

openOCD умеет, если вдруг родная от jlink не умеет

J-Link умеет. Придется писать командный файл. Всем спасибо!

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

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


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

1 hour ago, Сергей Борщ said:

openOCD умеет, если вдруг родная от jlink не умеет

А он уже умеет шить семейство G4?

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


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

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

А он уже умеет шить семейство G4?

-Умеете ли вы играть на рояле?

- Не знаю, не пробовал

:biggrin:

В комплекте у него есть файлы stm32g0x.cfg и stm32g4x.cfg, насколько они рабочие - не знаю.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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