Skip to content
Snippets Groups Projects
README 2.50 KiB
Hello World sur la Zybo.

Permet de tester le printf() sur l'UART.
Pour le visualiser, il faut démarrer sur la carte SD et se connecter avec la
commande:
$ pyserial-miniterm /dev/ttyUSB1 115200


Permet de synthétiser le schéma représenté sur le document hw/design_0.pdf:

1) Software + GPIO:
- La LED_0 est allumée.
- Un appui sur le bouton BTN_0 est vu par le Zynq sur le GPIO configuré en
  entrée: EMIO[1].
- Dans le main(), dans une boucle infinie, la valeur lue sur le GPIO EMIO[1] est
  inversée puis appliquée sur GPIO configuré en sortie: EMIO[0].
- EMIO[0] est connecté à la LED_0 qui s'éteint.

2) Hardware:
- La LED_1 est éteinte.
- Un appui sur le bouton BTN_1 est connecté à une flip-flop et recopié sur la
  LED_1 à chaque front montant de l'horloge.
- L'horloge est fournie par le Zynq.


3 modes de fonctionnement:

1) Via une carte SD:
  - faire "make sdcard" et copier le fichier sdcard/boot.bin sur la carte SD
  - placer le jumper sur la board pour sélectionner le démarrage sur la carte SD
  - démarrer la board
  - se connecter à l'UART avec "pyserial-miniterm /dev/ttyUSB1 115200"
  - reset de la board pour voir le printf("Hello World").

2) Via openOCD:
  (note: printf() ne fonctionne pas car openOCD utilise la liaison série pour
   communiquer avec la board)
  - placer le jumper sur la board pour sélectionner le démarrage sur le JTAG
  - démarrer la board
  - faire "make openocd"
  - lancer gdb dans un autre terminal avec la commande:
    $ gdb-multiarch -ex "set architecture armv7" \
                    -ex "target extended-remote localhost:3333" \
                    --command="gdbinit.gdb"
  - dans gdb, faire "continue" pour sortir du breakpoint au niveau du main()

3) Via QEMU (logiciel seulement):
  (note: printf() ne fonctionne pas car le FSBL s'arrête avant d'avoir configuré
   l'UART ; il est possible de re-configurer les registres a-posteriori)
  - faire "make qemu"
  - lancer gdb dans un autre terminal avec la commande:
    $ gdb-multiarch -ex "target remote localhost:1234" --command="gdbinit.gdb"
  - dans gdb, attendre le timeout du FSBL qui n'arrive pas à démarrer les
    périphériques.


Testé avec:
- Vivado v2019.2 (64-bit)
- arm-none-eabi-gcc (15:8-2019-q3-1+b1) 8.3.1 20190703 (release)
- GNU ld (2.35.2-2+14+b2) 2.35.2
- Xilinx Bootgen v2019.2
- QEMU emulator version 5.2.0
- Open On-Chip Debugger 0.11.0-rc2
- GNU gdb (Debian 10.1-1.7) 10.1.90.20210103-git
- python3-serial 3.5~b0-1


TODO:
- Faire fonctionner l'UART à la fois via la carte SD et via QEMU.