From 099ff60d0a2b385f5c3fe4032b1f5c6f201a7b93 Mon Sep 17 00:00:00 2001 From: gromov_ia <1keyten1@gmail.com> Date: Fri, 2 Oct 2026 15:17:58 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=BB=D0=B8=D0=B7=20=D0=B8=D0=B7?= =?UTF-8?q?=20=D0=BF=D1=8F=D1=82=D0=B8=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2:=20=D0=B2=D0=B5=D0=B1-=D1=84=D0=BE=D1=80=D0=BC=D0=B0=20G?= =?UTF-8?q?itea=20=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=B5=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=BD=D0=B8=D0=BC=D0=B0=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - make_release.ps1: образы BL616 (прошивка моста, загрузчик и штатная прошивка Sipeed) и настройки BLFlashCommand с путями к соседним файлам собираются в один архив bl616_bridge_firmware-v<версия>.zip с памяткой bin/release_readme.txt; - make_portable.ps1, make_release.ps1: zip через ZipFile с '/' в путях — Compress-Archive из PowerShell 5.1 пишет '\', и распаковщики кроме Проводника считают его частью имени файла; - make_portable.ps1: без файлов, которые BLFlashCommand оставляет в chips\ после прошивки (img_create\, eflash_loader_cfg.ini); - README, CHANGELOG: новый состав релиза. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 2 ++ README.md | 13 +++++++------ bin/release_readme.txt | 24 ++++++++++++++++++++++++ scripts/make_portable.ps1 | 10 +++++++++- scripts/make_release.ps1 | 35 ++++++++++++++++++++++++++--------- 5 files changed, 68 insertions(+), 16 deletions(-) create mode 100644 bin/release_readme.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index 87c097c..a29d26a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,8 @@ Пишется вместе с загрузчиком Sipeed: `bl616_bootloader_0x20000_nano20k_signed.bin` по адресу `0x0`, прошивка моста по адресу `0x20000`. Откат — `bl616_fpga_partner_25kDock.bin` (штатная Sipeed 2025030317) по адресу `0x0`. +Все три образа и настройки BLFlashCommand — в `bl616_bridge_firmware-v1.0.0.zip`; +проще прошивать программой TangProgrammer (вкладка «Прошивка моста»). **Программатор TangProgrammer** (Windows 10/11 x64, .NET Framework 4) diff --git a/README.md b/README.md index c76baf9..0aa8196 100644 --- a/README.md +++ b/README.md @@ -19,9 +19,7 @@ USB-устройством из двух независимых функций: |---|---| | `TangProgrammer-<версия>-win64.zip` | **программатор с окном** — распаковать и запустить, внутри всё нужное (openFPGALoader, BLFlashCommand, прошивки моста) | | `TangProgrammer.exe` | только программа — для клона этого репозитория (рядом должна быть папка `tools\`) | -| `tang25k_debugger_bl616.bin` | прошивка моста, пишется по адресу `0x20000` | -| `bl616_bootloader_0x20000_nano20k_signed.bin` | загрузчик Sipeed, пишется по адресу `0x0` вместе с прошивкой моста | -| `bl616_fpga_partner_25kDock.bin` | штатная прошивка Sipeed (`0x0`) — для отката | +| `bl616_bridge_firmware-<версия>.zip` | образы BL616 для ручной прошивки: прошивка моста `tang25k_debugger_bl616.bin` (адрес `0x20000`), загрузчик Sipeed `bl616_bootloader_0x20000_nano20k_signed.bin` (`0x0`), штатная прошивка Sipeed `bl616_fpga_partner_25kDock.bin` (`0x0`, для отката), настройки BLFlashCommand и памятка | | `fpga_test_bitstreams-GW5A-25.zip` | тестовые битстримы `loopback.fs` и `stream.fs` для проверки UART | | `SHA256SUMS.txt` | контрольные суммы | @@ -95,9 +93,11 @@ USB-устройством из двух независимых функций: ``` *(пишет загрузчик Sipeed из `bin\` и собранную прошивку моста `build\build_out\tang25k_debugger_bl616.bin`)*; - * вручную, BouffaloLabDevCube или BLFlashCommand: файлы из релиза, + * вручную, BouffaloLabDevCube или BLFlashCommand: архив + `bl616_bridge_firmware-…zip` из релиза, `bl616_bootloader_0x20000_nano20k_signed.bin` по адресу `0x0` и - `tang25k_debugger_bl616.bin` по адресу `0x20000`. + `tang25k_debugger_bl616.bin` по адресу `0x20000` (команда — в `README.txt` + архива). 5. Переподключите USB. Появятся «DirtyJTAG» и новый COM-порт. Перед первой прошивкой стоит сохранить полный дамп флеш-памяти BL616 @@ -249,7 +249,8 @@ python tests\uart_stream_test.py --port COM14 --seconds 30 --switches 10 .\scripts\publish_release.ps1 ``` Или вручную: «Релизы» → «Новый релиз» → тег, текст из `CHANGELOG.md`, - файлы из `dist\release\v<версия>\`. + файлы из `dist\release\v<версия>\`. Веб-форма Gitea на этом сервере + принимает не больше 5 файлов — поэтому релиз и собирается ровно из пяти. ## Ограничения diff --git a/bin/release_readme.txt b/bin/release_readme.txt new file mode 100644 index 0000000..0a93941 --- /dev/null +++ b/bin/release_readme.txt @@ -0,0 +1,24 @@ +Прошивка моста BL616 для Tang Primer 25K Dock +============================================= + +tang25k_debugger_bl616.bin прошивка моста (DirtyJTAG + UART), + адрес 0x20000 +bl616_bootloader_0x20000_nano20k_signed.bin загрузчик Sipeed, адрес 0x0 - + пишется вместе с прошивкой моста +bl616_fpga_partner_25kDock.bin штатная прошивка Sipeed, адрес 0x0 - + для отката +flash_prog_cfg.ini, restore_prog_cfg.ini настройки BLFlashCommand для этих файлов + +Проще всего прошивать программой TangProgrammer из того же релиза: вкладка +«Прошивка моста (BL616)». + +Вручную (BLFlashCommand из Bouffalo SDK или из TangProgrammer, папка +tools\bouffalo_flash_cube): +1. Отключите USB, замкните тестовые точки TDO и 3V3 (нижняя сторона платы), + подключите USB, разомкните. Появится COM-порт «Bouffalo CDC DEMO». +2. Из этой папки: + ...\BLFlashCommand.exe --interface=uart --baudrate=2000000 --port=COMxx --chipname=bl616 --cpu_id= --config=flash_prog_cfg.ini + Для отката на штатную прошивку: --config=restore_prog_cfg.ini +3. Переподключите USB. + +В BouffaloLabDevCube: два файла по адресам выше, режим UART, 2000000 бод. diff --git a/scripts/make_portable.ps1 b/scripts/make_portable.ps1 index f9caade..b759bd9 100644 --- a/scripts/make_portable.ps1 +++ b/scripts/make_portable.ps1 @@ -26,6 +26,9 @@ if (Test-Path (Join-Path $cube 'BLFlashCommand.exe')) { New-Item -ItemType Directory -Force $dst | Out-Null Copy-Item (Join-Path $cube 'BLFlashCommand.exe') $dst Copy-Item -Recurse (Join-Path $cube 'chips') $dst + # what earlier flashing left in the SDK copy (ignored by its .gitignore) + Get-ChildItem (Join-Path $dst 'chips\*\img_create') -Directory -ErrorAction SilentlyContinue | Remove-Item -Recurse -Force + Get-ChildItem (Join-Path $dst 'chips\*\eflash_loader\eflash_loader_cfg.ini') -ErrorAction SilentlyContinue | Remove-Item -Force } else { Write-Warning 'Bouffalo SDK is not installed (scripts\setup.ps1): the bridge firmware tab will not work in the copy' } @@ -75,6 +78,11 @@ Copy-Item (Join-Path $root 'gui\portable_readme.txt') (Join-Path $out 'README.tx $zip = Join-Path $dist 'TangProgrammer.zip' if (Test-Path $zip) { Remove-Item -Force $zip } -Compress-Archive -Path $out -DestinationPath $zip +# not Compress-Archive: in Windows PowerShell 5.1 it writes '\' into the entry +# names, and unzip tools other than Explorer take them for part of the file +# name. ZipFile does the same unless told otherwise (.NET 4.6.1 compat switch). +[AppContext]::SetSwitch('Switch.System.IO.Compression.ZipFile.UseBackslash', $false) +Add-Type -AssemblyName System.IO.Compression.FileSystem +[IO.Compression.ZipFile]::CreateFromDirectory($out, $zip, [IO.Compression.CompressionLevel]::Optimal, $true) $size = (Get-ChildItem -Recurse $out | Measure-Object -Sum Length).Sum Write-Host ("OK: {0} ({1:N1} MB), {2} ({3:N1} MB)" -f $out, ($size / 1MB), $zip, ((Get-Item $zip).Length / 1MB)) -ForegroundColor Green diff --git a/scripts/make_release.ps1 b/scripts/make_release.ps1 index 34d41c4..56d1d7c 100644 --- a/scripts/make_release.ps1 +++ b/scripts/make_release.ps1 @@ -1,13 +1,16 @@ # Collect the files of a release into dist\release\v\: # -# TangProgrammer-v-win64.zip portable programmer (make_portable.ps1) -# TangProgrammer.exe the program alone -# tang25k_debugger_bl616.bin bridge firmware, @0x20000 -# bl616_bootloader_0x20000_nano20k_signed.bin Sipeed loader, @0x0 -# bl616_fpga_partner_25kDock.bin original Sipeed firmware, @0x0 -# fpga_test_bitstreams-GW5A-25.zip fpga_test\*\impl\pnr\*.fs, if built +# TangProgrammer-v-win64.zip portable programmer (make_portable.ps1) +# TangProgrammer.exe the program alone +# bl616_bridge_firmware-v.zip bridge firmware (@0x20000), Sipeed loader +# (@0x0), original Sipeed firmware, configs +# for BLFlashCommand +# fpga_test_bitstreams-GW5A-25.zip fpga_test\*\impl\pnr\*.fs, if built # SHA256SUMS.txt # +# Five files at most: the Gitea web form takes no more than that ([attachment] +# MAX_FILES on gitea.vector.ru), publish_release.ps1 has no such limit. +# # .\scripts\build.ps1 # .\scripts\make_release.ps1 version from FW_VERSION_STR in src\sys.h param([string]$Version) @@ -35,9 +38,23 @@ New-Item -ItemType Directory -Force $out | Out-Null Copy-Item (Join-Path $root 'dist\TangProgrammer.zip') (Join-Path $out "TangProgrammer-$tag-win64.zip") Copy-Item (Join-Path $root 'dist\TangProgrammer\TangProgrammer.exe') $out -Copy-Item $bridgeFw $out -Copy-Item (Join-Path $root 'bin\bl616_bootloader_0x20000_nano20k_signed.bin') $out -Copy-Item (Join-Path $root 'bin\bl616_fpga_partner_25kDock.bin') $out +# the bridge images with the flash configs of the project root, pointing next to themselves +$fw = Join-Path $out "bl616_bridge_firmware-$tag" +New-Item -ItemType Directory -Force $fw | Out-Null +Copy-Item $bridgeFw $fw +Copy-Item (Join-Path $root 'bin\bl616_bootloader_0x20000_nano20k_signed.bin') $fw +Copy-Item (Join-Path $root 'bin\bl616_fpga_partner_25kDock.bin') $fw +foreach ($ini in 'flash_prog_cfg.ini', 'restore_prog_cfg.ini') { + $text = [IO.File]::ReadAllText((Join-Path $root $ini)) + $text = $text.Replace('./build/build_out/', './').Replace('./bin/', './').Replace('$(CHIPNAME)', 'bl616') + [IO.File]::WriteAllText((Join-Path $fw $ini), $text) +} +Copy-Item (Join-Path $root 'bin\release_readme.txt') (Join-Path $fw 'README.txt') +# not Compress-Archive, see make_portable.ps1 +[AppContext]::SetSwitch('Switch.System.IO.Compression.ZipFile.UseBackslash', $false) +Add-Type -AssemblyName System.IO.Compression.FileSystem +[IO.Compression.ZipFile]::CreateFromDirectory($fw, "$fw.zip", [IO.Compression.CompressionLevel]::Optimal, $true) +Remove-Item -Recurse -Force $fw $fs = @(Get-ChildItem (Join-Path $root 'fpga_test\*\impl\pnr\*.fs') -ErrorAction SilentlyContinue) if ($fs.Count) {