我正在尝试使用 stm32F4 微控制器对 iCE40 超 FPGA 进行编程,并且我试图弄清楚如何将配置文件加载到微控制器上,以便它可以通过 SPI 发送到 FPGA 进行编程。应用笔记说这可以完成并且有一些伪代码,但它似乎是用于计算机而不是微控制器。微型和 FPGA 都在我设计的 PCB 上,它们之间有一个 SPI 通道。这将在编程后用于两者之间的通信。
配置文件是 .bin 文件或 .hex 文件,我不确定如何将这些文件之一加载到 stm32 并将其发送到 FPGA。我正在尝试这样做,因为我希望不必购买编程电缆并在我的 PCB 上包含闪存来存储程序,因为我已经需要微型和 FPGA 之间的 SPI 通信来实现我希望制作的应用程序事情对我自己来说更容易,并且可能会做相反的事情......
这是我编写的用于发送文件的函数。我知道我需要以某种方式打开文件并将其发送出去。所有其他时序都来自 FPGA 的编程协会。
static void FPGA_Programming(void){
char FPGA_TimeOut = 0; // Error timeout
uint8_t dummyBits[7];
for(char i = 0; i < 7; i++){ // loads dummy bits to be transmitted
dummyBits[i] = 0b01010101;
}
/* Write FPGA config pin and SS to low for at least 200 ns to reset and start FPGA
* in SPI Slave Configuration
*/
HAL_GPIO_WritePin(FPGA_Config_GPIO_Port, FPGA_Config_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(FPGA_SS_GPIO_Port,FPGA_SS_Pin, GPIO_PIN_RESET);
HAL_Delay(1);
HAL_GPIO_WritePin(FPGA_Config_GPIO_Port, FPGA_Config_Pin, GPIO_PIN_SET); // Set high to turn on FPGA THIS PIN SHOULD STAY HIGH!
HAL_Delay(2); // Wait for FPGA to clear sys memory
// SEND FPGA CONFIG FILE
while(!HAL_GPIO_ReadPin(FPGA_CDone_GPIO_Port, FPGA_CDone_Pin)){ // wait for CDone to go high when config is done and successfull
HAL_Delay(1);
if (FPGA_TimeOut == 5) { // if 5 milliseconds have passed and CDone has not gone low
// send to debug FPGA ERROR Programming
break;
}
FPGA_TimeOut++;
}
HAL_SPI_Transmit(&hspi1, dummyBits, 7, 10 ); // wait for FPGA to start
}
任何有关加载文件和使用 micro 打开文件的帮助都会有很大帮助。