FL-443 Move sd card to second spi (#271)
* sd card spi 2 fix, add spi mgr
This commit is contained in:
		
							parent
							
								
									73ecc7cde6
								
							
						
					
					
						commit
						8b6e7fd4ae
					
				| @ -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,22 +1023,23 @@ 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
 | ||||||
| 
 | 
 | ||||||
|   U8X8_C(0xA3), // ST7565_st7565_command(CMD_SET_BIAS_7);
 |   U8X8_C(0xA3),         // ST7565_st7565_command(CMD_SET_BIAS_7);
 | ||||||
| 
 | 
 | ||||||
|   U8X8_C(0xA0), // ST7565_st7565_command(CMD_SET_ADC_NORMAL); 
 |   U8X8_C(0xA0),         // ST7565_st7565_command(CMD_SET_ADC_NORMAL); 
 | ||||||
|   U8X8_C(0xC8), // ST7565_st7565_command(CMD_SET_COM_REVERSE);
 |   U8X8_C(0xC8),         // ST7565_st7565_command(CMD_SET_COM_REVERSE);
 | ||||||
|   U8X8_C(0x40), // ST7565_st7565_command(CMD_SET_DISP_START_LINE);
 |   U8X8_C(0x40),         // ST7565_st7565_command(CMD_SET_DISP_START_LINE);
 | ||||||
|   U8X8_C(0x28 | 0x4), // ST7565_st7565_command(CMD_SET_POWER_CONTROL | 0x4);
 |   U8X8_C(0x28 | 0x4),   // ST7565_st7565_command(CMD_SET_POWER_CONTROL | 0x4);
 | ||||||
|   U8X8_DLY(50),  |   U8X8_DLY(50),  | ||||||
|   U8X8_C(0x28 | 0x6), // ST7565_st7565_command(CMD_SET_POWER_CONTROL | 0x6);
 |   U8X8_C(0x28 | 0x6),   // ST7565_st7565_command(CMD_SET_POWER_CONTROL | 0x6);
 | ||||||
|   U8X8_DLY(50),  |   U8X8_DLY(50),  | ||||||
|   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
 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 DrZlo13
						DrZlo13