enable H7 spi (#2391)

* enable features

* move MMC SPI config to port

* correct word length

* related cleanup

* doesn't need nocache

* include

* enable that
This commit is contained in:
Matthew Kennedy 2021-02-24 03:14:21 -10:00 committed by GitHub
parent deb285825e
commit 392a7539be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 68 additions and 37 deletions

View File

@ -7,8 +7,6 @@ echo "Entering $SCRIPT_NAME"
export PROJECT_BOARD=nucleo_h743
export PROJECT_CPU=ARCH_STM32H7
export USE_LIS302=no
export USE_FATFS=no
export EXTRA_PARAMS="-DDUMMY \
-DEFI_INJECTOR_PIN3=GPIO_UNASSIGNED \
-DFIRMWARE_ID=\\\"nucleoH743\\\" \

View File

@ -150,8 +150,7 @@
* MCP42010 digital potentiometer support. This could be useful if you are stimulating some
* stock ECU
*/
//#define EFI_POTENTIOMETER FALSE
#define EFI_POTENTIOMETER TRUE
#define EFI_POTENTIOMETER FALSE
#ifndef BOARD_TLE6240_COUNT
#define BOARD_TLE6240_COUNT 1

View File

@ -5,9 +5,6 @@
#undef EFI_INTERNAL_FLASH
#define EFI_INTERNAL_FLASH FALSE
#undef EFI_FILE_LOGGING
#define EFI_FILE_LOGGING FALSE
#undef EFI_MC33816
#define EFI_MC33816 FALSE

View File

@ -74,41 +74,17 @@ spi_device_e mmcSpiDevice = SPI_NONE;
#else
USBDriver *usb_driver = &USBD1;
#endif
extern const USBConfig msdusbcfg;
#endif /* HAL_USE_USB_MSD */
// TODO: this is NO_CACHE because of https://github.com/rusefi/rusefi/issues/2356
static NO_CACHE THD_WORKING_AREA(mmcThreadStack,3 * UTILITY_THREAD_STACK_SIZE); // MMC monitor thread
static THD_WORKING_AREA(mmcThreadStack, 3 * UTILITY_THREAD_STACK_SIZE); // MMC monitor thread
/**
* MMC driver instance.
*/
MMCDriver MMCD1;
// SD cards are good up to 25MHz in "slow" mode, and 50MHz in "fast" mode
// 168mhz F4:
// Slow mode is 10.5 or 5.25 MHz, depending on which SPI device
// Fast mode is 42 or 21 MHz
// 216mhz F7:
// Slow mode is 13.5 or 6.75 MHz
// Fast mode is 54 or 27 MHz (technically out of spec, needs testing!)
static SPIConfig hs_spicfg = {
.circular = false,
.end_cb = NULL,
.ssport = NULL,
.sspad = 0,
.cr1 = SPI_BaudRatePrescaler_2,
.cr2 = 0};
static SPIConfig ls_spicfg = {
.circular = false,
.end_cb = NULL,
.ssport = NULL,
.sspad = 0,
.cr1 = SPI_BaudRatePrescaler_8,
.cr2 = 0};
/* MMC/SD over SPI driver configuration.*/
static MMCConfig mmccfg = { NULL, &ls_spicfg, &hs_spicfg };
static MMCConfig mmccfg = { NULL, &mmc_ls_spicfg, &mmc_hs_spicfg };
/**
* fatfs MMC/SPI
@ -382,8 +358,8 @@ static BaseBlockDevice* initializeMmcBlockDevice() {
efiAssert(OBD_PCM_Processor_Fault, mmcSpiDevice != SPI_NONE, "SD card enabled, but no SPI device configured!", nullptr);
// todo: reuse initSpiCs method?
hs_spicfg.ssport = ls_spicfg.ssport = getHwPort("mmc", CONFIG(sdCardCsPin));
hs_spicfg.sspad = ls_spicfg.sspad = getHwPin("mmc", CONFIG(sdCardCsPin));
mmc_hs_spicfg.ssport = mmc_ls_spicfg.ssport = getHwPort("mmc", CONFIG(sdCardCsPin));
mmc_hs_spicfg.sspad = mmc_ls_spicfg.sspad = getHwPin("mmc", CONFIG(sdCardCsPin));
mmccfg.spip = getSpiDevice(mmcSpiDevice);
// We think we have everything for the card, let's try to mount it!

View File

@ -37,6 +37,14 @@ void initSpiCs(SPIConfig *spiConfig, brain_pin_e csPin);
void turnOnSpi(spi_device_e device);
#endif // HAL_USE_SPI
// MMC Card
#if HAL_USE_MMC_SPI
// HS = max 50MHz SPI
extern SPIConfig mmc_hs_spicfg;
// LS = max 25MHz SPI
extern SPIConfig mmc_ls_spicfg;
#endif
// Hardware PWM
struct hardware_pwm {
static hardware_pwm* tryInitPin(const char* msg, brain_pin_e pin, float frequencyHz, float duty);

View File

@ -9,6 +9,7 @@
#include "engine_ptr.h"
#include "efi_gpio.h"
#include "expected.h"
#include "hardware.h"
#ifdef STM32F4XX
#include "stm32f4xx_hal_flash.h"
@ -692,6 +693,58 @@ void initSpiCs(SPIConfig *spiConfig, brain_pin_e csPin) {
efiSetPadMode("chip select", csPin, PAL_STM32_MODE_OUTPUT);
}
#ifdef STM32H7XX
// H7 SPI clock is set to 80MHz
// fast mode is 80mhz/2 = 40MHz
SPIConfig mmc_hs_spicfg = {
.circular = false,
.end_cb = NULL,
.ssport = NULL,
.sspad = 0,
.cfg1 = 7 // 8 bits per byte
| 0 /* MBR = 0, divider = 2 */,
.cfg2 = 0
};
// Slow mode is 80mhz/4 = 20MHz
SPIConfig mmc_ls_spicfg = {
.circular = false,
.end_cb = NULL,
.ssport = NULL,
.sspad = 0,
.cfg1 = 7 // 8 bits per byte
| SPI_CFG1_MBR_0 /* MBR = 001, divider = 4 */,
.cfg2 = 0
};
#else /* not STM32H7XX */
// SD cards are good up to 25MHz in "slow" mode, and 50MHz in "fast" mode
// 168mhz F4:
// Slow mode is 10.5 or 5.25 MHz, depending on which SPI device
// Fast mode is 42 or 21 MHz
// 216mhz F7:
// Slow mode is 13.5 or 6.75 MHz
// Fast mode is 54 or 27 MHz (technically out of spec, needs testing!)
SPIConfig mmc_hs_spicfg = {
.circular = false,
.end_cb = NULL,
.ssport = NULL,
.sspad = 0,
.cr1 = SPI_BaudRatePrescaler_2,
.cr2 = 0
};
SPIConfig mmc_ls_spicfg = {
.circular = false,
.end_cb = NULL,
.ssport = NULL,
.sspad = 0,
.cr1 = SPI_BaudRatePrescaler_8,
.cr2 = 0
};
#endif
#endif /* HAL_USE_SPI */
#if EFI_CAN_SUPPORT

View File

@ -114,7 +114,7 @@
* @brief Enables the MMC_SPI subsystem.
*/
#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
#define HAL_USE_MMC_SPI FALSE
#define HAL_USE_MMC_SPI TRUE
#endif
/**
@ -163,7 +163,7 @@
* @brief Enables the SPI subsystem.
*/
#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
#define HAL_USE_SPI FALSE
#define HAL_USE_SPI TRUE
#endif
/**