我试图用iCE40单片机编写一个stm32F4超级FPGA程序,并试图弄清楚如何将配置文件加载到微控制器上,以便通过SPI将配置文件发送给FPGA进行编程。应用程序说明说,这是可以做到的,并有一些伪代码,但它似乎是用于计算机,而不是微控制器。微型和FPGA都在我设计的PCB上,它们之间有一个SPI通道。这将在编程之后使用,只用于两者之间的通信。
配置文件是一个.bin文件或.hex文件,我不知道如何将其中一个文件加载到stm32并将其发送到stm32。我试图这样做,因为我希望不需要购买一个编程电缆,并包括闪存在我的PCB存储程序,因为我已经需要SPI通信之间的微型和FPGA之间的应用,我希望使事情更容易对我自己,可能做了相反的…
下面是我编写的发送文件的函数。我知道我需要以某种方式打开这个文件并把它传过去。所有其他的时间来源于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
}任何帮助加载文件和打开它与微将是一个很大的帮助。
发布于 2019-09-19 07:38:12
ice40映像需要包含在stm32F4映像中。至少有两种可能性。
objcopy或对链接器脚本进行修改。./bin2uint8_t < ice40image.bin > ice40image.hice40image.h包含在您的stm32F4程序中。我更喜欢这种方法,它有助于以后的改进,例如压缩FPGA图像(它的长运行时间通常为0x00)。在我看来,在项目iceStorm中,一个非常好的实用程序是“icecmpr”,参见https://github.com/cliffordwolf/icestorm/tree/master/icecompr。
发布于 2019-09-11 08:38:32
如果使用GCC和binutils作为编译器/链接器系统,则可以使用objcopy从任何二进制文件生成可链接模块。然后,可以将其链接到控制器的只读数据空间,并从程序中访问。
https://stackoverflow.com/questions/57877398
复制相似问题