| commit | 74da822a1c0b362ce7920dad5958ff9b840ad9c0 | [log] [tgz] | 
|---|---|---|
| author | Anthony DiGirolamo <tonymd@google.com> | Tue Aug 13 23:24:44 2024 +0000 | 
| committer | CQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com> | Tue Aug 13 23:24:44 2024 +0000 | 
| tree | d0e0b294bded50565429e25a7e4935d67314a7f2 | |
| parent | 108aac3fa1c08fd6b2b37045cb3a9048b87b9a32 [diff] | 
tools: Gonk flash fallback to dfu-util - If pyfu fails to find libusb attempt to flash gonk with dfu-util. - Update udev rules to include the STM32 bootloader mode Change-Id: Ife27d64a13613e40d890bb4dcdaad9d3665c45e7 Reviewed-on: https://pigweed-review.googlesource.com/c/gonk/+/229072 Reviewed-by: Asad Memon <asadmemon@google.com> Presubmit-Verified: CQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com> Commit-Queue: Auto-Submit <auto-submit@pigweed-service-accounts.iam.gserviceaccount.com> Lint: Lint 🤖 <android-build-ayeaye@system.gserviceaccount.com> Reviewed-by: Taylor Cramer <cramertj@google.com>
Clone the repo
git clone https://pigweed.googlesource.com/gonk
Source bootstrap.sh to download all compilers and tooling into the environment directory:
. ./bootstrap.sh
This should init all git submodules for you.
From here on the Pigweed environment is activated. You can activate the environment in a new shell without re-running bootstrap by sourcing activate.sh
. ./activate.sh
First bootstrap, run pw build and flash gonk using DFU.
. ./bootstrap.sh
pw build
Unplug gonk from USB and replug with MODE button held down.
Run gonk-flash on the MCU binary. This uses pyfu-usb.
gonk-flash ./out/gn/arduino_size_optimized/obj/applications/gonk/gonk.bin
Start capturing ADC samples with:
gonk \ --bitstream-file ./out/gn/obj/fpga/toplevel/toplevel.bin \ --database ./out/gn/arduino_size_optimized/obj/applications/gonk/bin/gonk.elf \ --host-logfile gonk-host-logs.txt \ --device-logfile gonk-device-logs.txt \ --log-to-stderr
Enter to stop or start ADC continuous updates. It will begin automatically on startup.ctrl-c to quit.Plot the logs from gonk-device-logs.txt with:
python tools/gonk_tools/plot.py -i gonk-device-logs.txt -o plot.svg
Build for the host and device by running:
pw build
This is mostly a shortcut with nice output for running gn gen out/gn and ninja -C out/gn.
The build commands are defined in: //tools/gonk_tools/build_project.py.
The Verilog build requires the following to be installed on Linux:
sudo apt install fpga-icestorm nextpnr-ice40 yosys
Running pw build will run the FPGA toolchain if these commands are available on the $PATH:
icepackicetimenextpnr-ice40yosysThe bitstream files will be written with the .bin extenson under ./out/gn/obj/fpga/*/*.bin along with log output files.
For example:
$ ls ./out/gn/obj/fpga/toplevel/ nextpnr-log.txt toplevel.asc toplevel.bin toplevel.json toplevel_timing_report.json toplevel_timing_report.txt yosys-log.txt
Flash the stm32f7 and launch the gonk.py script on a bitstream file.
Unplug gonk from USB and replug with MODE button held down.
Run gonk-flash which uses pyfu-usb. The --bin-file argument is optional.
gonk-flash --bin-file ./out/gn/arduino_size_optimized/obj/applications/gonk/bin/gonk.elf
This is more useful if you are doing firmware debugging.
./scripts/flash-with-blackmagic-probe.sh ./out/gn/arduino_size_optimized/obj/applications/gonk/bin/gonk.elf
This is a distibutable python wheel that can be used without the Gonk source checkout or compiling anything.
On Linux with the FPGA toolchain available run:
pw build
The zip file containing all the dependencies for the gonk python tooling is located in:
out/gn/obj/gonk_bundle.zip
Inside are the Python wheels for gonk_dist, gonk_firmware, and all third_party dependencies.
gonk_bundle ├── python_wheels │ ├── appdirs-1.4.4-py2.py3-none-any.whl │ ├── astroid-3.0.1-py3-none-any.whl │ ├── ... │ ├── gonk_dist-0.0.1+20240305140627-py3-none-any.whl │ ├── gonk_firmware-0.0.1+20240305140542-py3-none-any.whl │ ├── ... │ └── wheel-0.40.0-py3-none-any.whl ├── requirements.txt ├── setup.bat └── setup.sh
See https://github.com/YosysHQ/yosys for more instructions.
On Ubuntu/Debian install the deps:
sudo apt-get install build-essential clang lld bison flex \ libreadline-dev gawk tcl-dev libffi-dev git \ graphviz xdot pkg-config python3 libboost-system-dev \ libboost-python-dev libboost-filesystem-dev zlib1g-dev
Activate the bootstrap environment . ./bootstraph.sh then compile yosys.
git clone https://github.com/YosysHQ/yosys cd yosys git submodule update --init make config-clang make -j8
Install it to a known directory and add it to your $PATH:
make DESTDIR=$HOME/ice40-fpga-tools install export $PATH=$PATH:$HOME/ice40-fpga-tools/usr/local/bin
TODO: Document compiling from source.
TODO: Document compiling from source.
Checkout the desired commits in each of these submodules:
third_party/stm32cube_f7/cmsis_core third_party/stm32cube_f7/cmsis_device third_party/stm32cube_f7/hal_driver
Then run from Gonk root:
python -m pw_stm32cube_build gen_file_list third_party/stm32cube_f7
| Net | STM32 Pin | STM32 Function | Function | 
|---|---|---|---|
| STATUS | PB13 | GPIO_Output | STAT LED | 
| Net | FPGA IO# | STM32 Pin | STM32 Function | Flash Pin | 
|---|---|---|---|---|
| ICE_SPI_SS | 71 | PD2 | GPIO_Output | S# | 
| ICE_SPI_MISO | 68 | PB4 | SPI1_MISO | DQ1 | 
| ICE_SPI_MOSI | 67 | PB5 | SPI1_MOSI | DQ0 | 
| ICE_SPI_SCK | 70 | PB3 | SPI1_SCK | C | 
| FLASH_HOLD | 63 | PC11 | GPIO_Output | HOLD#/DQ3 | 
| FLASH_WP | 64 | PC12 | GPIO_Output | W#/VPP/DQ2 | 
| Net | Function | FPGA IO# | STM32 Pin | STM32 Function | Notes | 
|---|---|---|---|---|---|
| FPGA_IO_SPARE_0_2 | rst_i | 135 | PA0 | GPIO_Output | Active high | 
| FPGA_IO_SPARE_0_0 | mode_i | 137 | PB11 | GPIO_Output | FPGA operation mode | 
| DSPI_CS | valid_o | 75 | PB6 | GPIO_Output | Data/Transfer Valid | 
| FPGA_IO_SPARE_1_1 | miso_i | 101 | PC2 | SPI1_MISO | |
| FPGA_IO_SPARE_1_0 | mosi_i | 99 | PC3 | SPI1_MOSI | |
| I2C_O_SDA | cs_n | 79 | PB9 | SPI1_NSS | |
| FPGA_IO_SPARE_0_1 | sclk_i | 136 | PB10 | SPI1_SCK | |
| FPGA_IO_SPARE_2_0 | 49 | PA7 | |||
| FPGA_IO_SPARE_2_1 | 48 | PA6 | |||
| FPGA_IO_SPARE_2_2 | 47 | PA5 | |||
| FPGA_IO_SPARE_2_3 | 45 | PA4 |