SPI Examples (Blocking API)
===========================
Overview
~~~~~~~~
The blocking SPI examples are available for both C and C++:
- C: ``examples/blocking_api/spi/c/``
- C++: ``examples/blocking_api/spi/cpp/``
These examples are intended for both **Supernova** and **Pulsar** USB host adapters.
Hardware Setup
~~~~~~~~~~~~~~
Required hardware:
1. One Binho **Supernova** or **Pulsar**
2. One **Binho mikroBUS Adapter Board**
3. One MikroE **Flash 6 Click** board (Winbond **W25Q128JV**, 128 M-bit NOR Flash)
Useful references:
- Binho mikroBUS Adapter Board:
`binho.io/test-measurement/products/usb-host-adapters/accessories/mikrobus-adapter-board/ `__
- Flash 6 Click:
`mikroe.com/flash-6-click `__
- W25Q128JV datasheet:
`download.mikroe.com/documents/datasheets/w25q128jv.pdf `__
What The SPI Examples Do
~~~~~~~~~~~~~~~~~~~~~~~~
1. Connect to the Binho adapter and read device information.
2. Set target voltage to ``3300 mV`` using the SPI voltage API:
- C: ``CosmicSDK_SpiSetBusVoltage``
- C++: ``spiSetBusVoltage``
3. Initialize the SPI controller on ``CS0``:
- Mode: ``SPI_MODE_0``
- Data width: ``8 bits``
- Bit order: ``MSB first``
- Frequency: ``10 MHz``
4. Read JEDEC ID with opcode ``0x9F`` and validate ``0xEF 0x40 0x18``.
5. Enable writes (``0x06``), then erase sector at address ``0x00 0x20 0x00`` (``0x20``).
6. Poll Status Register-1 (``0x05``) until WIP bit clears.
7. Enable writes again (``0x06``), then page program random data (1..256 bytes) with ``0x02``.
8. Poll Status Register-1 again until ready.
9. Read back memory (``0x03``) and verify read data matches written data.
Expected JEDEC ID Response
~~~~~~~~~~~~~~~~~~~~~~~~~~
The command ``0x9F`` requests manufacturer and device identification from the flash.
For W25Q128JV, the validated JEDEC bytes are:
- Manufacturer: ``0xEF`` (Winbond)
- Memory type: ``0x40``
- Capacity: ``0x18`` (128 M-bit)
Build and Run (SPI C/C++)
~~~~~~~~~~~~~~~~~~~~~~~~~
SPI example directories build binaries with different names:
- C (``examples/blocking_api/spi/c/``):
- ``example_c_dynamic``
- ``example_c_static``
- C++ (``examples/blocking_api/spi/cpp/``):
- ``example_cpp_dynamic``
- ``example_cpp_static``
See also:
- C API SPI reference: :doc:`../../api/c/spi`
- C++ blocking SPI reference: :doc:`../../api/cpp_blocking/spi`