fpga调试笔记

# 前言 调试过程中, fpga经常不通, 情况有很多种, 特在此记录 # 编译错误 之前编译的时候, 忘记把新的代码引用了, 导致一直引用老代码的头文件 # pll错误(记忆模糊) 这个是之前编译的时候, 有个信号被拉错了电平, 进口和国产的电平是相反的, 在切换芯片的过程中, 这一块忘记调整了 # mcu代码没移植好 我移植的时候, 是参考了mcu 405 -> 402的版本节点, 还没有移植fpga, 导致spi初始化fpga的时候, 相应的代码没有加上, 例如控制MODE0, MODE1 国产fpga的初始化条件: | | | | --- | --- | | CLKHOLD_N | 需要上拉 | | READY | 会呈现出高电平 | | RESET | 需要上拉 | | MODE0(IO2) | 需要上拉 | | MODE1(IO3) | 需要下拉 | | DONE | 满足上述条件并初始化后, 会呈现出高电平 | | TCK | 4.7k下拉 | # 引脚画错 移植一款产品的时候, fpga一直不通, 尝试过改中断信号里的选项, 反复检查手动修改GPIO功能的代码, 也不行 我们把一个理论上好的fpga固件烧录到另外一个产品里, 理论上应该是通的才对, 结果也不通 结果是spi的sck脚画错了, 因为这个方案用很多次了, 根本想不到会以这种方式出错, 所以这一块一开始没有检查 # GPIO配置错误 因为把IO3改为了GPIOC, 知道要添加一个GPIOC的配置, 添加如下: ``` gpio_init_type gpio_init_struct_c = { .gpio_drive_strength = GPIO_DRIVE_STRENGTH_MODERATE, .gpio_out_type = GPIO_OUTPUT_PUSH_PULL, .gpio_mode = GPIO_MODE_MUX, .gpio_pull = GPIO_PULL_NONE, .gpio_pins = qspi_io3.num }; ``` 但是怎么试都不行, 结果是因为用这个配置的时候, 没有指定用在GPIOC上: ``` gpio_init(GPIOB, &gpio_init_struct_c); ... gpio_init_struct_b.gpio_pins = qspi_io3.num; gpio_init_struct_b.gpio_mode = GPIO_MODE_OUTPUT; gpio_init(GPIOB, &gpio_init_struct_c); ``` 改一下就好了: ``` gpio_init(GPIOC, &gpio_init_struct_c); ... gpio_init_struct_c.gpio_pins = qspi_io3.num; gpio_init_struct_c.gpio_mode = GPIO_MODE_OUTPUT; gpio_init(GPIOC, &gpio_init_struct_c); ```

评论