diff --git a/src/drivers/chips/ws63/porting/spi/spi_porting.c b/src/drivers/chips/ws63/porting/spi/spi_porting.c index 8d3a009de1ee71368a24693d11a73a62dfc329ac..ebd51ce657b95ab79bae2cc44d74c0320e88765f 100755 --- a/src/drivers/chips/ws63/porting/spi/spi_porting.c +++ b/src/drivers/chips/ws63/porting/spi/spi_porting.c @@ -267,7 +267,7 @@ uintptr_t spi_porting_base_addr_get(spi_bus_t index) uint32_t spi_porting_max_slave_select_get(spi_bus_t bus) { unused(bus); - return (uint32_t)SPI_SLAVE0; + return (uint32_t)SPI_SLAVE_MAX_NUM; } void spi_porting_set_device_mode(spi_bus_t bus, spi_mode_t mode) diff --git a/src/drivers/chips/ws63/porting/spi/spi_porting.h b/src/drivers/chips/ws63/porting/spi/spi_porting.h index 5b6f811c6ee9f7ccb25a96b8c35b45f229b888e6..4f252c4ec5c2343e856d365e966f10d374f3f98e 100755 --- a/src/drivers/chips/ws63/porting/spi/spi_porting.h +++ b/src/drivers/chips/ws63/porting/spi/spi_porting.h @@ -64,10 +64,10 @@ typedef enum spi_mode { * @brief SPI slave select. */ typedef enum spi_slave { - SPI_SLAVE0 = 0, /*!< SPI Slave index 0. */ + SPI_SLAVE0 = 1, /*!< SPI Slave index 0. */ SPI_SLAVE1, /*!< SPI Slave index 1. */ SPI_SLAVE_MAX_NUM, - SPI_SLAVE_NONE = SPI_SLAVE_MAX_NUM + SPI_SLAVE_NONE = 0 } spi_slave_t; /** diff --git a/src/drivers/drivers/hal/spi/v151/hal_spi_v151.c b/src/drivers/drivers/hal/spi/v151/hal_spi_v151.c index 25b85d3cf3c3dd7fd3a696a5b8e9b3f1ddef052e..10c4948cf328d35f94c4c362cec47892d22042d3 100755 --- a/src/drivers/drivers/hal/spi/v151/hal_spi_v151.c +++ b/src/drivers/drivers/hal/spi/v151/hal_spi_v151.c @@ -109,7 +109,7 @@ static bool hal_spi_is_attr_valid(spi_bus_t bus, const hal_spi_attr_t *attr, con /* Only SPI master need to select slave and set clock. */ if (attr->is_slave == 0) { - if (attr->slave_num > spi_porting_max_slave_select_get(bus) + 1) { + if (attr->slave_num >= spi_porting_max_slave_select_get(bus)) { return false; } if (hal_spi_is_attr_freq_valid(attr->freq_mhz, spi_frame_format) != true) { @@ -619,7 +619,7 @@ static errcode_t hal_spi_ctrl_select_slave(spi_bus_t bus, hal_spi_ctrl_id_t id, return ERRCODE_SPI_TIMEOUT; } uint32_t slave = (uint32_t)param; - hal_spi_ser_set_ser(bus, slave); + hal_spi_ser_set_ser(bus, (slave == 0) ? 0 : bit(slave - 1)); g_hal_spi_attrs[bus].slave_num = slave + 1; return ERRCODE_SUCC;