AG32VF407是內(nèi)帶2K FPGA邏輯單元的MCU芯片。雖然目前不考慮這款FPGA芯片,因為是開發(fā)筆記,就記錄一下我的學習使用過程。使用這個IDE就是想了解一下這塊MCU到底如何使用的。
安裝IDE說明
http://www.tcx-micro.com/doc_25499579.html提供了AGM MCU的開發(fā)軟件下載。需要安裝python3.8版本以上(因為AGM board的腳本使用3.8支持的語法,platformio自帶的是3.7.7,會編譯出錯)。
IDE是基于VS-code的platformio。開發(fā)軟件就是把package和platform加入到platformio環(huán)境中。
platformio/platforms
安裝之后,在用戶.platformio/platforms/中增加了AgRV的鏈接,鏈接到實際的agrv安裝目錄,下面是AgRV文件夾的內(nèi)容,boards包括多款AGM MCU board源代碼,builder下面是py編譯腳本。
AgRv目錄:
examples提供了一些有用的開發(fā)實例。
platformio/packages
下圖中的快捷鏈接都是ArGV安裝的framework和tools,包括ucoas,freertos,lwip,ips,sdk等源代碼。tools包括flash下載,jlink下載調(diào)試,logic綜合(FPGA編譯生成bit stream文件,就是supra FPGA開發(fā)軟件),risv-v編譯工具。
編譯遇到的問題
隨便用了例子在platformio中試用一下。Py腳本運行出錯,原因是platformio使用自帶的python版本是3.7.7,有些語法需要在3.8以上才能運行。編譯的時候使用platformio自帶的python。
解決:在platformio配置中禁止使用內(nèi)部python之后問題解決。
看了芯片手冊之后的疑問:2K FPGA到底怎么配置生效
手冊沒有任何有用的信息。沒有FPGA配置說明。
我從源代碼中一步一步分析了解其使用方式。
1)在platformio.ini(項目環(huán)境配置文件,格式見官網(wǎng),可以進行擴展使用)中,
?說明這個F407的邏輯設備是ARGV2K,而ARGV2K正好是AGM的另外一塊純2K FPGA芯片,下載了手冊和燒寫說明文檔,只是從JTAG進行配置FPGA,沒有其他有用信息。
通過分析F407 python編譯腳本,首先了解了可以在platformio進行fpga的編譯下載,MCU代碼和FPGA代碼是分開編譯(可以合并下載嗎?)。logic_address地址是芯片內(nèi)部flash地址(地址起始位置有什么需求嗎?)。
最后在agrv_sdk源代碼中找到了我要了解的東西。
見agrv_sdk的fcb.c, fcb.h, example_fcb.c。(FCB:flash control block)
#define FCB FCB0 // This is the only FCB supported
// To store the config address of FPGA bit stream and it's complement value
#define FPGA_CONFIG_ADDR 0x81000030
#define FPGA_CONFIG_ADDR_N 0x81000034
#define FCB_CTRL_INIT (1 << 0)
#define FCB_CTRL_WRITE (1 << 1)
#define FCB_CTRL_READ (1 << 2)
#define FCB_CTRL_UPDATE (1 << 3)
#define FCB_CTRL_ACTIVATE (1 << 4)
#define FCB_CTRL_DEACTIVATE (1 << 5)
#define FCB_CTRL_AUTO (1 << 6)
#define FCB_CTRL_DMA (1 << 7)
#define FCB_STAT_INIT (1 << 0)
#define FCB_STAT_ACTIVE (1 << 1)
#define FCB_STAT_ERR_ID (1 << 4)
#define FCB_STAT_ERR_HEADER (1 << 5)
#define FCB_STAT_ERR_CRC (1 << 6)
#define FCB_STAT_ERR_ALL (FCB_STAT_ERR_ID | FCB_STAT_ERR_HEADER | FCB_STAT_ERR_CRC)
#define FCB_AUTO_WORDS (99944 / 4)
typedef struct
{
__IO uint32_t CTRL; // 0x00
__IO uint32_t ADDR; // 0x04
__IO uint32_t DATA; // 0x08
__IO uint32_t AUTO; // 0x0c
__IO uint32_t STAT; // 0x10
__IO uint32_t INT; // 0x14
} FCB_TypeDef;
頭文件中定義了FPGA配置地址寄存器(指向bit stream文件存放在flash中的地址,用兩個word表示)。最大99944字節(jié)長。
FCB結(jié)構(gòu)圖(struct FCB_TypeDef),是內(nèi)存控制塊寄存器,指向0x4001000。進行這些寄存器進行配置操作。
#define FCB0_BASE 0x40010000
#define FCB0 ((FCB_TypeDef *) FCB0_BASE)
#define APB_MASK_FCB0 (1 << 0)
#define FCB0_DMA_REQ 5
#define FCB0_IRQn 3
兩種配置函數(shù),一種是單字節(jié)寫,一種是DMA方式。
// Fully automatic FPGA configuration. config_addr must point to configuration bit stream generated by Supra software
ReturnCodeTypedef FCB_AutoConfig(uint32_t config_addr)
{
FCB->CTRL = FCB_CTRL_AUTO;
uint32_t *ptr = (uint32_t *)config_addr;
for (int i = 0; i < FCB_AUTO_WORDS; ++i) {
FCB->AUTO = *ptr++;
}
return (FCB_IsActive() && !FCB_IsAnyError()) ? RET_OK : RET_ERR;
}
// The DMA version is about 2x faster
ReturnCodeTypedef FCB_AutoConfigDma(uint32_t config_addr, DMAC_ChannelNumTypeDef channel)
{
FCB->CTRL = FCB_CTRL_AUTO;
DMAC_WaitedTransfer(channel, config_addr, (uint32_t)(&FCB->AUTO), DMAC_ADDR_INCR_ON, DMAC_ADDR_INCR_OFF,
DMAC_WIDTH_32_BIT, DMAC_WIDTH_32_BIT, DMAC_BURST_256, DMAC_BURST_256, FCB_AUTO_WORDS,
DMAC_MEM_TO_MEM_DMA_CTRL, 0, 0);
return (FCB_IsActive() && !FCB_IsAnyError()) ? RET_OK : RET_ERR;
}
AGM MCU AG32在VSCode下的使用入門提供的信息
(見鏈接):
http://www.tcx-micro.com/doc_26309003.html
在第十節(jié)開發(fā)注意項中說明logic_address指向內(nèi)部flash地址。jtag下載bit stream文件到這個地址。(然后怎么加載生效?)
上面這個信息是今天更新的?因為我5-29號截的圖是這樣的。
?
總結(jié)一下
?集成在platfomio開發(fā)環(huán)境中進行芯片固件開發(fā)還是不錯的。同時提供了logic和固件編譯下載調(diào)試。提供了好幾種常用的framework bsp包,sdk也很完整,python腳本和c代碼寫得都很清晰,方便使用。文章來源:http://www.zghlxwxcb.cn/news/detail-588952.html
芯片手冊真的沒法詳細些嗎?memory mapping詳細說明,寄存器定義和使用這些對開發(fā)者這么重要的東西需要那么保密嗎?文章來源地址http://www.zghlxwxcb.cn/news/detail-588952.html
到了這里,關(guān)于NES(FC) FPGA游戲卡開發(fā)筆記(3)---- AGM AG32VF407開發(fā)環(huán)境的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!