AGM AG32 MCU+FPGA 驱动使用(三)

浏览: 作者:Rocky 来源:AGM 时间:2025-05-09 分类:FPGA应用

前言:


AGM是AG32 MCU, 可编程SoC和异构MCU的解决方案提供商, 海振远科技可提供全系列的开发板及SDK资料,方便用户从0开始,快速上手开发。

AGM AG32 MCU和FPGA 目前广泛应用于工业,消费,测试测量和医疗等场景。

AG32内置的FPGA( AGRV2K) 可升级替代EP570, EPM1270, LATTICE XO2-256,XO2-640, XO2-1200 等。

AG32 的管脚可以灵活定义,引脚与STM32。并且内置2KLE FPGA, 非常适合MCU + FPGA/CPLD的应用场景。



十、USB的使用

十一、MAC的使用

十二、SPI的使用

十三、ADC/DAC的使用



十、USB的使用

AG32已经在工程中集成tinyUSB,可自行关联使用。

usb使用到的PIN脚,是固定的管脚,不能在ve中进行改变。

目前支持:单纯device端、单纯host端、OTG自动切换主从端;

三种情况要支持的枚举类型,可以在配置头文件中自行配置。

例程位于路径examples\usb下:


1


简单应用举例(使用device样例,其他两个相似):

在device的例程中,usb被同时枚举为cdc和 msc(还支持HID和MIDI)。

1. vsCode打开该文件夹工程;

打开后如图:


2


2. 直接烧录ve和程序bin;

烧录ve:


3


烧录bin:


4


3. 上电启动,然后USB线连接到电脑(开发板上对应micro口的那个USB口)

就可以看到PC端的U盘和cdc串口,如下图:

(cdc串口)


5


(U盘)


6


如果没有显示出来,可以烧录并跟踪程序,看是否出现board_init失败(板子不同, 可能会带来board初始化的失败)

以上是demo验证。

如果要集成到自己的工程(如,要在example中使用),需要修改:

1. Platformio.ini中增加对tinyUsb的引用:


7


注意,引用多个库时,用逗号隔开,并且逗号后边要加空格。

2. ve文件中增加:


8


3. 代码部分调整:

将tinyusb下的src路径文件,修改main.c后放入example下的src。

修改点:

Main.c文件重命名;main()函数重命名;去除main()中的board_init函数;

重命名后的main函数在example下的main()中调用;

4. 编译并烧录ve和代码,即可正常运行。

在例程中,USB描述符、回调、配置(CDC、HID、MSC、MIDI)均已通过接口开放出来, 在src路径下的.c.h中。用户可根据自己的需求订制或修改。

可通过头文件中的宏来配置要开放的枚举类型:

9


更多配置部分及usb接口使用详解,可参考sdk下tinyUSB路径下的文件描述,或者参考tinyUSB官方介绍。

目前样例是cdc+msc,更多的样例工程(目前有:cdc_msc_hid_midi、两个cdc、单个cdc、单个msc、在103上集成usb),

请从网盘下载:https://pan.baidu.com/s/1wcBnqnray7bu4IURDIoDDQ?pwd=1205 目录:\其他文档\常用样例工程补充\

.

十一、MAC的使用

AG32支持MAC模块。

支持RMII/MII接口。

目前SDK中集成了Lwip2.1.0版本。在lwip样例中,使用了server端的功能。

样例使用:

打开样例工程lwip,


10


在开发板上测试例程时,步骤:

  1. 分别编译并烧录ve和code;

  2. 然后用网线连接 PC和开发板,并修改PC的IP地址为 192.168.5.2;

  3. 在PC的浏览器上输入: http://192.168.5.1

此时,可以在网页上看到开发板中展示的画面:


11


移植到自己的板子上时,注意两项配置:

1. 根据自己的板子,可能需要修改的是phy地址:


12


2. 修改ve配置文件中mac相关IO对应,如:


13


上层部分,使用什么样的网络,则自行配置lwip。

除了SDK下自带的lwip(http_server样例),网盘上还放有tcp_server和tcp_client的样例工程。

.

十二、SPI的使用

