Skip to content

Commit 94ca3f5

Browse files
committed
Enable CS "active-high" device support
Reference adafruit/Adafruit_CircuitPython_BusDevice#71 Add a new parameter cs_active_value for devices that require CS to use "active high" logic. Update mpconfigboard.mk to disable pyb_nano_v2 from core build as its flash is too small now.
1 parent 9689022 commit 94ca3f5

File tree

5 files changed

+11
-6
lines changed

5 files changed

+11
-6
lines changed

ports/stm/boards/pyb_nano_v2/mpconfigboard.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,4 @@ CIRCUITPY_KEYPAD = 0
2020
CIRCUITPY_MIDI = 0
2121
CIRCUITPY_MSGPACK = 0
2222
CIRCUITPY_BITMAPTOOLS = 0
23+
CIRCUITPY_BUSDEVICE = 0

shared-bindings/adafruit_bus_device/SPIDevice.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
//|
4949
//| :param ~busio.SPI spi: The SPI bus the device is on
5050
//| :param ~digitalio.DigitalInOut chip_select: The chip select pin object that implements the DigitalInOut API.
51+
//| :param bool cs_active_value: Set to true if your device requires CS to be active high. Defaults to false.
5152
//| :param int extra_clocks: The minimum number of clock cycles to cycle the bus after CS is high. (Used for SD cards.)
5253
//|
5354
//| Example::
@@ -73,10 +74,11 @@
7374
STATIC mp_obj_t adafruit_bus_device_spidevice_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
7475
adafruit_bus_device_spidevice_obj_t *self = m_new_obj(adafruit_bus_device_spidevice_obj_t);
7576
self->base.type = &adafruit_bus_device_spidevice_type;
76-
enum { ARG_spi, ARG_chip_select, ARG_baudrate, ARG_polarity, ARG_phase, ARG_extra_clocks };
77+
enum { ARG_spi, ARG_chip_select, ARG_cs_active_value, ARG_baudrate, ARG_polarity, ARG_phase, ARG_extra_clocks };
7778
static const mp_arg_t allowed_args[] = {
7879
{ MP_QSTR_spi, MP_ARG_REQUIRED | MP_ARG_OBJ },
7980
{ MP_QSTR_chip_select, MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
81+
{ MP_QSTR_cs_active_value, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = false} },
8082
{ MP_QSTR_baudrate, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 100000} },
8183
{ MP_QSTR_polarity, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
8284
{ MP_QSTR_phase, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
@@ -87,7 +89,7 @@ STATIC mp_obj_t adafruit_bus_device_spidevice_make_new(const mp_obj_type_t *type
8789

8890
busio_spi_obj_t *spi = args[ARG_spi].u_obj;
8991

90-
common_hal_adafruit_bus_device_spidevice_construct(MP_OBJ_TO_PTR(self), spi, args[ARG_chip_select].u_obj, args[ARG_baudrate].u_int, args[ARG_polarity].u_int,
92+
common_hal_adafruit_bus_device_spidevice_construct(MP_OBJ_TO_PTR(self), spi, args[ARG_chip_select].u_obj, args[ARG_cs_active_value].u_bool, args[ARG_baudrate].u_int, args[ARG_polarity].u_int,
9193
args[ARG_phase].u_int, args[ARG_extra_clocks].u_int);
9294

9395
if (args[ARG_chip_select].u_obj != MP_OBJ_NULL) {

shared-bindings/adafruit_bus_device/SPIDevice.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ extern const mp_obj_type_t adafruit_bus_device_spidevice_type;
4343

4444
// Initializes the hardware peripheral.
4545
extern void common_hal_adafruit_bus_device_spidevice_construct(adafruit_bus_device_spidevice_obj_t *self, busio_spi_obj_t *spi, digitalio_digitalinout_obj_t *cs,
46-
uint32_t baudrate, uint8_t polarity, uint8_t phase, uint8_t extra_clocks);
46+
bool cs_active_value, uint32_t baudrate, uint8_t polarity, uint8_t phase, uint8_t extra_clocks);
4747
extern mp_obj_t common_hal_adafruit_bus_device_spidevice_enter(adafruit_bus_device_spidevice_obj_t *self);
4848
extern void common_hal_adafruit_bus_device_spidevice_exit(adafruit_bus_device_spidevice_obj_t *self);
4949

shared-module/adafruit_bus_device/SPIDevice.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,14 @@
3232
#include "py/runtime.h"
3333

3434
void common_hal_adafruit_bus_device_spidevice_construct(adafruit_bus_device_spidevice_obj_t *self, busio_spi_obj_t *spi, digitalio_digitalinout_obj_t *cs,
35-
uint32_t baudrate, uint8_t polarity, uint8_t phase, uint8_t extra_clocks) {
35+
bool cs_active_value, uint32_t baudrate, uint8_t polarity, uint8_t phase, uint8_t extra_clocks) {
3636
self->spi = spi;
3737
self->baudrate = baudrate;
3838
self->polarity = polarity;
3939
self->phase = phase;
4040
self->extra_clocks = extra_clocks;
4141
self->chip_select = cs;
42+
self->cs_active_value = cs_active_value;
4243
}
4344

4445
mp_obj_t common_hal_adafruit_bus_device_spidevice_enter(adafruit_bus_device_spidevice_obj_t *self) {
@@ -66,14 +67,14 @@ mp_obj_t common_hal_adafruit_bus_device_spidevice_enter(adafruit_bus_device_spid
6667
}
6768

6869
if (self->chip_select != MP_OBJ_NULL) {
69-
common_hal_digitalio_digitalinout_set_value(MP_OBJ_TO_PTR(self->chip_select), false);
70+
common_hal_digitalio_digitalinout_set_value(MP_OBJ_TO_PTR(self->chip_select), self->cs_active_value);
7071
}
7172
return self->spi;
7273
}
7374

7475
void common_hal_adafruit_bus_device_spidevice_exit(adafruit_bus_device_spidevice_obj_t *self) {
7576
if (self->chip_select != MP_OBJ_NULL) {
76-
common_hal_digitalio_digitalinout_set_value(MP_OBJ_TO_PTR(self->chip_select), true);
77+
common_hal_digitalio_digitalinout_set_value(MP_OBJ_TO_PTR(self->chip_select), !(self->cs_active_value));
7778
}
7879

7980
if (self->extra_clocks > 0) {

shared-module/adafruit_bus_device/SPIDevice.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ typedef struct {
3939
uint8_t phase;
4040
uint8_t extra_clocks;
4141
digitalio_digitalinout_obj_t *chip_select;
42+
bool cs_active_value;
4243
} adafruit_bus_device_spidevice_obj_t;
4344

4445
#endif // MICROPY_INCLUDED_ATMEL_SAMD_SHARED_MODULE_BUSDEVICE_SPIDEVICE_H

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy