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

```txt:動作環境
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)が有効なのか？


## 関連情報

- [ZYNQのFSBLが動かない場合の対処法](http://nahitafu.cocolog-nifty.com/nahitafu/2014/08/zynqfsbl-5f71.html) @ なひたふJTAG日記
    - 情報感謝です
    - いつもありがとうございます
- [Boot Standalone application from SD on CORA](https://forum.digilentinc.com/topic/16383-boot-standalone-application-from-sd-on-cora/)
    - microSDブートしないことについて諸説
        - A. FAT32を使う
        - B. Vivado v2019.1はだめでv2019.2は可能
        - C. Vivado v2019.2もだめ
        - D. ps7_init.cにてdelayを入れる


## 補足情報

### Block design

![aaa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/210f0eda-4fc0-d522-0f55-1ab17890718d.png)

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になり、あきらめた。