Skip to content

Commit b97dab4

Browse files
committed
Remove default pins from SPI HAL
1 parent d2993fd commit b97dab4

File tree

2 files changed

+19
-248
lines changed

2 files changed

+19
-248
lines changed

cores/esp32/esp32-hal-spi.c

+8-244
Original file line numberDiff line numberDiff line change
@@ -198,46 +198,16 @@ static bool spiDetachBus(void * bus){
198198

199199
bool spiAttachSCK(spi_t * spi, int8_t sck)
200200
{
201-
if(!spi) {
201+
if(!spi || sck < 0) {
202202
return false;
203203
}
204-
if(sck < 0) {
205-
#if CONFIG_IDF_TARGET_ESP32S2
206-
if(spi->num == FSPI) {
207-
sck = 36;
208-
} else {
209-
log_e("HSPI Does not have default pins on ESP32S2!");
210-
return false;
211-
}
212-
#elif CONFIG_IDF_TARGET_ESP32S3
213-
if(spi->num == FSPI) {
214-
sck = 12;
215-
} else {
216-
log_e("HSPI Does not have default pins on ESP32S3!");
217-
return false;
218-
}
219-
#elif CONFIG_IDF_TARGET_ESP32
220-
if(spi->num == HSPI) {
221-
sck = 14;
222-
} else if(spi->num == VSPI) {
223-
sck = 18;
224-
} else {
225-
sck = 6;
226-
}
227-
#elif CONFIG_IDF_TARGET_ESP32C3
228-
log_e("SPI Does not have default pins on ESP32C3!");
229-
return false;
230-
#endif
231-
}
232204
void * bus = perimanGetPinBus(sck, ESP32_BUS_TYPE_SPI_MASTER);
233205
if(bus != NULL && !perimanSetPinBus(sck, ESP32_BUS_TYPE_INIT, NULL)){
234206
return false;
235207
}
236-
237208
pinMode(sck, OUTPUT);
238209
pinMatrixOutAttach(sck, SPI_CLK_IDX(spi->num), false, false);
239210
spi->sck = sck;
240-
241211
if(!perimanSetPinBus(sck, ESP32_BUS_TYPE_SPI_MASTER, (void *)(spi->num+1))){
242212
spiDetachBus((void *)(spi->num+1));
243213
log_e("Failed to set pin bus to SPI for pin %d", sck);
@@ -248,48 +218,18 @@ bool spiAttachSCK(spi_t * spi, int8_t sck)
248218

249219
bool spiAttachMISO(spi_t * spi, int8_t miso)
250220
{
251-
if(!spi) {
221+
if(!spi || miso < 0) {
252222
return false;
253223
}
254-
if(miso < 0) {
255-
#if CONFIG_IDF_TARGET_ESP32S2
256-
if(spi->num == FSPI) {
257-
miso = 37;
258-
} else {
259-
log_e("HSPI Does not have default pins on ESP32S2!");
260-
return false;
261-
}
262-
#elif CONFIG_IDF_TARGET_ESP32S3
263-
if(spi->num == FSPI) {
264-
miso = 13;
265-
} else {
266-
log_e("HSPI Does not have default pins on ESP32S3!");
267-
return false;
268-
}
269-
#elif CONFIG_IDF_TARGET_ESP32
270-
if(spi->num == HSPI) {
271-
miso = 12;
272-
} else if(spi->num == VSPI) {
273-
miso = 19;
274-
} else {
275-
miso = 7;
276-
}
277-
#elif CONFIG_IDF_TARGET_ESP32C3
278-
log_e("SPI Does not have default pins on ESP32C3!");
279-
return false;
280-
#endif
281-
}
282224
void * bus = perimanGetPinBus(miso, ESP32_BUS_TYPE_SPI_MASTER);
283225
if(bus != NULL && !perimanSetPinBus(miso, ESP32_BUS_TYPE_INIT, NULL)){
284226
return false;
285227
}
286-
287228
SPI_MUTEX_LOCK();
288229
pinMode(miso, INPUT);
289230
pinMatrixInAttach(miso, SPI_MISO_IDX(spi->num), false);
290231
spi->miso = miso;
291232
SPI_MUTEX_UNLOCK();
292-
293233
if(!perimanSetPinBus(miso, ESP32_BUS_TYPE_SPI_MASTER, (void *)(spi->num+1))){
294234
spiDetachBus((void *)(spi->num+1));
295235
log_e("Failed to set pin bus to SPI for pin %d", miso);
@@ -300,46 +240,16 @@ bool spiAttachMISO(spi_t * spi, int8_t miso)
300240

301241
bool spiAttachMOSI(spi_t * spi, int8_t mosi)
302242
{
303-
if(!spi) {
243+
if(!spi || mosi < 0) {
304244
return false;
305245
}
306-
if(mosi < 0) {
307-
#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
308-
if(spi->num == FSPI) {
309-
mosi = 35;
310-
} else {
311-
log_e("HSPI Does not have default pins on ESP32S2!");
312-
return false;
313-
}
314-
#elif CONFIG_IDF_TARGET_ESP32S3
315-
if(spi->num == FSPI) {
316-
mosi = 11;
317-
} else {
318-
log_e("HSPI Does not have default pins on ESP32S3!");
319-
return false;
320-
}
321-
#elif CONFIG_IDF_TARGET_ESP32
322-
if(spi->num == HSPI) {
323-
mosi = 13;
324-
} else if(spi->num == VSPI) {
325-
mosi = 23;
326-
} else {
327-
mosi = 8;
328-
}
329-
#elif CONFIG_IDF_TARGET_ESP32C3
330-
log_e("SPI Does not have default pins on ESP32C3!");
331-
return false;
332-
#endif
333-
}
334246
void * bus = perimanGetPinBus(mosi, ESP32_BUS_TYPE_SPI_MASTER);
335247
if(bus != NULL && !perimanSetPinBus(mosi, ESP32_BUS_TYPE_INIT, NULL)){
336248
return false;
337249
}
338-
339250
pinMode(mosi, OUTPUT);
340251
pinMatrixOutAttach(mosi, SPI_MOSI_IDX(spi->num), false, false);
341252
spi->mosi = mosi;
342-
343253
if(!perimanSetPinBus(mosi, ESP32_BUS_TYPE_SPI_MASTER, (void *)(spi->num+1))){
344254
spiDetachBus((void *)(spi->num+1));
345255
log_e("Failed to set pin bus to SPI for pin %d", mosi);
@@ -350,36 +260,8 @@ bool spiAttachMOSI(spi_t * spi, int8_t mosi)
350260

351261
bool spiDetachSCK(spi_t * spi, int8_t sck)
352262
{
353-
if(!spi) {
354-
return false;
355-
}
356-
if(sck < 0) {
357-
#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
358-
if(spi->num == FSPI) {
359-
sck = 36;
360-
} else {
361-
log_e("HSPI Does not have default pins on ESP32S2!");
362-
return false;
363-
}
364-
#elif CONFIG_IDF_TARGET_ESP32S3
365-
if(spi->num == FSPI) {
366-
sck = 12;
367-
} else {
368-
log_e("HSPI Does not have default pins on ESP32S3!");
369-
return false;
370-
}
371-
#elif CONFIG_IDF_TARGET_ESP32
372-
if(spi->num == HSPI) {
373-
sck = 14;
374-
} else if(spi->num == VSPI) {
375-
sck = 18;
376-
} else {
377-
sck = 6;
378-
}
379-
#elif CONFIG_IDF_TARGET_ESP32C3
380-
log_e("SPI Does not have default pins on ESP32C3!");
263+
if(!spi || sck < 0) {
381264
return false;
382-
#endif
383265
}
384266
pinMatrixOutDetach(sck, false, false);
385267
spi->sck = -1;
@@ -389,37 +271,9 @@ bool spiDetachSCK(spi_t * spi, int8_t sck)
389271

390272
bool spiDetachMISO(spi_t * spi, int8_t miso)
391273
{
392-
if(!spi) {
274+
if(!spi || miso < 0) {
393275
return false;
394276
}
395-
if(miso < 0) {
396-
#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
397-
if(spi->num == FSPI) {
398-
miso = 37;
399-
} else {
400-
log_e("HSPI Does not have default pins on ESP32S2!");
401-
return false;
402-
}
403-
#elif CONFIG_IDF_TARGET_ESP32S3
404-
if(spi->num == FSPI) {
405-
miso = 13;
406-
} else {
407-
log_e("HSPI Does not have default pins on ESP32S3!");
408-
return false;
409-
}
410-
#elif CONFIG_IDF_TARGET_ESP32
411-
if(spi->num == HSPI) {
412-
miso = 12;
413-
} else if(spi->num == VSPI) {
414-
miso = 19;
415-
} else {
416-
miso = 7;
417-
}
418-
#elif CONFIG_IDF_TARGET_ESP32C3
419-
log_e("SPI Does not have default pins on ESP32C3!");
420-
return false;
421-
#endif
422-
}
423277
pinMatrixInDetach(SPI_MISO_IDX(spi->num), false, false);
424278
spi->miso = -1;
425279
perimanSetPinBus(miso, ESP32_BUS_TYPE_INIT, NULL);
@@ -428,37 +282,9 @@ bool spiDetachMISO(spi_t * spi, int8_t miso)
428282

429283
bool spiDetachMOSI(spi_t * spi, int8_t mosi)
430284
{
431-
if(!spi) {
285+
if(!spi || mosi < 0) {
432286
return false;
433287
}
434-
if(mosi < 0) {
435-
#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
436-
if(spi->num == FSPI) {
437-
mosi = 35;
438-
} else {
439-
log_e("HSPI Does not have default pins on ESP32S2!");
440-
return false;
441-
}
442-
#elif CONFIG_IDF_TARGET_ESP32S3
443-
if(spi->num == FSPI) {
444-
mosi = 11;
445-
} else {
446-
log_e("HSPI Does not have default pins on ESP32S3!");
447-
return false;
448-
}
449-
#elif CONFIG_IDF_TARGET_ESP32
450-
if(spi->num == HSPI) {
451-
mosi = 13;
452-
} else if(spi->num == VSPI) {
453-
mosi = 23;
454-
} else {
455-
mosi = 8;
456-
}
457-
#elif CONFIG_IDF_TARGET_ESP32C3
458-
log_e("SPI Does not have default pins on ESP32C3!");
459-
return false;
460-
#endif
461-
}
462288
pinMatrixOutDetach(mosi, false, false);
463289
spi->mosi = -1;
464290
perimanSetPinBus(mosi, ESP32_BUS_TYPE_INIT, NULL);
@@ -467,51 +293,17 @@ bool spiDetachMOSI(spi_t * spi, int8_t mosi)
467293

468294
bool spiAttachSS(spi_t * spi, uint8_t cs_num, int8_t ss)
469295
{
470-
if(!spi) {
471-
return false;
472-
}
473-
if(cs_num > 2) {
296+
if(!spi || ss < 0 || cs_num > 2) {
474297
return false;
475298
}
476-
if(ss < 0) {
477-
cs_num = 0;
478-
#if CONFIG_IDF_TARGET_ESP32S2
479-
if(spi->num == FSPI) {
480-
ss = 34;
481-
} else {
482-
log_e("HSPI Does not have default pins on ESP32S2!");
483-
return false;
484-
}
485-
#elif CONFIG_IDF_TARGET_ESP32S3
486-
if(spi->num == FSPI) {
487-
ss = 10;
488-
} else {
489-
log_e("HSPI Does not have default pins on ESP32S3!");
490-
return false;
491-
}
492-
#elif CONFIG_IDF_TARGET_ESP32
493-
if(spi->num == HSPI) {
494-
ss = 15;
495-
} else if(spi->num == VSPI) {
496-
ss = 5;
497-
} else {
498-
ss = 11;
499-
}
500-
#elif CONFIG_IDF_TARGET_ESP32C3
501-
log_e("SPI Does not have default pins on ESP32C3!");
502-
return false;
503-
#endif
504-
}
505299
void * bus = perimanGetPinBus(ss, ESP32_BUS_TYPE_SPI_MASTER);
506300
if(bus != NULL && !perimanSetPinBus(ss, ESP32_BUS_TYPE_INIT, NULL)){
507301
return false;
508302
}
509-
510303
pinMode(ss, OUTPUT);
511304
pinMatrixOutAttach(ss, SPI_SS_IDX(spi->num, cs_num), false, false);
512305
spiEnableSSPins(spi, (1 << cs_num));
513306
spi->ss = ss;
514-
515307
if(!perimanSetPinBus(ss, ESP32_BUS_TYPE_SPI_MASTER, (void *)(spi->num+1))){
516308
spiDetachBus((void *)(spi->num+1));
517309
log_e("Failed to set pin bus to SPI for pin %d", ss);
@@ -522,36 +314,8 @@ bool spiAttachSS(spi_t * spi, uint8_t cs_num, int8_t ss)
522314

523315
bool spiDetachSS(spi_t * spi, int8_t ss)
524316
{
525-
if(!spi) {
526-
return false;
527-
}
528-
if(ss < 0) {
529-
#if CONFIG_IDF_TARGET_ESP32S2
530-
if(spi->num == FSPI) {
531-
ss = 34;
532-
} else {
533-
log_e("HSPI Does not have default pins on ESP32S2!");
534-
return false;
535-
}
536-
#elif CONFIG_IDF_TARGET_ESP32S3
537-
if(spi->num == FSPI) {
538-
ss = 10;
539-
} else {
540-
log_e("HSPI Does not have default pins on ESP32S3!");
541-
return false;
542-
}
543-
#elif CONFIG_IDF_TARGET_ESP32
544-
if(spi->num == HSPI) {
545-
ss = 15;
546-
} else if(spi->num == VSPI) {
547-
ss = 5;
548-
} else {
549-
ss = 11;
550-
}
551-
#elif CONFIG_IDF_TARGET_ESP32C3
552-
log_e("SPI Does not have default pins on ESP32C3!");
317+
if(!spi || ss < 0) {
553318
return false;
554-
#endif
555319
}
556320
pinMatrixOutDetach(ss, false, false);
557321
spi->ss = -1;

libraries/SPI/src/SPI.cpp

+11-4
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ void SPIClass::begin(int8_t sck, int8_t miso, int8_t mosi, int8_t ss)
107107
}
108108

109109
if(!spiAttachSCK(_spi, _sck)){ goto err; }
110-
if(!spiAttachMISO(_spi, _miso)){ goto err; }
111-
if(!spiAttachMOSI(_spi, _mosi)){ goto err; }
110+
if(_miso >= 0 && !spiAttachMISO(_spi, _miso)){ goto err; }
111+
if(_mosi >= 0 && !spiAttachMOSI(_spi, _mosi)){ goto err; }
112112
return;
113113

114114
err:
@@ -122,15 +122,22 @@ void SPIClass::end()
122122
return;
123123
}
124124
spiDetachSCK(_spi, _sck);
125-
spiDetachMISO(_spi, _miso);
126-
spiDetachMOSI(_spi, _mosi);
125+
if(_miso >= 0){
126+
spiDetachMISO(_spi, _miso);
127+
}
128+
if(_mosi >= 0){
129+
spiDetachMOSI(_spi, _mosi);
130+
}
127131
setHwCs(false);
128132
spiStopBus(_spi);
129133
_spi = NULL;
130134
}
131135

132136
void SPIClass::setHwCs(bool use)
133137
{
138+
if(_ss < 0){
139+
return;
140+
}
134141
if(use && !_use_hw_ss) {
135142
spiAttachSS(_spi, 0, _ss);
136143
spiSSEnable(_spi);

0 commit comments

Comments
 (0)