AG32支持两路SPI,分别对应:SPI0、SPI1;

两路是功能对等的。仅支持SPI-Master端。

SPI是一种全双工同步的串行通信,可支持高速数据传输。

采用主-从模式(Master-Slave) 的控制方式,通过对 Slave 设备进行片选 (Slave Select) 来控制多个 Slave 设备。

样例程序参考example_spi.c

在例程中,使用了SPI_FLASH的dma方式。

注意,这里的SPI驱动都是针对SPI_FLASH的封装,并不用于通用SPI。

SPI支持1线、2线和4线。

如果是用于通用SPI外设(非FLASH),请参考样例程序example_spi_common.c。

需要注意的是:

由于这里SPI底层是针对FLASH使用的封装,所以对通用SPI外设支持并不全面。

如果要用于普通外设,则该外设必须满足如下时序:

  • 1. SPI交互时第一段只能是tx(不能是rx);

  • 2. 收和发不能同时进行(只能是发完再收);

  • 3. 并且极性(CPOL)和相位(CPHA)的设置值都是1。

更详细的使用说明和样例,请参考example和datasheet。

补充:

从SDK1.2.4版本开始,增加了对通用SPI的支持。

原 example_spi_common.c 中提供的函数:

1. Send:单纯发送数据,字节数不限制;

2. SendAndRecv:在一个片选周期内,发送一段数据,再接收一段数据;

其中发送长度最长 4byte,接收长度不限。

(如果发送长度要更长,请自行在 C 驱动中扩展。)

这个版本开始,会在以上基础上,扩展出来两个函数:

3. Recv:单纯收取数据,接收长度不限; 

4. SendWithRecv:在发送数据的同时来收(双向传输),而不是发完后再收。

收取数据和发送数据的长度等长,并且增加了对极性和相位的设置。

但这两个函数,需要cpld的支持,用起来比较费劲。

更详细的使用说明,请参考 网盘下 \其他文档\AG32下spi的拓展使用\AG32下spi的拓展使用.pdf

.

十三、ADC/DAC的使用

ADC/DAC包含模拟电路,需要cpld部分的支持。

AG32自带一套cpld逻辑(默认ip),

在默认的ip中,支持3路ADC和2路DAC,1路比较器CMP(双通道,可独立运行)。

使用样例ADC:

在样例代码example_analog.c中,adc默认是宏关闭的。可在platformio.ini中打开该宏:


14


-DIPS_ANALOG_IP】

同时,使能默认的ip,在platformio.ini中配置:


15


然后在main()函数中放开TestAnalog() 即可。

注意,第一次打开ADC/DAC功能时,需要重新编译烧录一次ve:


16


ADC共有15个channal,每个channal均可配置到任一个ADC上。

ADC的简单使用:

参考TestAdc函数,ADC不需要在ve里管脚映射,不需要设置IO复用。

使用以下4个函数即可:


17


如果需要多次转换,则重复调用后3个函数。

如果有自己的cpld,希望裁剪ADC,或者对ADC有更高的定制,请参考网盘下ADC的专题讲解《analog中对ADC的剪裁.pdf》,以及《Analog代码分析.pdf》,这部分比较复杂。


补充信息:


AG32概述:


AG32系列32位微控制器旨在为MCU用户提供新的自由度和丰富的兼容外设以及兼容的引脚和功能。AG32VF407产品系列提供卓越的品质、稳定性和非凡的价值。


器件特征:


■ 最大 CPU 速度为 248 MHZ

■ 从 Flash 执行零等待

■ SRAM 128KB.FLASH 1MB

■ 支持浮点

■ 1个CAN2.0.5个UART2个I2C

■ 2 个基本定时器,5 个高级定时器

■ 支持 SDIO 、以太网 MAC

■ 支持 USB FS+OTG

■ 看门狗

■ 3个 12 位、最高 3M SPS ADC(17 通道)、2个 DAC

■ 2x 比较器

■ RTC, SPI

■ 内置2KLE FPGA逻辑单元


联系海振远科技

电话:0755-2780 9180;  15323895320;

邮箱: tech@hizyuan.com

Lucy@hizyuan.com