From 7133e63633c4a03daad66a916a721249fa797647 Mon Sep 17 00:00:00 2001 From: alexey Date: Wed, 14 Aug 2024 18:28:35 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B5=D1=80=D1=8B=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20(=D0=BF?= =?UTF-8?q?=D0=BE=D0=BA=D0=B0=20=D0=BD=D0=B8=D1=87=D0=B5=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CubeKeil Example/Core/Src/main.c | 96 ++++++++++++------- .../MDK-ARM/flash eeprom Example.uvoptx | 58 ++++++++--- .../MDK-ARM/flash eeprom Example.uvprojx | 10 ++ CubeKeil Example/flash eeprom Example.ioc | 33 ++++--- 4 files changed, 135 insertions(+), 62 deletions(-) diff --git a/CubeKeil Example/Core/Src/main.c b/CubeKeil Example/Core/Src/main.c index 1c215d0..c79b6ac 100644 --- a/CubeKeil Example/Core/Src/main.c +++ b/CubeKeil Example/Core/Src/main.c @@ -65,14 +65,20 @@ MEMSPI_WriteInitTypeDef MCUFlashToExternalFlashInit; uint8_t read_buff[20] = {0}; // what writting in examples in while(1) uint8_t write_buff[20] = {0x14,0x13,0x12,0x11,0x10, - 0x0F,0x0E,0x0D,0x0C,0x0B, - 0x0A,0x09,0x08,0x07,0x06, - 0x05,0x04,0x03,0x02,0x01}; +0x0F,0x0E,0x0D,0x0C,0x0B, +0x0A,0x09,0x08,0x07,0x06, +0x05,0x04,0x03,0x02,0x01}; -uint32_t FLASH_write = 0; // where start writting (except MCU App - MCU App writing on 0x0) +uint32_t FLASH_write = 0x1000; // where start writting (except MCU App - MCU App writing on 0x0) uint32_t FLASH_mcu_size = 0x2000; // how many bytes from app write to flash -uint32_t FLASH_read = 0x100; // where read +uint32_t FLASH_read = 0x1100; // where read uint32_t Timeout = 1000; // timeout for examples in while(1) + +void SPI2_IRQHandler(void) +{ + MEMSPI_Handler(&hmemspi); +} + /* USER CODE END 0 */ /** @@ -107,16 +113,16 @@ int main(void) MX_RNG_Init(); /* USER CODE BEGIN 2 */ // FLASH MEMSPI INIT - hmemspi.hspi.Instance = SPI2; - hmemspi.hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128; - hmemspi.GPIOs.CS_GPIOx = GPIOA; - hmemspi.GPIOs.CS_PIN = GPIO_PIN_4; - hmemspi.GPIOs.CLK_GPIOx = GPIOB; - hmemspi.GPIOs.CLK_PIN = GPIO_PIN_13; - hmemspi.GPIOs.MISO_GPIOx = GPIOC; - hmemspi.GPIOs.MISO_PIN = GPIO_PIN_2; - hmemspi.GPIOs.MOSI_GPIOx = GPIOC; - hmemspi.GPIOs.MOSI_PIN = GPIO_PIN_3; + hmemspi.sspi.hspi.Instance = SPI2; + hmemspi.sspi.hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128; + hmemspi.CS_GPIOx = GPIOA; + hmemspi.CS_PIN = GPIO_PIN_4; + hmemspi.sspi.CLK_GPIOx = GPIOB; + hmemspi.sspi.CLK_PIN = GPIO_PIN_13; + hmemspi.sspi.MISO_GPIOx = GPIOB; + hmemspi.sspi.MISO_PIN = GPIO_PIN_14; + hmemspi.sspi.MOSI_GPIOx = GPIOB; + hmemspi.sspi.MOSI_PIN = GPIO_PIN_15; MEMSPI_Base_Init(&hmemspi); /* USER CODE END 2 */ @@ -124,48 +130,68 @@ int main(void) /* Infinite loop */ /* USER CODE BEGIN WHILE */ - // Example for FLASH: using manufactire info CMD - uint32_t memspi_ID = MEMSPI_CMD_Read_JEDEC_ID(&hmemspi, 100); - uint64_t memspi_unique_ID = MEMSPI_CMD_Read_Device_ID(&hmemspi, 100); -#ifdef EXT_FLASH - // Example fpr FLASH: writting MCU Program to external FLASH - writeInit.fSavePrevoisData = 1; - writeInit.pDataPtr = write_buff; - writeInit.Data_Address = 0xfb; - writeInit.Data_Size = 1; - writeInit.Sector_Address = 0xf9; - writeInit.Sector_Size = 15; + // Example for FLASH (interrupt): using manufactire info CMD + uint32_t memspi_ID; + uint64_t memspi_unique_ID; + MEMSPI_CMD_Read_JEDEC_ID_IT(&hmemspi, &memspi_ID); + HAL_Delay(100); + MEMSPI_CMD_Read_Device_ID_IT(&hmemspi, &memspi_unique_ID); + HAL_Delay(100); + // Example for FLASH (interrupt/blocking): erase/program/read functions + // writting on two pages: + // writing 15 bytes at 0xf9 - its writting 7 bytes at first page, and 8 bytes at second page + MEMSPI_RES = MEMSPI_FLASH_Erase(&hmemspi, 0, 1, 1000, 100); + MEMSPI_RES = MEMSPI_FLASH_Program(&hmemspi, 0xf9, write_buff, 15, 100, 1); + MEMSPI_RES = MEMSPI_Read_Memory_IT(&hmemspi, 0xf9, read_buff, 15); + MEMSPI_WaitOnFlagsUntilTimeout(&hmemspi, MEMSPI_SR_BUSY, 0, NULL, NULL); + + + // Example for FLASH (blocking): using manufactire info CMD + memspi_ID = MEMSPI_CMD_Read_JEDEC_ID(&hmemspi, 100); + memspi_unique_ID = MEMSPI_CMD_Read_Device_ID(&hmemspi, 100); + MEMSPI_RES = MEMSPI_CMD_Write_Status_Register(&hmemspi, 0, 100); +#ifdef EXT_FLASH + // Example fpr FLASH (blocking): writting MCU Program to external FLASH MCUFlashToExternalFlashInit.pDataPtr = (uint8_t *)FLASH_BASE; - MCUFlashToExternalFlashInit.Data_Address = 0; + MCUFlashToExternalFlashInit.Data_Address = FLASH_write; MCUFlashToExternalFlashInit.Data_Size = FLASH_mcu_size; - MCUFlashToExternalFlashInit.Sector_Address = 0; + MCUFlashToExternalFlashInit.Sector_Address = FLASH_write; MCUFlashToExternalFlashInit.Sector_Size = FLASH_mcu_size; MEMSPI_RES = MEMSPI_FLASH_Write(&hmemspi, &MCUFlashToExternalFlashInit, 5000, 1); MEMSPI_RES = MEMSPI_Read_Memory(&hmemspi, FLASH_read, read_buff, 15, 100); - // Example for FLASH: erase/program/read functions + // Example for FLASH (blocking): erase/program/read functions // writting on two pages: // writing 15 bytes at 0xf9 - its writting 7 bytes at first page, and 8 bytes at second page MEMSPI_RES = MEMSPI_FLASH_Erase(&hmemspi, 0, 1, 1000, 1); MEMSPI_RES = MEMSPI_FLASH_Program(&hmemspi, 0xf9, write_buff, 15, 100, 1); MEMSPI_RES = MEMSPI_Read_Memory(&hmemspi, 0xf9, read_buff, 15, 100); + + // Example for FLASH (blocking) (while(1)): write/read functions #endif #ifdef EXT_EEPROM - // Example for EEPROM: writting MCU Program to external EEPROM - MEMSPI_RES = MEMSPI_EEPROM_Write(&hmemspi, 0, (uint8_t *)FLASH_BASE, FLASH_mcu_size, 2000, 0); + // Example for EEPROM (blocking): writting MCU Program to external EEPROM + MEMSPI_RES = MEMSPI_EEPROM_Write(&hmemspi, FLASH_write, (uint8_t *)FLASH_BASE, FLASH_mcu_size, 2000, 0); MEMSPI_RES = MEMSPI_Read_Memory(&hmemspi, FLASH_read, read_buff, 15, 100); FLASH_read = 0x0; #endif while (1) { + FLASH_read = FLASH_write; #ifdef EXT_FLASH - // Example for FLASH: write/read functions - MEMSPI_RES = MEMSPI_FLASH_Write(&hmemspi, &writeInit, Timeout, 1); - MEMSPI_RES = MEMSPI_Read_Memory(&hmemspi, 0xf9, read_buff, 15, Timeout); + // Example for FLASH (blocking): write/read functions + writeInit.fSavePrevoisData = 1; + writeInit.pDataPtr = write_buff; + writeInit.Data_Address = FLASH_write; + writeInit.Data_Size = 1; + writeInit.Sector_Address = FLASH_write; + writeInit.Sector_Size = 15; +// MEMSPI_RES = MEMSPI_FLASH_Write(&hmemspi, &writeInit, Timeout, 1); +// MEMSPI_RES = MEMSPI_Read_Memory(&hmemspi, FLASH_read, read_buff, 15, Timeout); #endif #ifdef EXT_EEPROM - // Example for EEPROM: write/read functions + // Example for EEPROM (blocking): write/read functions MEMSPI_RES = MEMSPI_EEPROM_Write(&hmemspi, FLASH_write, write_buff, 15, Timeout, 1); MEMSPI_RES = MEMSPI_Read_Memory(&hmemspi, 0+FLASH_read, read_buff, 15, Timeout); #endif diff --git a/CubeKeil Example/MDK-ARM/flash eeprom Example.uvoptx b/CubeKeil Example/MDK-ARM/flash eeprom Example.uvoptx index 4b5044c..c85a3de 100644 --- a/CubeKeil Example/MDK-ARM/flash eeprom Example.uvoptx +++ b/CubeKeil Example/MDK-ARM/flash eeprom Example.uvoptx @@ -152,9 +152,9 @@ 0 0 - 156 + 151 1 -
134230216
+
134236100
0 0 0 @@ -163,14 +163,14 @@ 1 ../Core/Src/main.c - \\flash_eeprom_Example\../Core/Src/main.c\156 + \\flash_eeprom_Example\../Core/Src/main.c\151
1 0 - 160 + 146 1 -
134230308
+
134236064
0 0 0 @@ -179,14 +179,14 @@ 1 ../Core/Src/main.c - \\flash_eeprom_Example\../Core/Src/main.c\160 + \\flash_eeprom_Example\../Core/Src/main.c\146
2 0 - 169 + 144 1 -
134230310
+
134235990
0 0 0 @@ -195,7 +195,7 @@ 1 ../Core/Src/main.c - \\flash_eeprom_Example\../Core/Src/main.c\169 + \\flash_eeprom_Example\../Core/Src/main.c\144
@@ -212,7 +212,7 @@ 2 1 - MEMSPI_RES + memspi_unique_ID 3 @@ -286,12 +286,22 @@ 2 &0x20000760 + + 6 + 2 + sector_buff + + + 7 + 2 + hspi + 1 0 - 0x08001532 + 0x08000100 0 @@ -299,7 +309,7 @@ 2 0 - 0x20000708 + 0x20001778 0 @@ -803,6 +813,30 @@ 0 0 + + 6 + 33 + 1 + 0 + 0 + 0 + ..\..\GENERAL\spi_general.c + spi_general.c + 0 + 0 + + + 6 + 34 + 5 + 0 + 0 + 0 + ..\..\GENERAL\spi_general.h + spi_general.h + 0 + 0 + diff --git a/CubeKeil Example/MDK-ARM/flash eeprom Example.uvprojx b/CubeKeil Example/MDK-ARM/flash eeprom Example.uvprojx index e858e81..036072e 100644 --- a/CubeKeil Example/MDK-ARM/flash eeprom Example.uvprojx +++ b/CubeKeil Example/MDK-ARM/flash eeprom Example.uvprojx @@ -621,6 +621,16 @@ 5 ..\..\GENERAL\periph_general.h + + spi_general.c + 1 + ..\..\GENERAL\spi_general.c + + + spi_general.h + 5 + ..\..\GENERAL\spi_general.h + diff --git a/CubeKeil Example/flash eeprom Example.ioc b/CubeKeil Example/flash eeprom Example.ioc index b372431..600743c 100644 --- a/CubeKeil Example/flash eeprom Example.ioc +++ b/CubeKeil Example/flash eeprom Example.ioc @@ -11,7 +11,7 @@ Mcu.IP0=CRC Mcu.IP1=NVIC Mcu.IP2=RCC Mcu.IP3=RNG -Mcu.IP4=SPI1 +Mcu.IP4=SPI2 Mcu.IP5=SYS Mcu.IPNb=6 Mcu.Name=STM32F407V(E-G)Tx @@ -20,9 +20,9 @@ Mcu.Pin0=PH0-OSC_IN Mcu.Pin1=PH1-OSC_OUT Mcu.Pin10=VP_RNG_VS_RNG Mcu.Pin11=VP_SYS_VS_Systick -Mcu.Pin2=PA5 -Mcu.Pin3=PA6 -Mcu.Pin4=PA7 +Mcu.Pin2=PB13 +Mcu.Pin3=PB14 +Mcu.Pin4=PB15 Mcu.Pin5=PD12 Mcu.Pin6=PD13 Mcu.Pin7=PD14 @@ -45,12 +45,15 @@ NVIC.PriorityGroup=NVIC_PRIORITYGROUP_0 NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:true\:false\:false NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:false NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:true\:false\:false -PA5.Mode=Full_Duplex_Master -PA5.Signal=SPI1_SCK -PA6.Mode=Full_Duplex_Master -PA6.Signal=SPI1_MISO -PA7.Mode=Full_Duplex_Master -PA7.Signal=SPI1_MOSI +PB13.Locked=true +PB13.Mode=Full_Duplex_Master +PB13.Signal=SPI2_SCK +PB14.Locked=true +PB14.Mode=Full_Duplex_Master +PB14.Signal=SPI2_MISO +PB15.Locked=true +PB15.Mode=Full_Duplex_Master +PB15.Signal=SPI2_MOSI PD12.Locked=true PD12.Signal=GPIO_Output PD13.Locked=true @@ -125,11 +128,11 @@ RCC.VCOI2SOutputFreq_Value=384000000 RCC.VCOInputFreq_Value=2000000 RCC.VCOOutputFreq_Value=128000000 RCC.VcooutputI2S=192000000 -SPI1.CalculateBaudRate=4.0 MBits/s -SPI1.Direction=SPI_DIRECTION_2LINES -SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate -SPI1.Mode=SPI_MODE_MASTER -SPI1.VirtualType=VM_MASTER +SPI2.CalculateBaudRate=4.0 MBits/s +SPI2.Direction=SPI_DIRECTION_2LINES +SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate +SPI2.Mode=SPI_MODE_MASTER +SPI2.VirtualType=VM_MASTER VP_CRC_VS_CRC.Mode=CRC_Activate VP_CRC_VS_CRC.Signal=CRC_VS_CRC VP_RNG_VS_RNG.Mode=RNG_Activate