首页 / 最新培训

AG32 flash 布局 + logic 默认地址

2026年7月10日

让 AI 先抽出时钟、复位和封装,再生成一份可以上板核对的例程。

flash 地址布局(0x80000000 起始)

区段256KB 起始256KB 结束1MB 起始1MB 结束大小
MCU code0x80000000(随工程)0x80000000(随工程)0~156KB(256K) / 0~870KB(1M)
Logic (压缩)0x800340000x800E70000x800F40000x8010000048KB(0xC000)
Logic (非压缩)0x800270000x800E70000x800E70000x80100000100KB(0x19000)
Option bytes0x810000000x810000800x810000000x81000080128B

MCU code 永远在 0x80000000 起始(除非自定义 board_build.boot_addr)。

Logic 默认在 flash 末尾往前推:
– 压缩 logic ~48KB,放最后 48K
– 非压缩 logic ~100KB,放最后 100K

Option bytes 在 0x81000000(独立区段,不在 flash 0x80000000 范围)。


核心公式

logic 起始 = 0x80000000 + flash_size - logic_size
常量字节数十六进制
256KB2621440x40000
1MB10485760x100000
48KB491520xC000
100KB1024000x19000

详细计算

Flash压缩计算起始地址结束地址
256KB否 (-100K)0x80000000 + 0x40000 – 0x19000 = 0x80000000 + 0x270000x800270000x800E7000
256KB是 (-48K)0x80000000 + 0x40000 – 0xC000 = 0x80000000 + 0x340000x800340000x800E7000
1MB否 (-100K)0x80000000 + 0x100000 – 0x19000 = 0x80000000 + 0xE70000x800E70000x80100000
1MB是 (-48K)0x80000000 + 0x100000 – 0xC000 = 0x80000000 + 0xF40000x800F40000x80100000

口算技巧:用 hex 算更清楚,不要用十进制脑算。

例:256KB – 48K = 0x40000 – 0xC000 = 0x34000,起始 0x80000000 + 0x34000 = 0x80034000 ✓


logic_compress = true 行为

  • 默认 false,不开
  • 开 = Quartus 输出的 bitstream 走 LZW 压缩,boot 时多 30~50ms 解压
  • 解压在 RAM 临时放,需要 FCB_BUF 宏控制(RAM 占用)
  • 节省 50KB flash 空间(100K → 48K)
  • 不是必须的,根据 flash 空间和启动时间要求决定

显式指定 board_upload.logic_address

如果默认地址不合适,在 platformio.ini 显式覆盖:

[setup_logic]
logic_ve = my_board.ve
logic_device = AGRV2KL100
logic_compress = true
board_upload.logic_address = 0x80034000   ; 显式覆盖

不用 logic 时,这个参数被忽略。


batch 烧录文件结构

pio run -t batch 会生成 <program>_<env>_batch.bin,内部按顺序:

  1. Option bytes(128B)→ 0x81000000
  2. Logic bin → 0x80034000(256K 压缩)或 0x800F4000(1M 压缩)
  3. MCU code → 0x80000000

pio run -t batch_upload 一次烧完整 batch。

pio run -t upload 只烧 MCU code 到 0x80000000,不烧 logic 也不烧 option bytes。所以 Wipe Flash 之后再用 upload 烧 code,option bytes 是擦除状态(boot ROM 用默认)。


注意

  • 0x80000000 + 0x27000 = 0x80027000,不是 0x80E7000(256K 末尾 100K)
  • 0x80000000 + 0xF4000 = 0x800F4000,不是 0x80F40000(1M 末尾 48K)
  • 不要再凭印象算 hex 地址,老老实实按字节加

.

返回培训列表