FL-443 Move sd card to second spi (#271)
* sd card spi 2 fix, add spi mgr
This commit is contained in:
		@@ -88,6 +88,9 @@ uint8_t u8x8_hw_spi_stm32(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, void* arg_
 | 
				
			|||||||
        fuprintf(log, "[u8g2] start\n");
 | 
					        fuprintf(log, "[u8g2] start\n");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // TODO: SPI manager
 | 
				
			||||||
 | 
					        api_hal_spi_lock(&SPI_D);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // TODO change it to FuriRecord pin
 | 
					        // TODO change it to FuriRecord pin
 | 
				
			||||||
        HAL_GPIO_WritePin(DISPLAY_CS_GPIO_Port, DISPLAY_CS_Pin, GPIO_PIN_RESET);
 | 
					        HAL_GPIO_WritePin(DISPLAY_CS_GPIO_Port, DISPLAY_CS_Pin, GPIO_PIN_RESET);
 | 
				
			||||||
        asm("nop");
 | 
					        asm("nop");
 | 
				
			||||||
@@ -101,6 +104,10 @@ uint8_t u8x8_hw_spi_stm32(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, void* arg_
 | 
				
			|||||||
        asm("nop");
 | 
					        asm("nop");
 | 
				
			||||||
        // TODO change it to FuriRecord pin
 | 
					        // TODO change it to FuriRecord pin
 | 
				
			||||||
        HAL_GPIO_WritePin(DISPLAY_CS_GPIO_Port, DISPLAY_CS_Pin, GPIO_PIN_SET);
 | 
					        HAL_GPIO_WritePin(DISPLAY_CS_GPIO_Port, DISPLAY_CS_Pin, GPIO_PIN_SET);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // TODO: SPI manager
 | 
				
			||||||
 | 
					        api_hal_spi_unlock(&SPI_D);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,4 +14,5 @@ template <unsigned int N> struct STOP_EXTERNING_ME {};
 | 
				
			|||||||
#include "api-hal-vcp.h"
 | 
					#include "api-hal-vcp.h"
 | 
				
			||||||
#include "api-hal-uid.h"
 | 
					#include "api-hal-uid.h"
 | 
				
			||||||
#include "api-hal-bt.h"
 | 
					#include "api-hal-bt.h"
 | 
				
			||||||
 | 
					#include "api-hal-spi.h"
 | 
				
			||||||
#include "api-hal-flash.h"
 | 
					#include "api-hal-flash.h"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -155,7 +155,7 @@ void Error_Handler(void);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define SPI_R hspi1
 | 
					#define SPI_R hspi1
 | 
				
			||||||
#define SPI_D hspi2
 | 
					#define SPI_D hspi2
 | 
				
			||||||
#define SPI_SD_HANDLE SPI_R
 | 
					#define SPI_SD_HANDLE SPI_D
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern TIM_HandleTypeDef htim1;
 | 
					extern TIM_HandleTypeDef htim1;
 | 
				
			||||||
extern TIM_HandleTypeDef htim2;
 | 
					extern TIM_HandleTypeDef htim2;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -92,6 +92,7 @@
 | 
				
			|||||||
#include "string.h"
 | 
					#include "string.h"
 | 
				
			||||||
#include "stdio.h"
 | 
					#include "stdio.h"
 | 
				
			||||||
#include "spi.h"
 | 
					#include "spi.h"
 | 
				
			||||||
 | 
					#include "api-hal-spi.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** @addtogroup BSP
 | 
					/** @addtogroup BSP
 | 
				
			||||||
  * @{
 | 
					  * @{
 | 
				
			||||||
@@ -290,6 +291,9 @@ static uint8_t SD_ReadData(void);
 | 
				
			|||||||
  *         - MSD_OK: Sequence succeed
 | 
					  *         - MSD_OK: Sequence succeed
 | 
				
			||||||
  */
 | 
					  */
 | 
				
			||||||
uint8_t BSP_SD_Init(void) {
 | 
					uint8_t BSP_SD_Init(void) {
 | 
				
			||||||
 | 
					    // TODO: SPI manager
 | 
				
			||||||
 | 
					    api_hal_spi_lock(&SPI_SD_HANDLE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Init to maximum slow speed */
 | 
					    /* Init to maximum slow speed */
 | 
				
			||||||
    SD_SPI_Reconfigure_Slow();
 | 
					    SD_SPI_Reconfigure_Slow();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -303,6 +307,9 @@ uint8_t BSP_SD_Init(void) {
 | 
				
			|||||||
    /* Init to maximum fastest speed */
 | 
					    /* Init to maximum fastest speed */
 | 
				
			||||||
    SD_SPI_Reconfigure_Fast();
 | 
					    SD_SPI_Reconfigure_Fast();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // TODO: SPI manager
 | 
				
			||||||
 | 
					    api_hal_spi_unlock(&SPI_SD_HANDLE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* SD initialized and set to SPI mode properly */
 | 
					    /* SD initialized and set to SPI mode properly */
 | 
				
			||||||
    return res;
 | 
					    return res;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -323,8 +330,8 @@ uint8_t BSP_SD_GetCardInfo(SD_CardInfo* pCardInfo) {
 | 
				
			|||||||
    if(flag_SDHC == 1) {
 | 
					    if(flag_SDHC == 1) {
 | 
				
			||||||
        pCardInfo->LogBlockSize = 512;
 | 
					        pCardInfo->LogBlockSize = 512;
 | 
				
			||||||
        pCardInfo->CardBlockSize = 512;
 | 
					        pCardInfo->CardBlockSize = 512;
 | 
				
			||||||
        pCardInfo->CardCapacity =
 | 
					        pCardInfo->CardCapacity = ((uint64_t)pCardInfo->Csd.version.v2.DeviceSize + 1UL) * 1024UL *
 | 
				
			||||||
            ((uint64_t)pCardInfo->Csd.version.v2.DeviceSize + 1UL) * 1024UL * (uint64_t)pCardInfo->LogBlockSize;
 | 
					                                  (uint64_t)pCardInfo->LogBlockSize;
 | 
				
			||||||
        pCardInfo->LogBlockNbr = (pCardInfo->CardCapacity) / (pCardInfo->LogBlockSize);
 | 
					        pCardInfo->LogBlockNbr = (pCardInfo->CardCapacity) / (pCardInfo->LogBlockSize);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        pCardInfo->CardCapacity = (pCardInfo->Csd.version.v1.DeviceSize + 1);
 | 
					        pCardInfo->CardCapacity = (pCardInfo->Csd.version.v1.DeviceSize + 1);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,7 +35,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* Includes ------------------------------------------------------------------*/
 | 
					/* Includes ------------------------------------------------------------------*/
 | 
				
			||||||
#include "user_diskio.h"
 | 
					#include "user_diskio.h"
 | 
				
			||||||
 | 
					#include "spi.h"
 | 
				
			||||||
 | 
					#include "api-hal-spi.h"
 | 
				
			||||||
/* Private typedef -----------------------------------------------------------*/
 | 
					/* Private typedef -----------------------------------------------------------*/
 | 
				
			||||||
/* Private define ------------------------------------------------------------*/
 | 
					/* Private define ------------------------------------------------------------*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -45,7 +46,6 @@ static volatile DSTATUS Stat = STA_NOINIT;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static DSTATUS User_CheckStatus(BYTE lun) {
 | 
					static DSTATUS User_CheckStatus(BYTE lun) {
 | 
				
			||||||
    Stat = STA_NOINIT;
 | 
					    Stat = STA_NOINIT;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    if(BSP_SD_GetCardState() == MSD_OK) {
 | 
					    if(BSP_SD_GetCardState() == MSD_OK) {
 | 
				
			||||||
        Stat &= ~STA_NOINIT;
 | 
					        Stat &= ~STA_NOINIT;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -84,10 +84,17 @@ Diskio_drvTypeDef USER_Driver = {
 | 
				
			|||||||
  * @param  pdrv: Physical drive number (0..)
 | 
					  * @param  pdrv: Physical drive number (0..)
 | 
				
			||||||
  * @retval DSTATUS: Operation status
 | 
					  * @retval DSTATUS: Operation status
 | 
				
			||||||
  */
 | 
					  */
 | 
				
			||||||
DSTATUS USER_initialize(BYTE pdrv /* Physical drive nmuber to identify the drive */
 | 
					DSTATUS USER_initialize(BYTE pdrv) {
 | 
				
			||||||
) {
 | 
					 | 
				
			||||||
    /* USER CODE BEGIN INIT */
 | 
					    /* USER CODE BEGIN INIT */
 | 
				
			||||||
    return User_CheckStatus(pdrv);
 | 
					    // TODO: SPI manager
 | 
				
			||||||
 | 
					    api_hal_spi_lock(&SPI_SD_HANDLE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    DSTATUS status = User_CheckStatus(pdrv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // TODO: SPI manager
 | 
				
			||||||
 | 
					    api_hal_spi_unlock(&SPI_SD_HANDLE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return status;
 | 
				
			||||||
    /* USER CODE END INIT */
 | 
					    /* USER CODE END INIT */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -96,8 +103,7 @@ DSTATUS USER_initialize(BYTE pdrv /* Physical drive nmuber to identify the drive
 | 
				
			|||||||
  * @param  pdrv: Physical drive number (0..)
 | 
					  * @param  pdrv: Physical drive number (0..)
 | 
				
			||||||
  * @retval DSTATUS: Operation status
 | 
					  * @retval DSTATUS: Operation status
 | 
				
			||||||
  */
 | 
					  */
 | 
				
			||||||
DSTATUS USER_status(BYTE pdrv /* Physical drive number to identify the drive */
 | 
					DSTATUS USER_status(BYTE pdrv) {
 | 
				
			||||||
) {
 | 
					 | 
				
			||||||
    /* USER CODE BEGIN STATUS */
 | 
					    /* USER CODE BEGIN STATUS */
 | 
				
			||||||
    return Stat;
 | 
					    return Stat;
 | 
				
			||||||
    /* USER CODE END STATUS */
 | 
					    /* USER CODE END STATUS */
 | 
				
			||||||
@@ -111,14 +117,13 @@ DSTATUS USER_status(BYTE pdrv /* Physical drive number to identify the drive */
 | 
				
			|||||||
  * @param  count: Number of sectors to read (1..128)
 | 
					  * @param  count: Number of sectors to read (1..128)
 | 
				
			||||||
  * @retval DRESULT: Operation result
 | 
					  * @retval DRESULT: Operation result
 | 
				
			||||||
  */
 | 
					  */
 | 
				
			||||||
DRESULT USER_read(
 | 
					DRESULT USER_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count) {
 | 
				
			||||||
    BYTE pdrv, /* Physical drive nmuber to identify the drive */
 | 
					 | 
				
			||||||
    BYTE* buff, /* Data buffer to store read data */
 | 
					 | 
				
			||||||
    DWORD sector, /* Sector address in LBA */
 | 
					 | 
				
			||||||
    UINT count /* Number of sectors to read */
 | 
					 | 
				
			||||||
) {
 | 
					 | 
				
			||||||
    /* USER CODE BEGIN READ */
 | 
					    /* USER CODE BEGIN READ */
 | 
				
			||||||
    DRESULT res = RES_ERROR;
 | 
					    DRESULT res = RES_ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // TODO: SPI manager
 | 
				
			||||||
 | 
					    api_hal_spi_lock(&SPI_SD_HANDLE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(BSP_SD_ReadBlocks((uint32_t*)buff, (uint32_t)(sector), count, SD_DATATIMEOUT) == MSD_OK) {
 | 
					    if(BSP_SD_ReadBlocks((uint32_t*)buff, (uint32_t)(sector), count, SD_DATATIMEOUT) == MSD_OK) {
 | 
				
			||||||
        /* wait until the read operation is finished */
 | 
					        /* wait until the read operation is finished */
 | 
				
			||||||
        while(BSP_SD_GetCardState() != MSD_OK) {
 | 
					        while(BSP_SD_GetCardState() != MSD_OK) {
 | 
				
			||||||
@@ -126,6 +131,9 @@ DRESULT USER_read(
 | 
				
			|||||||
        res = RES_OK;
 | 
					        res = RES_OK;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // TODO: SPI manager
 | 
				
			||||||
 | 
					    api_hal_spi_unlock(&SPI_SD_HANDLE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return res;
 | 
					    return res;
 | 
				
			||||||
    /* USER CODE END READ */
 | 
					    /* USER CODE END READ */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -139,16 +147,14 @@ DRESULT USER_read(
 | 
				
			|||||||
  * @retval DRESULT: Operation result
 | 
					  * @retval DRESULT: Operation result
 | 
				
			||||||
  */
 | 
					  */
 | 
				
			||||||
#if _USE_WRITE == 1
 | 
					#if _USE_WRITE == 1
 | 
				
			||||||
DRESULT USER_write(
 | 
					DRESULT USER_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count) {
 | 
				
			||||||
    BYTE pdrv, /* Physical drive nmuber to identify the drive */
 | 
					 | 
				
			||||||
    const BYTE* buff, /* Data to be written */
 | 
					 | 
				
			||||||
    DWORD sector, /* Sector address in LBA */
 | 
					 | 
				
			||||||
    UINT count /* Number of sectors to write */
 | 
					 | 
				
			||||||
) {
 | 
					 | 
				
			||||||
    /* USER CODE BEGIN WRITE */
 | 
					    /* USER CODE BEGIN WRITE */
 | 
				
			||||||
    /* USER CODE HERE */
 | 
					    /* USER CODE HERE */
 | 
				
			||||||
    DRESULT res = RES_ERROR;
 | 
					    DRESULT res = RES_ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // TODO: SPI manager
 | 
				
			||||||
 | 
					    api_hal_spi_lock(&SPI_SD_HANDLE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(BSP_SD_WriteBlocks((uint32_t*)buff, (uint32_t)(sector), count, SD_DATATIMEOUT) == MSD_OK) {
 | 
					    if(BSP_SD_WriteBlocks((uint32_t*)buff, (uint32_t)(sector), count, SD_DATATIMEOUT) == MSD_OK) {
 | 
				
			||||||
        /* wait until the Write operation is finished */
 | 
					        /* wait until the Write operation is finished */
 | 
				
			||||||
        while(BSP_SD_GetCardState() != MSD_OK) {
 | 
					        while(BSP_SD_GetCardState() != MSD_OK) {
 | 
				
			||||||
@@ -156,6 +162,9 @@ DRESULT USER_write(
 | 
				
			|||||||
        res = RES_OK;
 | 
					        res = RES_OK;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // TODO: SPI manager
 | 
				
			||||||
 | 
					    api_hal_spi_unlock(&SPI_SD_HANDLE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return res;
 | 
					    return res;
 | 
				
			||||||
    /* USER CODE END WRITE */
 | 
					    /* USER CODE END WRITE */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -169,17 +178,16 @@ DRESULT USER_write(
 | 
				
			|||||||
  * @retval DRESULT: Operation result
 | 
					  * @retval DRESULT: Operation result
 | 
				
			||||||
  */
 | 
					  */
 | 
				
			||||||
#if _USE_IOCTL == 1
 | 
					#if _USE_IOCTL == 1
 | 
				
			||||||
DRESULT USER_ioctl(
 | 
					DRESULT USER_ioctl(BYTE pdrv, BYTE cmd, void* buff) {
 | 
				
			||||||
    BYTE pdrv, /* Physical drive nmuber (0..) */
 | 
					 | 
				
			||||||
    BYTE cmd, /* Control code */
 | 
					 | 
				
			||||||
    void* buff /* Buffer to send/receive control data */
 | 
					 | 
				
			||||||
) {
 | 
					 | 
				
			||||||
    /* USER CODE BEGIN IOCTL */
 | 
					    /* USER CODE BEGIN IOCTL */
 | 
				
			||||||
    DRESULT res = RES_ERROR;
 | 
					    DRESULT res = RES_ERROR;
 | 
				
			||||||
    BSP_SD_CardInfo CardInfo;
 | 
					    BSP_SD_CardInfo CardInfo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(Stat & STA_NOINIT) return RES_NOTRDY;
 | 
					    if(Stat & STA_NOINIT) return RES_NOTRDY;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // TODO: SPI manager
 | 
				
			||||||
 | 
					    api_hal_spi_lock(&SPI_SD_HANDLE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch(cmd) {
 | 
					    switch(cmd) {
 | 
				
			||||||
    /* Make sure that no pending write process */
 | 
					    /* Make sure that no pending write process */
 | 
				
			||||||
    case CTRL_SYNC:
 | 
					    case CTRL_SYNC:
 | 
				
			||||||
@@ -211,6 +219,9 @@ DRESULT USER_ioctl(
 | 
				
			|||||||
        res = RES_PARERR;
 | 
					        res = RES_PARERR;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // TODO: SPI manager
 | 
				
			||||||
 | 
					    api_hal_spi_unlock(&SPI_SD_HANDLE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return res;
 | 
					    return res;
 | 
				
			||||||
    /* USER CODE END IOCTL */
 | 
					    /* USER CODE END IOCTL */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -121,6 +121,7 @@ int main(void)
 | 
				
			|||||||
  MX_FATFS_Init();
 | 
					  MX_FATFS_Init();
 | 
				
			||||||
  delay_us_init_DWT();
 | 
					  delay_us_init_DWT();
 | 
				
			||||||
  api_hal_vcp_init();
 | 
					  api_hal_vcp_init();
 | 
				
			||||||
 | 
					  api_hal_spi_init();
 | 
				
			||||||
  /* USER CODE END 2 */
 | 
					  /* USER CODE END 2 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* Init scheduler */
 | 
					  /* Init scheduler */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -111,10 +111,6 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  /* USER CODE BEGIN SPI1_MspInit 1 */
 | 
					  /* USER CODE BEGIN SPI1_MspInit 1 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // SD Card need faster spi gpio
 | 
					 | 
				
			||||||
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
 | 
					 | 
				
			||||||
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /* USER CODE END SPI1_MspInit 1 */
 | 
					  /* USER CODE END SPI1_MspInit 1 */
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  else if(spiHandle->Instance==SPI2)
 | 
					  else if(spiHandle->Instance==SPI2)
 | 
				
			||||||
@@ -156,6 +152,28 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  /* USER CODE BEGIN SPI2_MspInit 1 */
 | 
					  /* USER CODE BEGIN SPI2_MspInit 1 */
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					  // SD Card need faster spi gpio
 | 
				
			||||||
 | 
					  GPIO_InitStruct.Pin = GPIO_PIN_2;
 | 
				
			||||||
 | 
					  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 | 
				
			||||||
 | 
					  GPIO_InitStruct.Pull = GPIO_NOPULL;
 | 
				
			||||||
 | 
					  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
 | 
				
			||||||
 | 
					  GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
 | 
				
			||||||
 | 
					  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  GPIO_InitStruct.Pin = SPI_D_MOSI_Pin;
 | 
				
			||||||
 | 
					  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 | 
				
			||||||
 | 
					  GPIO_InitStruct.Pull = GPIO_NOPULL;
 | 
				
			||||||
 | 
					  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
 | 
				
			||||||
 | 
					  GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
 | 
				
			||||||
 | 
					  HAL_GPIO_Init(SPI_D_MOSI_GPIO_Port, &GPIO_InitStruct);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  GPIO_InitStruct.Pin = SPI_D_SCK_Pin;
 | 
				
			||||||
 | 
					  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 | 
				
			||||||
 | 
					  GPIO_InitStruct.Pull = GPIO_NOPULL;
 | 
				
			||||||
 | 
					  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
 | 
				
			||||||
 | 
					  GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
 | 
				
			||||||
 | 
					  HAL_GPIO_Init(SPI_D_SCK_GPIO_Port, &GPIO_InitStruct);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* USER CODE END SPI2_MspInit 1 */
 | 
					  /* USER CODE END SPI2_MspInit 1 */
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -272,7 +290,7 @@ void SD_SPI_Reconfigure_Fast(void) {
 | 
				
			|||||||
  SPI_SD_HANDLE.Init.CLKPolarity = SPI_POLARITY_LOW;
 | 
					  SPI_SD_HANDLE.Init.CLKPolarity = SPI_POLARITY_LOW;
 | 
				
			||||||
  SPI_SD_HANDLE.Init.CLKPhase = SPI_PHASE_1EDGE;
 | 
					  SPI_SD_HANDLE.Init.CLKPhase = SPI_PHASE_1EDGE;
 | 
				
			||||||
  SPI_SD_HANDLE.Init.NSS = SPI_NSS_SOFT;
 | 
					  SPI_SD_HANDLE.Init.NSS = SPI_NSS_SOFT;
 | 
				
			||||||
  SPI_SD_HANDLE.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
 | 
					  SPI_SD_HANDLE.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64;
 | 
				
			||||||
  SPI_SD_HANDLE.Init.FirstBit = SPI_FIRSTBIT_MSB;
 | 
					  SPI_SD_HANDLE.Init.FirstBit = SPI_FIRSTBIT_MSB;
 | 
				
			||||||
  SPI_SD_HANDLE.Init.TIMode = SPI_TIMODE_DISABLE;
 | 
					  SPI_SD_HANDLE.Init.TIMode = SPI_TIMODE_DISABLE;
 | 
				
			||||||
  SPI_SD_HANDLE.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
 | 
					  SPI_SD_HANDLE.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										32
									
								
								firmware/targets/f4/api-hal/api-hal-spi.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								firmware/targets/f4/api-hal/api-hal-spi.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					#include "api-hal-spi.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					osMutexId_t spi_mutex_r;
 | 
				
			||||||
 | 
					osMutexId_t spi_mutex_d;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern SPI_HandleTypeDef SPI_R;
 | 
				
			||||||
 | 
					extern SPI_HandleTypeDef SPI_D;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void api_hal_spi_init() {
 | 
				
			||||||
 | 
					    spi_mutex_r = osMutexNew(NULL);
 | 
				
			||||||
 | 
					    spi_mutex_d = osMutexNew(NULL);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void api_hal_spi_lock(SPI_HandleTypeDef* spi) {
 | 
				
			||||||
 | 
					    if(spi == &SPI_D) {
 | 
				
			||||||
 | 
					        osMutexAcquire(spi_mutex_d, osWaitForever);
 | 
				
			||||||
 | 
					    } else if(spi == &SPI_R) {
 | 
				
			||||||
 | 
					        osMutexAcquire(spi_mutex_r, osWaitForever);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        Error_Handler();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void api_hal_spi_unlock(SPI_HandleTypeDef* spi) {
 | 
				
			||||||
 | 
					    if(spi == &SPI_D) {
 | 
				
			||||||
 | 
					        osMutexRelease(spi_mutex_d);
 | 
				
			||||||
 | 
					    } else if(spi == &SPI_R) {
 | 
				
			||||||
 | 
					        osMutexRelease(spi_mutex_r);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        Error_Handler();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										7
									
								
								firmware/targets/f4/api-hal/api-hal-spi.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								firmware/targets/f4/api-hal/api-hal-spi.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					#include "main.h"
 | 
				
			||||||
 | 
					#include <cmsis_os.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void api_hal_spi_init();
 | 
				
			||||||
 | 
					void api_hal_spi_lock(SPI_HandleTypeDef* spi);
 | 
				
			||||||
 | 
					void api_hal_spi_unlock(SPI_HandleTypeDef* spi); 
 | 
				
			||||||
@@ -1023,7 +1023,6 @@ static const uint8_t u8x8_d_st7565_erc12864_alt_init_seq[] = {
 | 
				
			|||||||
  // U8X8_END()             			/* end of sequence */
 | 
					  // U8X8_END()             			/* end of sequence */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // flipper zero sequence
 | 
					  // flipper zero sequence
 | 
				
			||||||
 | 
					 | 
				
			||||||
  U8X8_START_TRANSFER(),
 | 
					  U8X8_START_TRANSFER(),
 | 
				
			||||||
  U8X8_C(0x0e2),        // soft reset
 | 
					  U8X8_C(0x0e2),        // soft reset
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1039,6 +1038,8 @@ static const uint8_t u8x8_d_st7565_erc12864_alt_init_seq[] = {
 | 
				
			|||||||
  U8X8_C(0x28 | 0x7),   // ST7565_st7565_command(CMD_SET_POWER_CONTROL | 0x7);
 | 
					  U8X8_C(0x28 | 0x7),   // ST7565_st7565_command(CMD_SET_POWER_CONTROL | 0x7);
 | 
				
			||||||
  U8X8_DLY(50), 
 | 
					  U8X8_DLY(50), 
 | 
				
			||||||
  U8X8_C(0x20 | 0x6),   // ST7565_st7565_command(CMD_SET_RESISTOR_RATIO | 0x6);
 | 
					  U8X8_C(0x20 | 0x6),   // ST7565_st7565_command(CMD_SET_RESISTOR_RATIO | 0x6);
 | 
				
			||||||
 | 
					  U8X8_END_TRANSFER(),  // disable chip
 | 
				
			||||||
 | 
					  U8X8_END()            // end of sequence
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user