关于在不使用SDK的情况下使用SF32LB52-DevKit-LCD-V1.2.1的常见问题

我最近收到了一块用于评估的SF32LB52-DevKit-LCD-V1.2.1,上面搭载了SF32LB32-MOD-1 (N16R8)模组。

我目前不打算使用SiFli SDK/构建系统,而是计划自己编写链接脚本进行编译和链接,然后直接用sftool进行烧录。经过一些尝试和错误后,我成功烧录了一个能运行的闪烁程序。但由于我没有使用SDK进行构建,我有点担心会擦除闪存并且无法恢复原始固件。为了安全起见,我已经转储了前131072字节(0x12000000到0x12020000),但不清楚剩余部分的情况。我在这里找到了ptab.yaml定义,但NOR闪存的定义似乎有误:

memory:
  - mpi: mpi2
    type: nor
    size: 8388608 # 8MB
  • 这个型号的NOR闪存不应该是16MB吗?

以下是分区表中定义的分区:

  - name: hcpu_flash_code
    type: app
    subtype: factory
    region: mpi2
    offset: 0x20000
    size: 7MB
    core: HCPU

  # DFU application (XIP 执行)
  - name: dfu_flash_code
    type: app
    subtype: dfu
    region: mpi2
    offset: 0x720000
    size: 384KB
    core: HCPU

  # DFU download region
  - name: dfu_download_region
    type: data
    subtype: raw
    region: mpi2
    offset: 0x780000
    size: 1152KB

  # Filesystem region
  - name: fs_region
    type: data
    subtype: filesystem
    region: mpi2
    offset: 0x8A0000
    size: 4MB

  # KVDB for DFU
  - name: dfu
    type: data
    subtype: flashdb_kv
    region: mpi2
    offset: 0xCA0000
    size: 16KB

  # KVDB for BLE
  - name: ble
    type: data
    subtype: flashdb_kv
    region: mpi2
    offset: 0xCA4000
    size: 16KB

  # PSRAM data region (on SiP mpi1)
  - name: psram_data
    type: data
    subtype: ram
    region: mpi1
    offset: 0
    size: 8MB
  • 你能确认分区表的其余部分是否正确,这样我就能知道我在备份什么?
  • 分区表除了在SDK源代码中,还有其他地方有文档吗?
  • 即使我不使用SDK,分区表中的哪些部分我也不应该碰?我猜BLE分区可能被小核使用?
  • 如果我决定编写自己的引导加载程序,是否可以擦除所有内容?(除了可能的BLE分区)
  • 是否有详细文档说明引导加载程序的作用?我特别想知道它是否处理了一些硬件上的怪异之处,或者我只需阅读SF32LB52文档就可以了。但我也想知道第一引导加载程序已经完成了哪些启动工作,哪些需要由第二引导加载程序完成。

还有一个不相关的问题:

  • 我在这个板上没有看到任何SWD或JTAG引脚,除了通过UART打印串行数据之外,是否有其他方法可以进行运行时调试?

如果SiFli的人能看到这个:还有一个完全跑题的问题——既然你们通过淘宝销售,你们知道通过淘宝销售到瑞典/欧洲是如何操作的吗?我很难搞清楚这一点。我是从AliExpress上某个商店买的这个开发套件。

此致敬礼,
Oscar

  1. 没有英文版的模块数据手册
  2. 你说得对,nor flash 大小是 16MB,这个部分的 size 字段实际上没有被使用
memory:
  - mpi: mpi2
    type: nor
    size: 8388608 # 8MB
  1. ptab.yaml 中定义的所有分区都不被 bootrom(即第一级引导加载程序)使用,它们都与应用程序相关。BLE 分区不被小核使用,如果基于我们的 SDK 开发,它被运行在大核上的 BLE 主机代码使用。
  2. 如果你编写自己的引导加载程序(称为第二级引导加载程序),只需保留前 16KB,因为这是 bootrom 使用的闪存表,或者像 Zephyr 那样替换为你自己的 ftab.bin。下面是用于 hello_world 的 N16R8 模块的闪存表内容。ftab 从地址 0x12000000 开始。Bootrom 读取此表,知道第二级引导加载程序代码位于 0x12010000,需要复制到 0x20020000(XIP 基址)并在那里运行。
    main 代表主应用程序,由我们的第二级引导加载程序加载。
    bootrom(第一级引导加载程序)和第二级引导加载程序的功能记录在此处
PS > sdk.py ftab-dump -p .\build_sf32lb52-lcd_n16r8_hcpu\ftab.bin

Flash Table (ftab.bin)
Magic: 0x53454346 (FCES)
File Size: 11280 bytes

                              1. Partition Table Entries                              
