Quartus18.1使用EPCQ FLASH IP及对应API的要点总结

1.在使用结构体指针  flash_region *flash_region_ptr中

虽然使用打印 flash_region_ptr -> offset + 0x00400000 时,在NIOS II Console中显示为0x00400000,但实际地址应该为 Qsys中的EPCQ Flash基地址+0x00400000(偏移量)

2.在实际开发中,更喜欢用alt_epcq_controller2_write();当写flash时,直接调用此函数即可,免去了erase_block()函数的调用。

 

Flash function从 65536 更新到 1024 应该进行的步骤及应注意的点。
1.大前提应保证函数的接口及功能与旧函数保持统一
2.先进行测试alt_epcq_controller2_erase_block可以擦除多大的范围。 是SubSector(0-FFF) = 4096;或者Sector(0-FFFF) = 65536
    通过定义epcq_controller2_erase_block中的基地址来进行测试。
    为不对EPCQ中的程序造成影响,选择BASE_ADDR = 7F0000进行测试。
    测试结论:
3.再测试alt_epcq_controller2_write_blcok可以写多大的范围。BTW:按照推测,应该和erase_block的范围一致。
4.通过代码测试发现
alt_epce_controller2_write()函数的最大写数量为65536。当len>65536时,仍按照65536进行写操作。
发现奇怪现象:在测试代码中,先擦除2*65536后再使用write函数写65536*2bytes 成功
但直接写47*65536时,实际寄存器中只有65563bytes被写。
进一步判断write函数只能擦写最大值65536bytes。通过进一步确定发现。
最后推断write函数只能写65536bytes 正如注释中所言,该函数与write_block函数的差别就是write中包含了erase操作。
将更改后的函数放入 main() 中运行 ,发现恢复正常。

通过更改后得,发现上位机控制的bin文件烧录仍不成功。

现在使用resume进行调试:
1.确定上位机发送的数是否满足新函数的要求。
2.验证code_updata()是否好使
3.验证flash_read_to_ddr是否好使

↑ 已完成,上位机显示SUCCESS

但是断电后无法运行。分析原因:
1.EPCQ 中地址配置错误,需要查一下相关资料看一下avl_csr和avl_mem的区别

2.可能flash读出时出现错误。经验证发现,读出数据不一致,通过debug看一下地址test_flash1_ValuePointor中的数据到底是个啥啊!


3.可能flash写入之后又被其他代码覆盖。




posted @ 2020-03-12 16:25  桂七二  阅读(1072)  评论(0编辑  收藏  举报