V1.0
This commit is contained in:
@@ -0,0 +1,229 @@
|
||||
/*!
|
||||
* \file fmc_spi.c
|
||||
*
|
||||
* \brief Target fmc spi implementation
|
||||
*
|
||||
* \copyright Revised BSD License, see section \ref LICENSE.
|
||||
*
|
||||
* \code
|
||||
*
|
||||
* _ __ _ ________ _
|
||||
* | |/ /(_)___ / ____/ /_ (_)___
|
||||
* | // / __ \/ / / __ \/ / __ \
|
||||
* / |/ / / / / /___/ / / / / /_/ /
|
||||
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
|
||||
* /_/
|
||||
* (C) 2022-2025 XinChip
|
||||
*
|
||||
* \endcode
|
||||
*
|
||||
* \author ( XinChip ) Alex-J
|
||||
*
|
||||
* \author ( XinChip )
|
||||
*/
|
||||
|
||||
/*-----------------------------------------------------------------------------------
|
||||
INCLUDE HEADE FILES
|
||||
------------------------------------------------------------------------------------*/
|
||||
#include "fmc_spi.h"
|
||||
#include "xc6xxx_fmc_spi.h"
|
||||
#include "xc6xxx_fmc_spi_dma.h"
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Macros
|
||||
-------------------------------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Global Variables
|
||||
-------------------------------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Functions
|
||||
-------------------------------------------------------------------------------------*/
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
****************************************************************************************
|
||||
*/
|
||||
__RAM_CODE void fmc_spi_demo(void) {
|
||||
FMC_SPI_Init_Oprt();
|
||||
FMC_SPI_Flash_WakeUp();
|
||||
|
||||
uint32_t mid = 0;
|
||||
FMC_SPI_Flash_RDID((uint8_t *)&mid);
|
||||
DEBUG("Flash RDID: 0x%08x\n", mid);
|
||||
|
||||
uint8_t ruid[16];
|
||||
FMC_SPI_Flash_RUID(ruid);
|
||||
DEBUG("Flash RUID: ");
|
||||
for (int i = 0; i < 16; i++) {
|
||||
DEBUG("%02x ", ruid[i]);
|
||||
}
|
||||
DEBUG("\n");
|
||||
|
||||
#if 1
|
||||
uint8_t data[FLASH_PAGE_SIZE];
|
||||
FMC_SPI_Flash_Erase_Sector(0x19000);
|
||||
DEBUG("Flash_Erase\n");
|
||||
FMC_SPI_Flash_ReadPage(0x19000, data, FLASH_PAGE_SIZE);
|
||||
DEBUG("Flash Read data: \n");
|
||||
for (uint16_t i = 0; i < FLASH_PAGE_SIZE; i++) {
|
||||
DEBUG("%02x ", data[i]);
|
||||
}
|
||||
DEBUG("\n");
|
||||
|
||||
for (uint16_t i = 0; i < FLASH_PAGE_SIZE; i++) {
|
||||
data[i] = i;
|
||||
}
|
||||
data[0] = 88;
|
||||
|
||||
for (uint8_t i = 0; i < 16; i++) {
|
||||
FMC_SPI_Flash_WritePage(0x19000 + i * FLASH_PAGE_SIZE, data,
|
||||
FLASH_PAGE_SIZE);
|
||||
data[0]++;
|
||||
}
|
||||
DEBUG("Flash Write finished!\n");
|
||||
|
||||
for (uint8_t i = 0; i < 16; i++) {
|
||||
for (uint16_t i = 0; i < FLASH_PAGE_SIZE; i++) {
|
||||
data[i] = 0xff;
|
||||
}
|
||||
|
||||
FMC_SPI_Flash_ReadPage(0x19000 + i * FLASH_PAGE_SIZE, data,
|
||||
FLASH_PAGE_SIZE);
|
||||
DEBUG("Flash Read finished%d: \n", i);
|
||||
for (uint16_t i = 0; i < FLASH_PAGE_SIZE; i++) {
|
||||
DEBUG("%02x ", data[i]);
|
||||
}
|
||||
DEBUG("\n");
|
||||
}
|
||||
|
||||
uint8_t w_buff[716];
|
||||
FMC_SPI_Flash_Erase_Sector(0x19000);
|
||||
for (uint16_t i = 0; i < sizeof(w_buff); i++)
|
||||
w_buff[i] = 0x33;
|
||||
FMC_SPI_FlashWrite(0x19000 + 57, w_buff, sizeof(w_buff));
|
||||
DEBUG("Flash Write Any finish\n");
|
||||
|
||||
uint8_t r_buff[1024];
|
||||
FMC_SPI_FlashRead(0x19000, r_buff, sizeof(r_buff));
|
||||
DEBUG("Flash Read Any addr: \n");
|
||||
for (uint16_t i = 0; i < sizeof(r_buff); i++)
|
||||
DEBUG("%02x ", r_buff[i]);
|
||||
DEBUG("\n");
|
||||
|
||||
FMC_SPI_Flash_Erase_Sector(0x19000);
|
||||
for (uint16_t i = 0; i < sizeof(w_buff); i++)
|
||||
w_buff[i] = 0x66;
|
||||
FMC_SPI_FlashWrite(0x19000 + 176, w_buff, 120);
|
||||
DEBUG("Flash Write Any finish2\n");
|
||||
|
||||
FMC_SPI_FlashRead(0x19000 + 176, r_buff, sizeof(r_buff));
|
||||
DEBUG("Flash Read Any addr2: \n");
|
||||
for (uint16_t i = 0; i < sizeof(r_buff); i++)
|
||||
DEBUG("%02x ", r_buff[i]);
|
||||
DEBUG("\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
|
||||
* @return[out]
|
||||
*
|
||||
****************************************************************************************
|
||||
*/
|
||||
__RAM_CODE void fmc_spi_dma_demo(void) {
|
||||
DEBUG("__FMC_SPI_DEMO__\n");
|
||||
|
||||
FMC_SPI_Init();
|
||||
// DEBUG("__FMC_SPI_Init_End__\n");
|
||||
#if (DMAC_NVIC_ENABLE == 1)
|
||||
NVIC_EnableIRQ(DMA_IRQn);
|
||||
#endif
|
||||
// DEBUG("__DMA_IRQ_Enable__\n");
|
||||
FMC_SPI_DMA_Flash_WakeUp(XC_FMC);
|
||||
// DEBUG("__FMC_SPI_FLash_Wakeup__\n");
|
||||
|
||||
uint32_t mid = 0;
|
||||
// FMC_SPI_Flash_Read_RDID(XC_FMC, (uint8_t*)&mid);
|
||||
FMC_SPI_DMA_Flash_RDID(XC_FMC, (uint8_t *)&mid);
|
||||
// FMC_QSPI_DMA_Flash_QREMS(XC_FMC, (uint8_t*)&mid);
|
||||
DEBUG("Flash RDID: 0x%08x\n", mid);
|
||||
|
||||
uint8_t ruid[16];
|
||||
FMC_SPI_DMA_Flash_RUID(XC_FMC, ruid);
|
||||
DEBUG("Flash RUID: ");
|
||||
for (int i = 0; i < 16; i++) {
|
||||
PRINT("%02x ", ruid[i]);
|
||||
}
|
||||
PRINT("\n");
|
||||
|
||||
uint8_t data[FLASH_PAGE_SIZE];
|
||||
FMC_SPI_DMA_Flash_Erase_Sector(XC_FMC, 0x19000);
|
||||
DEBUG("Flash_Erase\n");
|
||||
FMC_SPI_DMA_Flash_ReadPage(XC_FMC, 0x19000, data, FLASH_PAGE_SIZE);
|
||||
DEBUG("Flash Read data: \n");
|
||||
for (uint16_t i = 0; i < FLASH_PAGE_SIZE; i++) {
|
||||
PRINT("%02x ", data[i]);
|
||||
}
|
||||
PRINT("\n");
|
||||
|
||||
for (uint16_t i = 0; i < FLASH_PAGE_SIZE; i++) {
|
||||
data[i] = i;
|
||||
}
|
||||
data[0] = 88;
|
||||
|
||||
for (uint8_t i = 0; i < 16; i++) {
|
||||
FMC_SPI_DMA_Flash_WritePage(XC_FMC, 0x19000 + i * FLASH_PAGE_SIZE, data,
|
||||
FLASH_PAGE_SIZE);
|
||||
data[0]++;
|
||||
}
|
||||
DEBUG("Flash Write finished!\n");
|
||||
|
||||
for (uint8_t i = 0; i < 16; i++) {
|
||||
#if (USE_XIP == 1)
|
||||
for (uint16_t i = 0; i < FLASH_PAGE_SIZE; i++) {
|
||||
data[i] = 0xff;
|
||||
}
|
||||
#else
|
||||
memset(data, 0xff, FLASH_PAGE_SIZE);
|
||||
#endif
|
||||
FMC_SPI_DMA_Flash_ReadPage(XC_FMC, 0x19000 + i * FLASH_PAGE_SIZE, data,
|
||||
FLASH_PAGE_SIZE);
|
||||
DEBUG("Flash Read finished%d: \n", i);
|
||||
for (uint16_t i = 0; i < FLASH_PAGE_SIZE; i++) {
|
||||
PRINT("%02x ", data[i]);
|
||||
}
|
||||
PRINT("\n");
|
||||
}
|
||||
|
||||
uint8_t w_buff[716];
|
||||
memset(w_buff, 0x33, sizeof(w_buff));
|
||||
FMC_SPI_DMA_FlashWrite(XC_FMC, 0x19000 + 57, w_buff, sizeof(w_buff));
|
||||
DEBUG("Flash Write Any finish\n");
|
||||
|
||||
uint8_t r_buff[1024];
|
||||
FMC_SPI_DMA_FlashRead(XC_FMC, 0x19000, r_buff, sizeof(r_buff));
|
||||
DEBUG("Flash Read Any addr: \n");
|
||||
for (uint16_t i = 0; i < sizeof(r_buff); i++)
|
||||
PRINT("%02x ", r_buff[i]);
|
||||
PRINT("\n");
|
||||
|
||||
memset(w_buff, 0x66, sizeof(w_buff));
|
||||
FMC_SPI_DMA_FlashWrite(XC_FMC, 0x19000 + 176, w_buff, 120);
|
||||
DEBUG("Flash Write Any finish2\n");
|
||||
|
||||
FMC_SPI_DMA_FlashRead(XC_FMC, 0x19000, r_buff, sizeof(r_buff));
|
||||
DEBUG("Flash Read Any addr2: \n");
|
||||
for (uint16_t i = 0; i < sizeof(r_buff); i++)
|
||||
PRINT("%02x ", r_buff[i]);
|
||||
PRINT("\n");
|
||||
}
|
||||
Reference in New Issue
Block a user