[third_party/pigweed] Roll 26 commits

243ba33cd5434c7 pw_multisink: Add GetUnreadEntriesSize to Drain
4885f584c9a27aa pw_ring_buffer: Add EntriesSize API to Reader
da7ee077f24a9bb pw_bluetooth_proxy: Add maybe_unused to make downs
7ddafaf90088efa pw_bluetooth_proxy: Add ProxyHost::HasSendAclCapab
21bcbe67b4552d1 pw_toolchain: Add IOKit and Security headers to ma
9cb32e34b5e88ff pw_bluetooth_proxy: Update H4HciPacket constructio
b68025de8fda296 pw_bluetooth_proxy: Add sendGattNotify stub
a4f3e67ade55ec6 pw_clock_tree_mcuxpresso: Configure ClkIn as sourc
1ffc0b72b2cf57d third_party: Add @libusb to bazel workspace
e25a26911ac036e pw_protobuf: Add module metadata
1318da19d424a2b pw_log: Add module metadata
5a42d892e61c03c pw_docgen: Add module metadata
5d2f2ae7a1ac085 pw_bloat: Add module metadata
8e598bdc21566ef third_party/freertos: Share common FreeRTOS functi
ea3f5729c910f5d pw_system: Move config variables to config.h
508e145f7f9814f pw_containers: Disallow deletion from InlineVarLen
9452c6061de3f1a pw_toolchain_bazel: Add cortex-a32 mcpu value
28a9fb05372696b pw_multisink: Add option to inject a user defined
52fa32ac0d460e0 pw_build: Update intro
f8259a3cb161f43 pw_spi_rp2040: Add module metadata
2803e38a0afeb3f pw_arduino_build: Add module metadata
3b855f66736b7a3 pw_ide: Preserve modified editor settings
46a21c419e5561f bazel: No integration tests in wildcard build
83735047f7e90ed pw_transfer: Fix ConcurrentModificationException i
52fcc2ecdab0e05 pw_stream_uart_mcuxpresso: Make dma_stream Write o
04b802b31c9a0ca pw_web: Get icon fonts via Google Fonts URL

https://pigweed.googlesource.com/pigweed/pigweed
third_party/pigweed Rolled-Commits: f63576c7a25f36b..243ba33cd5434c7
Roller-URL: https://ci.chromium.org/b/8745890216951277697
GitWatcher: ignore
CQ-Do-Not-Cancel-Tryjobs: true
Change-Id: Ic65bbf436b387e74cc431bcf09bf4f0bc3ce77ed
Reviewed-on: https://pigweed-review.googlesource.com/c/gonk/+/214345
Bot-Commit: Pigweed Roller <pigweed-roller@pigweed-service-accounts.iam.gserviceaccount.com>
Commit-Queue: Pigweed Roller <pigweed-roller@pigweed-service-accounts.iam.gserviceaccount.com>
Lint: Lint 🤖 <android-build-ayeaye@system.gserviceaccount.com>
1 file changed
tree: efde542d7de985a1baa2d57d44a134cecd25236e
  1. applications/
  2. build_overrides/
  3. fpga/
  4. lib/
  5. scripts/
  6. targets/
  7. third_party/
  8. tools/
  9. .gitignore
  10. .gitmodules
  11. .gn
  12. banner.txt
  13. bootstrap.sh
  14. BUILD.gn
  15. BUILDCONFIG.gn
  16. OWNERS
  17. pigweed.json
  18. README.md
README.md

Gonk

Getting Started

  1. Clone the repo

    git clone https://pigweed.googlesource.com/pigweed/gonk
    
  2. Source bootstrap.sh to download all compilers and tooling into the environment directory:

    . ./bootstrap.sh
    

    This should init all git submodules for you.

  3. 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
    

Compile:

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.

Gonk Verilog:

The Verilog build requires the following to be installed on Linux:

sudo apt install fpga-icestorm nextpnr-ice40 yosys

Run this to compile:

pw build

The 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

Gonk fpga config Example

Flash the stm32f7 and launch the write_fpga.py script on a bitstream file.

Flash via DFU

  1. Unplug gonk from USB and replug with MODE button held down.

  2. Run gonk-flash on the MCU binary. This uses pyfu-usb.

    gonk-flash ./out/gn/arduino_size_optimized/obj/applications/fpga_config/fpga_config.bin
    

Write the FPGA bitstream

  1. Write an FPGA bitstream with the write_fpga.py script:

    gonk \
      --bitstream-file ./out/gn/obj/fpga/toplevel/toplevel.bin
      --database ./out/gn/arduino_size_optimized/obj/applications/fpga_config/bin/fpga_config.elf \
      --log-to-stderr
    

    You can redirect host and device logs to separate files with:

    gonk \
      --bitstream-file ./out/gn/obj/fpga/toplevel/toplevel.bin
      --database ./out/gn/arduino_size_optimized/obj/applications/fpga_config/bin/fpga_config.elf \
      --host-logfile gonk-host-logs.txt \
      --device-logfile gonk-device-logs.txt
    

Alternative: Flash with BlackMagic Probe

./scripts/flash-with-blackmagic-probe.sh ./out/gn/arduino_size_optimized/obj/applications/spi_flash_test/bin/spi_flash_test.elf

Generating the Gonk Python Bundle

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

pw_system Example

Run on Host

Run the host app and connect to it via pw-system-console:

./out/gn/host_device_simulator.speed_optimized/obj/applications/system_example/bin/system_example & \
  pw-system-console --socket-addr default \
    --proto-globs third_party/pigweed/pw_rpc/echo.proto ; \
  killall system_example

Run on Device

Flashing

openocd -s $PW_PIGWEED_CIPD_INSTALL_DIR/share/openocd/scripts \
  -f $GONK_ROOT/targets/stm32f769i_disc0_stm32cube/openocd_stm32f7xx.cfg \
  -c "program out/gn/stm32f769i_disc0_stm32cube.size_optimized/obj/applications/system_example/bin/system_example.elf reset exit"

Updating STM32Cube

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

Pin Map

Misc

NetSTM32 PinSTM32 FunctionFunction
STATUSPB13GPIO_OutputSTAT LED

SPI Flash Connection

NetFPGA IO#STM32 PinSTM32 FunctionFlash Pin
ICE_SPI_SS71PD2GPIO_OutputS#
ICE_SPI_MISO68PB4SPI1_MISODQ1
ICE_SPI_MOSI67PB5SPI1_MOSIDQ0
ICE_SPI_SCK70PB3SPI1_SCKC
FLASH_HOLD63PC11GPIO_OutputHOLD#/DQ3
FLASH_WP64PC12GPIO_OutputW#/VPP/DQ2

FPGA Connection

NetFunctionFPGA IO#STM32 PinSTM32 FunctionNotes
FPGA_IO_SPARE_0_2rst_i135PA0GPIO_OutputActive high
FPGA_IO_SPARE_0_0mode_i137PB11GPIO_OutputFPGA operation mode
DSPI_CSvalid_o75PB6GPIO_OutputData/Transfer Valid
FPGA_IO_SPARE_1_1miso_i101PC2SPI1_MISO
FPGA_IO_SPARE_1_0mosi_i99PC3SPI1_MOSI
I2C_O_SDAcs_n79PB9SPI1_NSS
FPGA_IO_SPARE_0_1sclk_i136PB10SPI1_SCK
FPGA_IO_SPARE_2_049PA7
FPGA_IO_SPARE_2_148PA6
FPGA_IO_SPARE_2_247PA5
FPGA_IO_SPARE_2_345PA4