The ``reset`` and ``read`` pins should be optional, but the espressif
code had several places where it assumed they are not, and a bug that
caused a crash on ``release_displays`` if they were made optional.
The bug was caused by the fields for storing pin numbers being set
to ``NO_PIN``, which has value of -1, while the fields have type
``uint8_t``. That set the actual value to 255, and a subsequent
comparison to ``NO_PIN`` returned false.
This allows board code to override the default pull up reset state.
It is useful for pins that are already externally connected, pulled
or otherwise used by the board.
Fixes#5931
This makes it easier to blanket never reset flash and USB pins. It
also allows us to set a custom state after reset. The first case
is for the double tap reset that needs to be pulled low.
Fixes#5893
This tweaks the RMT timing to better match the 1/3 and 2/3 of 800khz
guideline for timing. It also ensures a delay of 300 microseconds
with the line low before reset.
Pin reset is now changed to the IDF default which pulls the pin up
rather than CircuitPython's old behavior of floating the pin.
Fixes#5679
All 3 micros we care about (S2, S3, C3) state in the documentation
that DMA channel can be specified as SPI_DMA_CH_AUTO.
Specifying a specific DMA channel explicitly doesn't _ever_ work on
ESP32-S3, so no SPI bus could be used.
Testing performed: On the ESP32-S3-DevKitC, used neopixel_spi to
turn the onboard neopixel red, green, and blue
- update esp-idf to v4.4
- add esp32s3 support
- add analogio on esp32c3
- disable rgbmatrix on all espressif soc
Co-authored-by: Scott Shawcroft <scott@adafruit.com>
Co-authored-by: Seon Rozenblum <seon@unexpectedmaker.com>
This targets the 64-bit CPU Raspberry Pis. The BCM2711 on the Pi 4
and the BCM2837 on the Pi 3 and Zero 2W. There are 64-bit fixes
outside of the ports directory for it.
There are a couple other cleanups that were incidental:
* Use const mcu_pin_obj_t instead of omitting the const. The structs
themselves are const because they are in ROM.
* Use PTR <-> OBJ conversions in more places. They were found when
mp_obj_t was set to an integer type rather than pointer.
* Optimize submodule checkout because the Pi submodules are heavy
and unnecessary for the vast majority of builds.
Fixes#4314