@@ -90,7 +90,19 @@ void spi_get_capabilities(PinName ssel, bool slave, spi_capabilities_t *cap)
90
90
} else {
91
91
cap -> minimum_frequency = 200000 ; // 200 kHz
92
92
cap -> maximum_frequency = 2000000 ; // 2 MHz
93
+ #if defined(TARGET_STM32F0 ) || defined(TARGET_STM32F3 ) || defined(TARGET_STM32F7 ) || \
94
+ defined(TARGET_STM32G0 ) || defined(TARGET_STM32G4 ) || defined(TARGET_STM32L4 ) || \
95
+ defined(TARGET_STM32L5 ) || defined(TARGET_STM32WB )
96
+ cap -> word_length = 0x0000FFF8 ; // 4 through 16 bit symbols, inclusive
97
+ #elif defined(TARGET_STM32H7 )
98
+ cap -> word_length = 0xFFFFFFF8 ; // 4 through 32 bit symbols, inclusive
99
+ #elif defined(TARGET_STM32F1 ) || defined(TARGET_STM32F2 ) || defined(TARGET_STM32F4 ) || \
100
+ defined(TARGET_STM32L0 ) || defined(TARGET_STM32L1 )
93
101
cap -> word_length = 0x00008080 ; // 8 and 16 bit symbols
102
+ #else
103
+ #error No valid target for this. Update in the appropriate portion above.
104
+ #endif
105
+
94
106
cap -> support_slave_mode = false; // to be determined later based on ssel
95
107
cap -> hw_cs_handle = false; // to be determined later based on ssel
96
108
cap -> slave_delay_between_symbols_ns = 0 ; // irrelevant in master mode
@@ -384,7 +396,108 @@ void spi_format(spi_t *obj, int bits, int mode, int slave)
384
396
DEBUG_PRINTF ("spi_format, bits:%d, mode:%d, slave?:%d\r\n" , bits , mode , slave );
385
397
386
398
// Save new values
387
- handle -> Init .DataSize = (bits == 16 ) ? SPI_DATASIZE_16BIT : SPI_DATASIZE_8BIT ;
399
+ uint32_t DataSize ;
400
+ switch (bits ) {
401
+ #if defined(TARGET_STM32F0 ) || defined(TARGET_STM32F3 ) || defined(TARGET_STM32F7 ) || \
402
+ defined(TARGET_STM32G0 ) || defined(TARGET_STM32G4 ) || defined(TARGET_STM32L4 ) || \
403
+ defined(TARGET_STM32L5 ) || defined(TARGET_STM32WB ) || defined(TARGET_STM32H7 )
404
+ case 4 :
405
+ DataSize = SPI_DATASIZE_4BIT ;
406
+ break ;
407
+ case 5 :
408
+ DataSize = SPI_DATASIZE_5BIT ;
409
+ break ;
410
+ case 6 :
411
+ DataSize = SPI_DATASIZE_6BIT ;
412
+ break ;
413
+ case 7 :
414
+ DataSize = SPI_DATASIZE_7BIT ;
415
+ break ;
416
+ case 9 :
417
+ DataSize = SPI_DATASIZE_9BIT ;
418
+ break ;
419
+ case 10 :
420
+ DataSize = SPI_DATASIZE_10BIT ;
421
+ break ;
422
+ case 11 :
423
+ DataSize = SPI_DATASIZE_11BIT ;
424
+ break ;
425
+ case 12 :
426
+ DataSize = SPI_DATASIZE_12BIT ;
427
+ break ;
428
+ case 13 :
429
+ DataSize = SPI_DATASIZE_13BIT ;
430
+ break ;
431
+ case 14 :
432
+ DataSize = SPI_DATASIZE_14BIT ;
433
+ break ;
434
+ case 15 :
435
+ DataSize = SPI_DATASIZE_15BIT ;
436
+ break ;
437
+ #if defined(TARGET_STM32H7 )
438
+ case 17 :
439
+ DataSize = SPI_DATASIZE_17BIT ;
440
+ break ;
441
+ case 18 :
442
+ DataSize = SPI_DATASIZE_18BIT ;
443
+ break ;
444
+ case 19 :
445
+ DataSize = SPI_DATASIZE_19BIT ;
446
+ break ;
447
+ case 20 :
448
+ DataSize = SPI_DATASIZE_20BIT ;
449
+ break ;
450
+ case 21 :
451
+ DataSize = SPI_DATASIZE_21BIT ;
452
+ break ;
453
+ case 22 :
454
+ DataSize = SPI_DATASIZE_22BIT ;
455
+ break ;
456
+ case 23 :
457
+ DataSize = SPI_DATASIZE_23BIT ;
458
+ break ;
459
+ case 24 :
460
+ DataSize = SPI_DATASIZE_24BIT ;
461
+ break ;
462
+ case 25 :
463
+ DataSize = SPI_DATASIZE_25BIT ;
464
+ break ;
465
+ case 26 :
466
+ DataSize = SPI_DATASIZE_26BIT ;
467
+ break ;
468
+ case 27 :
469
+ DataSize = SPI_DATASIZE_27BIT ;
470
+ break ;
471
+ case 28 :
472
+ DataSize = SPI_DATASIZE_28BIT ;
473
+ break ;
474
+ case 29 :
475
+ DataSize = SPI_DATASIZE_29BIT ;
476
+ break ;
477
+ case 30 :
478
+ DataSize = SPI_DATASIZE_30BIT ;
479
+ break ;
480
+ case 31 :
481
+ DataSize = SPI_DATASIZE_31BIT ;
482
+ break ;
483
+ case 32 :
484
+ DataSize = SPI_DATASIZE_32BIT ;
485
+ break ;
486
+ #endif
487
+ #elif !defined(TARGET_STM32F1 ) && !defined(TARGET_STM32F2 ) && !defined(TARGET_STM32F4 ) && \
488
+ !defined(TARGET_STM32L0 ) && defined(TARGET_STM32L1 )
489
+ #error No valid target for this. Update in the appropriate portion above.
490
+ #endif
491
+ case 16 :
492
+ DataSize = SPI_DATASIZE_16BIT ;
493
+ break ;
494
+ // 8 bits is the default for anything not found before
495
+ default :
496
+ DataSize = SPI_DATASIZE_8BIT ;
497
+ break ;
498
+ }
499
+
500
+ handle -> Init .DataSize = DataSize ;
388
501
389
502
switch (mode ) {
390
503
case 0 :
0 commit comments