┏━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━┓
┃ Index ┃ Name            ┃ Base Address ┃    Size ┃ Size (Hex) ┃   XIP Base ┃ Flags ┃
┡━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━┩
│     0 │ ftab            │   0x12000000 │  32.0KB │ 0x00008000 │          - │     - │
│     3 │ bootloader      │   0x12010000 │ 128.0KB │ 0x00020000 │ 0x20020000 │     - │
│     4 │ main            │   0x12020000 │   7.0MB │ 0x00700000 │ 0x12020000 │     - │
│     7 │ bootloader_pong │   0x12010000 │ 128.0KB │ 0x00020000 │ 0x20020000 │     - │
│     8 │ main_pong       │   0x12020000 │   7.0MB │ 0x00700000 │ 0x12020000 │     - │
└───────┴─────────────────┴──────────────┴─────────┴────────────┴────────────┴───────┘

开发板上默认没有 SWD 引脚,但仍可通过 UART 进行调试。Windows 用户请参考此 文档
Linux 和 macOS 用户可使用我们的 VSCode 插件 SiFli-SDK-CodeKit。它已内置 probe-rs,可通过 UART 调试 SF32LB52,相关中文 调试文档

关于ftab.bin(闪存表,C结构体类型为 struct sec_configuration,定义在dfu.h中)的结构,你可以阅读这段代码来大致了解,尽管有些信息已经过时。SF32LB52使用的正确索引定义如下,第二个引导加载程序的索引为3

Flash Table (ftab.bin)
Magic: 0x53454346 (FCES)
File Size: 11280 bytes

                              1. 分区表条目                              
┏━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━┓
┃ 索引   ┃ 名称            ┃ 基地址       ┃    大小  ┃ 大小(十六进制)┃   XIP基地址 ┃ 标志  ┃
┡━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━┩
│     0 │ ftab            │   0x12000000 │  32.0KB │ 0x00008000 │          - │     - │
│     3 │ bootloader      │   0x12010000 │ 128.0KB │ 0x00020000 │ 0x20020000 │     - │
│     4 │ main            │   0x12020000 │   7.0MB │ 0x00700000 │ 0x12020000 │     - │
│     7 │ bootloader_pong │   0x12010000 │ 128.0KB │ 0x00020000 │ 0x20020000 │     - │
│     8 │ main_pong       │   0x12020000 │   7.0MB │ 0x00700000 │ 0x12020000 │     - │
└───────┴─────────────────┴──────────────┴─────────┴────────────┴────────────┴───────┘
有效条目: 5/16

                             2. 映像描述表                             
┏━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━┓
┃ Idx ┃ FlashID ┃ 名称       ┃ 长度   ┃ 长度(十六进制)┃ 块大小     ┃ 标志  ┃ 状态   ┃
┡━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━┩
│   0 │       2 │ LCPU       │      - │            - │          - │ -     │ 空     │
│   1 │       3 │ Bootloader │ 64.0KB │   0x00010000 │        512 │ AUTO  │ 有效   │
│   2 │       4 │ HCPU       │  7.0MB │   0x00700000 │        512 │ AUTO  │ 有效   │
│   3 │       5 │ Boot       │      - │            - │          - │ -     │ 空     │
│   4 │       6 │ LCPU2      │      - │            - │          - │ -     │ 空     │
│   5 │       7 │ BCPU2      │      - │            - │          - │ -     │ 空     │
│   6 │       8 │ HCPU2      │  7.0MB │   0x00700000 │        512 │ AUTO  │ 有效   │
│   7 │       9 │ Boot2      │      - │            - │          - │ -     │ 空     │
│   8 │      10 │ HCPU_EXT1  │      - │            - │          - │ -     │ 空     │
│   9 │      11 │ HCPU_EXT2  │      - │            - │          - │ -     │ 空     │
│  10 │      12 │ LCPU_EXT1  │      - │            - │          - │ -     │ 空     │
│  11 │      13 │ LCPU_EXT2  │      - │            - │          - │ -     │ 空     │
│  12 │      14 │ Reserved   │      - │            - │          - │ -     │ 空     │
│  13 │      15 │ SINGLE     │      - │            - │          - │ -     │ 空     │
└─────┴─────────┴────────────┴────────┴──────────────┴────────────┴───────┴────────┘
有效条目: 3/14

            3. 映像索引表            
┏━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━┓
┃ 索引   ┃ 名称       ┃    地址    ┃ 状态   ┃
┡━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━┩
│     0 │ LCPU       │          - │ 空     │
│     1 │ Bootloader │ 0x12001200 │ 有效   │
│     2 │ HCPU       │ 0x12001400 │ 有效   │
│     3 │ Boot       │          - │ 空     │
└───────┴────────────┴────────────┴────────┘

这是个好主意。我们把文件系统区域放在DFU区域之后的原因很简单,就是为了利用剩余的闪存空间。

非常感谢您详尽的回答,非常有帮助!