我正在尝试使用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打开文件的任何帮助都将是一个很大的帮助。

最佳答案

ice40映像需要包含在stm32F4映像中。至少有两种可能性。


正如在另一个答案中建议的那样。让链接器完成这项工作。 GCC链接器可以包含任意二进制数据,概述了几种方法here。这需要使用objcopy或对链接描述文件的修改。
创建一个小的实用程序,将二进制ice40映像转换为C数据对象,如下所示(警告,未经充分测试的代码):

#include <stdio.h>
int main( void ) {
        int i=0,c;
        printf( "#include <stdint.h>\nconst uint8_t ice40image[] = {\n" );
        while ( (c = getchar()) != EOF )
                printf( "%#2.2x%s", c, (++i & 15) ? "," : ",\n" );
        printf( "};\n#define ICE40IMAGE_LEN %d\n", i );
        return 0;
}


二进制ice40图像被转换为​​头文件:


  ./bin2uint8_t < ice40image.bin > ice40image.h


并且ice40image.h包含在stm32F4程序中。我更喜欢这种方法,它适合于以后的改进,例如压缩FPGA映像(它的长期运行时间通常为0x00)。

关于c - 如何使用微 Controller 对莱迪思iCE40 Ultra进行编程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57877398/

10-16 06:39