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

Sipeed Tang Primer 20K Dock софт процессор Arm Cortex M1 не загружается/не запускается bootload от Gowin

Соорудил простейший контроллер с помощью IP Core Generator, без отладки, одно прерывание, инициализация ITCM стандартным bootload из SDK(Gowin_EMPU_M1_V1.8) к  Aurora. Keil настроил согласно инструкции, получил bin файл. Собрал контроллер, загрузил во внешнюю SPI-Flash, далее загрузил BIN файл. Загружал с верификацией. Контроллер не ожил. И так много раз...

При этом пример с лампочками и прочие, более функциональные, программы, загруженные непосредственно в ITCM вполне себе работают.

Может кто сталкивался с подобной проблемой? Поиск особо не помог...

image.thumb.png.fa74e6deb9b8097c3810739c12522e76.pngimage.thumb.png.3457d4283cf126fc690c6da4203d3fa1.pngimage.thumb.png.4d8510d18c2a63d943f4ea6624994db6.pngimage.thumb.png.0e34c2455ad0e50464bb1171861f3501.pngimage.thumb.png.4d941257b8bbb88bc3a916fabb8f440b.png

 


`resetall

module cm1_demo_top
(
  GPIO,
  FLASH_SPI_HOLDN,
  FLASH_SPI_CSN,
  FLASH_SPI_MISO,
  FLASH_SPI_MOSI,
  FLASH_SPI_WPN,
  FLASH_SPI_CLK,
  HCLK,        //System Clock
  hwRstn    //System Reset
);

input HCLK;          // System clock
input hwRstn;        // System reset

//GPIO
inout [3:0] GPIO;

//SPI-Flash
inout FLASH_SPI_HOLDN;
inout FLASH_SPI_CSN;
inout FLASH_SPI_MISO;
inout FLASH_SPI_MOSI;
inout FLASH_SPI_WPN;
inout FLASH_SPI_CLK;

Gowin_EMPU_M1_Top u_Gowin_EMPU_M1_Top
(
  .LOCKUP(),
  .GPIO(GPIO),
  .FLASH_SPI_HOLDN(FLASH_SPI_HOLDN),
  .FLASH_SPI_CSN(FLASH_SPI_CSN),
  .FLASH_SPI_MISO(FLASH_SPI_MISO),
  .FLASH_SPI_MOSI(FLASH_SPI_MOSI),
  .FLASH_SPI_WPN(FLASH_SPI_WPN),
  .FLASH_SPI_CLK(FLASH_SPI_CLK),
  .HCLK(HCLK),        //System Clock
  .hwRstn(hwRstn)    //System Reset
);

endmodule

/*
 ******************************************************************************************
 * @file      main.c
 * @author    GowinSemicoductor
 * @device    Gowin_EMPU_M1
 * @brief     Main function.
 ******************************************************************************************
 */

/* Includes ------------------------------------------------------------------*/
#include "GOWIN_M1.h"

/* Declarations ------------------------------------------------------------------*/
void GPIOInit(void);
void delay(__IO uint32_t nCount);

int main(void)
{
  SystemInit();//Initializes system clock
  GPIOInit();//Initializes GPIO0

  while(1)
  {
    GPIO_WriteBits(GPIO0,0xE);
    delay(1333000);

    GPIO_WriteBits(GPIO0,0xD);
    delay(1333000);

    GPIO_WriteBits(GPIO0,0xB);
    delay(1333000);

    GPIO_WriteBits(GPIO0,0x7);
    delay(1333000);
        
        GPIO_WriteBits(GPIO0,0xF);
        delay(1333000);
  }
}

//Initialize GPIO
void GPIOInit(void)
{
  GPIO_InitTypeDef GPIO_InitType;

  GPIO_InitType.GPIO_Pin = GPIO_Pin_0 |
                           GPIO_Pin_1 |
                           GPIO_Pin_2 |
                           GPIO_Pin_3;
  GPIO_InitType.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitType.GPIO_Int = GPIO_Int_Disable;

    GPIO_Init(GPIO0,&GPIO_InitType);

  GPIO_WriteBits(GPIO0,0xF);//light : low level
}

//delay
void delay(__IO uint32_t nCount)
{
  for(; nCount != 0; nCount--);
}
image.thumb.png.44031f033c39a08207941a075ff16f87.pngimage.thumb.png.6364b7121518dba8f8ef09c2f4110d69.pngimage.thumb.png.2d306cb841e806038a04a1f21b7f0692.png

 

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


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

С год назад столкнулся с этой проблемой - беда была в стартовых адресах загрузки (у меня 16-Мбит флэш стоит - адреса 0х400000 там нет вообще). Но не могу вспомнить, как решил ее. По итогу эта функция показалась мне бесполезной, т.к. приходилось каждый раз загружать и битстрим, и отдельно бинарник для софт-ядра, хотя я ожидал, что смогу просто перешивать бинарник. 

 

Для меня полезным оказался способ объединения битстрима и бинарника через поставляемую утилиту merge_bit.

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


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

36 minutes ago, tren359 said:

С год назад столкнулся с этой проблемой - беда была в стартовых адресах загрузки (у меня 16-Мбит флэш стоит - адреса 0х400000 там нет вообще). Но не могу вспомнить, как решил ее. По итогу эта функция показалась мне бесполезной, т.к. приходилось каждый раз загружать и битстрим, и отдельно бинарник для софт-ядра, хотя я ожидал, что смогу просто перешивать бинарник. 

 

Для меня полезным оказался способ объединения битстрима и бинарника через поставляемую утилиту merge_bit.

Большое спасибо за информацию. Полез смотреть что стоит в моём экземпляре. Оказалось: XT25F32B-S. В ней тоже нет адреса 0х400000. Теперь меня смущает то, что верификация при всём при том проходит нормально:

image.thumb.png.f66eea84dab39cb5051575bc82b4f3c3.png

Как с этим жить?

Может есть исходники загрузчика? Просто адрес загрузочный изменить.....

Что касается merge_bit... Этот вариант не намного удобней, с моей точки зрения, чем простая инициализация ITCM. 

Буду работать в двух направлениях:

- переработка загрузчика

- замена SPI-Flash

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


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

В завершение темы добавлю...

Проверил теорию на Tang Nano 20K. В ней установлена flash WINBOND 25Q64JVIQ в ней есть адрес 0х400000 (и выше). Тестовый пример заморгал с первой попытки.

Вывод: с китайской верификацией надо быть внимательней.

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


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

В 24.07.2023 в 11:52, ppj сказал:

Буду работать в двух направлениях:

- переработка загрузчика

- замена SPI-Flash

Оба направления рабочие:

- заменил флэш на 64-Мбит - запустилось все без проблем;

- в бутлоадре в файле itcm2 прописан адрес хранения бинарника для ARM ядра 40 00 00 (строки 87-89 при открытии в Notepad++). Меняем адрес на тот, что подходит для нашей флэш и не затирает область, хранящую битстрим (для моей 16-Мбит флэш и GW2A-LV18PG256 c максимальным размером битстрима 887 кбайт подошел адрес 0x100000) - и дело в шляпе.

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


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

4 hours ago, tren359 said:

Оба направления рабочие:

- заменил флэш на 64-Мбит - запустилось все без проблем;

- в бутлоадре в файле itcm2 прописан адрес хранения бинарника для ARM ядра 40 00 00 (строки 87-89 при открытии в Notepad++). Меняем адрес на тот, что подходит для нашей флэш и не затирает область, хранящую битстрим (для моей 16-Мбит флэш и GW2A-LV18PG256 c максимальным размером битстрима 887 кбайт подошел адрес 0x100000) - и дело в шляпе.

Флеш уже едет ко мне, а вот  бинарник по Вашему рецепту поправить не удалось. Видимо, с тех пор перекомпилировали его. Что странно, Notepad++ не нашёл даже байта "40"...image.thumb.png.ba52078426c38fb6592e4dde7174f0da.png

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

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


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

15 минут назад, ppj сказал:

бинарник по Вашему рецепту поправить не удалось. Видимо, с тех пор перекомпилировали его.

сравнил файлы Gowin_EMPU_M1_V1.8\bootload\Arora\bootload\ITCM_Size_32KB\.* с теми, которые у меня - отличий не нашёл. Сейчас попробую обновить EDA до актуальной версии и повторить эксперимент.

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


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

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

Флеш уже едет ко мне, а вот  бинарник по Вашему рецепту поправить не удалось. Видимо, с тех пор перекомпилировали его. Что странно, Notepad++ не нашёл даже байта "40"...

у меня есть подозрения, что Вы берете файлы itcm, которые выдает KEIL после сборки проекта (судя по размеру файла на приложенном Вами скриншоте). Вам необходимо взять файлы бутлоадра, поставляемые в архиве Gowin EMPU M1 на сайте.

https://www.gowinsemi.com/en/support/database/569/

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


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

38 minutes ago, tren359 said:

у меня есть подозрения, что Вы берете файлы itcm, которые выдает KEIL после сборки проекта (судя по размеру файла на приложенном Вами скриншоте). Вам необходимо взять файлы бутлоадра, поставляемые в архиве Gowin EMPU M1 на сайте.

https://www.gowinsemi.com/en/support/database/569/

Точно! Прошу прощения... Старость - не радость. Не в том файле копался. Просто понаделал этих файлов пока разбирался столько, что запутался в них.image.thumb.png.8d08fb3b323b1cc965614370e149c564.png

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


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

6 hours ago, tren359 said:

Оба направления рабочие:

- заменил флэш на 64-Мбит - запустилось все без проблем;

- в бутлоадре в файле itcm2 прописан адрес хранения бинарника для ARM ядра 40 00 00 (строки 87-89 при открытии в Notepad++). Меняем адрес на тот, что подходит для нашей флэш и не затирает область, хранящую битстрим (для моей 16-Мбит флэш и GW2A-LV18PG256 c максимальным размером битстрима 887 кбайт подошел адрес 0x100000) - и дело в шляпе.

Всё получилось! Переселил C-bin в 0х200000. Лампочка заморгала. Так что совет рабочий. Ещё раз, большое спасибо!

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


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

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

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

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

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

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

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

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

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

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