Cora Z7 > ビルトイン USBシリアルでFSBLの処理メッセージを表示したい > 10秒のdelayを追加 > microSDからアプリ起動もした


動作環境
CORA Z7
Windows 10 Pro v1909
Vivado v2019.1
TeraTerm Version 4.105

概要

Cora Z7を用いた実装をしたのだが、デバッガ動作で動いてmicroSD動作で動かない。
microSD動作を確認するため、FSBLのメッセージをシリアル出力したい。

接続

  • USB
    • 電源として
    • シリアル出力用
  • Pmod JA 0と1ピン
    • UARTLiteで使おうとしたが、だめだった

シリアル出力の問題

  • ビルトインUSBシリアル
    • USB電源で接続した時にTeraTermの接続が切れる
    • 接続が戻るまでに出力がなくなる?
  • Pmod JA 0と1ピン
    • UARTLiteで実装
    • FSBLのメッセージをこちらに表示しようとしたが、いろいろ試して成功せず

対処

  • fsblのmain.cを以下のようにした。
    • #include <sleep.h>を追加
    • main()でsleepを追加
main.c
int main(void)
{
    u32 BootModeRegister = 0;
    u32 HandoffAddress = 0;
    u32 Status = XST_SUCCESS;
    u32 RegVal;
    /*
     * PCW initialization for MIO,PLL,CLK and DDR
     */

    sleep(10); // <------ 追加した処理 -------

    Status = ps7_init();

FSBL出力

Xilinx First Stage Boot Loader
Release 2019.1  Oct 17 2020-12:02:15
Devcfg driver initialized
Silicon Version 3.1
Boot mode is SD
SD: rc= 0
SD Init Done
Flash Base Address: 0xE0100000
Reboot status register: 0x60400000
Multiboot Register: 0x0000C000
Image Start Address: 0x00000000
Partition Header Offset:0x00000C80
Partition Count: 3
Partition Number: 1
Header Dump
Image Word Len: 0x0007F2E8
Data Word Len: 0x0007F2E8
Partition Word Len:0x0007F2E8
Load Addr: 0x00000000
Exec Addr: 0x00000000
Partition Start: 0x000075D0
Partition Attr: 0x00000020
Partition Checksum Offset: 0x00000000
Section Count: 0x00000001
Checksum: 0xFFE7AF06
Bitstream
In FsblHookBeforeBitstreamDload function
PCAP:StatusReg = 0x40000A30
PCAP:device ready
PCAP:Clear done
Level Shifter Value = 0xA
Devcfg Status register = 0x40000A30
PCAP:Fabric is Initialized done
PCAP register dump:
PCAP CTRL 0xF8007000: 0x4C00E07F
PCAP LOCK 0xF8007004: 0x0000001A
PCAP CONFIG 0xF8007008: 0x00000508
PCAP ISR 0xF800700C: 0x0802000B
PCAP IMR 0xF8007010: 0xFFFFFFFF
PCAP STATUS 0xF8007014: 0x00000A30
PCAP DMA SRC ADDR 0xF8007018: 0x00100001
PCAP DMA DEST ADDR 0xF800701C: 0xFFFFFFFF
PCAP DMA SRC LEN 0xF8007020: 0x0007F2E8
PCAP DMA DEST LEN 0xF8007024: 0x0007F2E8
PCAP ROM SHADOW CTRL 0xF8007028: 0xFFFFFFFF
PCAP MBOOT 0xF800702C: 0x0000C000
PCAP SW ID 0xF8007030: 0x00000000
PCAP UNLOCK 0xF8007034: 0x757BDF0D
PCAP MCTRL 0xF8007080: 0x30800100

DMA Done !

FPGA Done !
In FsblHookAfterBitstreamDload function
Partition Number: 2
Header Dump
Image Word Len: 0x00002002
Data Word Len: 0x00002002
Partition Word Len:0x00002002
Load Addr: 0x00100000
Exec Addr: 0x00100000
Partition Start: 0x000868C0
Partition Attr: 0x00000010
Partition Checksum Offset: 0x00000000
Section Count: 0x00000001
Checksum: 0xFFD734C8
Application
Handoff Address: 0x00100000
In FsblHookBeforeHandoff function
SUCCESSFUL_HANDOFF
FSBL Status = 0x1
Hello World

最後の「Hello World」はアプリケーションの出力であり、microSDのBOOT.binを読み込み成功しているな。
FSBLのsleep(10)が有効なのか?

関連情報

補足情報

Block design

UARTLiteを5つ足しているが、今回は使ってない。

xdcファイル

UARTLiteを5つ足しているが、今回は使ってない。

set_property PACKAGE_PIN Y18 [get_ports rx_0]
set_property PACKAGE_PIN Y19 [get_ports tx_0]
set_property IOSTANDARD LVCMOS33 [get_ports rx_0]
set_property IOSTANDARD LVCMOS33 [get_ports tx_0]
set_property PACKAGE_PIN Y16 [get_ports rx_1]
set_property PACKAGE_PIN Y17 [get_ports tx_1]
set_property IOSTANDARD LVCMOS33 [get_ports rx_1]
set_property IOSTANDARD LVCMOS33 [get_ports tx_1]
set_property PACKAGE_PIN U18 [get_ports rx_2]
set_property PACKAGE_PIN U19 [get_ports tx_2]
set_property IOSTANDARD LVCMOS33 [get_ports rx_2]
set_property IOSTANDARD LVCMOS33 [get_ports tx_2]
set_property PACKAGE_PIN W18 [get_ports rx_3]
set_property PACKAGE_PIN W19 [get_ports tx_3]
set_property IOSTANDARD LVCMOS33 [get_ports rx_3]
set_property IOSTANDARD LVCMOS33 [get_ports tx_3]
set_property PACKAGE_PIN W14 [get_ports rx_4]
set_property PACKAGE_PIN Y14 [get_ports tx_4]
set_property IOSTANDARD LVCMOS33 [get_ports rx_4]
set_property IOSTANDARD LVCMOS33 [get_ports tx_4]

FSBLの設定

FSBLのプロジェクト設定にて、
C/C++ Build > Settings > Tool Settings > ARM v7 gcc compiler > Symbols

FSBL_DEBUG_INFO
を足す。

Vivado v2019.2

v2019.2を使うとmicroSDブートできるような記載があった、v2019.2ではxil_printf.h not foundになり、あきらめた。