这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
icore3_arm_hal_24 [2020/09/16 17:08] fmj 创建 |
icore3_arm_hal_24 [2022/03/18 15:11] (当前版本) sean |
||
---|---|---|---|
行 1: | 行 1: | ||
- | | **银杏科技有限公司旗下技术文档发布平台** |||| | + | |**银杏科技有限公司旗下技术文档发布平台** |||| |
- | | 技术支持电话 |**0379-69926675-801** ||| | + | |技术支持电话|**0379-69926675-801** ||| |
- | | 技术支持邮件 |Gingko@vip.163.com ||| | + | |技术支持邮件|Gingko@vip.163.com ||| |
- | | 购买链接 |[[https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4024-22598974114.1.5923532fw67dqQ&id=524229438677&scene=taobao_shop|点击购买]]||| | + | |
^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ||
- | | V0.1 |20200103 |XiaomaGee| 初次建立 | | + | | V1.0 | 2020-08-01 | gingko | 初次建立 | |
- | + | \\ | |
- | + | \\ | |
- | ====== iCore3异构双核心板 ====== | + | \\ |
+ | \\ | ||
\\ | \\ | ||
- | ===== 0、基础资料下载 ===== | ||
- | | **序 号** | **名 称** | **下载链接** | | ||
- | |1|**原理图:** |{{ :icore3:icore3.revb2_彩色.pdf |iCore3原理图.pdf}}| | ||
- | |2|**扩展引脚分布:**|{{ :icore3:icore3扩展引脚分布v1.1.pdf |iCore3扩展引脚分布v1.1.pdf}}| | ||
- | |3|**机械尺寸:** |{{ :icore3:icore3机械尺寸图.pdf |iCore3机械尺寸图.pdf}}| | ||
- | |4|**用户手册:** |{{ :icore3:icore3_硬件手册v1.0.pdf |iCore3硬件手册v1.0.pdf}}| | ||
- | |5| **出厂测试说明** |{{ :icore3:icore3_demov1.0说明.pdf |iCore3_demov1.0说明.pdf}} | | ||
- | |6|**测试demo**|{{ :icore3:icore3_demo.zip |iCore3_demo.zip}} | | ||
- | |7|PCB库:|购买后提供| | ||
- | |8|PCB图:|购买后提供| | ||
- | |9|原理图符号:|购买后提供| | ||
- | |10|iCore3封装库及使用说明V1.0:|购买后提供| | ||
- | |11|iCore3二次开发硬件手册:|购买后提供| | ||
- | |12|iCore3_ADM资料包:| 购买后提供| | ||
- | |13|ARM实验例程:| 购买后提供| | ||
- | |14|FPGA实验例程:|购买后提供| | ||
- | ===== ARM实验例程(标准外设库) ===== | + | ===== STM32CubeMX教程二十四——LAN_TCPS实验 ===== |
- | |例程一 |[[读取ARM按键状态(标准外设库) ]] | | + | 1. 新建工程:在主界面选择File-->New Project 或者直接点击ACCEE TO MCU SELECTOR |
- | |例程三 |[[EXTI中断输入实验——读取ARM按键状态(标准外设库)]]| | + | {{ :icore3:icore3_cube_24_1.png?direct | }} |
- | |例程四 |[[USART通信实验——通过命令控制LED(标准外设库) ]] | | + | 2. 出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置 |
- | |例程五 |[[SYSTICK定时器实验——定时点亮LED(标准外设库)]] | | + | 在搜索栏的下面,提供的各种查找方式,可以选择芯片内核、型号等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32F407IGTx。 |
- | |例程六 |[[IWDG看门狗实验——复位ARM(标准外设库)]] | | + | {{ :icore3:icore3_cube_24_2.png?direct | }} |
- | |例程七 |[[WWDG看门狗实验——复位ARM(标准外设库)]] | | + | 3. 配置RCC,使用外部时钟源 |
- | |例程八 |[[定时器PWM实验——呼吸灯(标准外设库) ]] | | + | {{ :icore3:icore3_cube_24_3.png?direct | }} |
- | |例程九 |[[ADC实验——电源监控(标准外设库)]] | | + | 4. 配置调试引脚 |
- | |例程十 |[[RTC实时时钟实验—显示日期和时间(标准外设库)]] | | + | {{ :icore3:icore3_cube_24_4.png?direct | }} |
- | |例程十一 |[[DMA实验——存储器到存储器的传输(标准外设库)]] | | + | 5. 将LED对应的3个引脚(PI5,PI6,PI7)设置为GPIO_Output |
- | |例程十二 |[[通用定时器实验——定时点亮LED(标准外设库)]] | | + | {{ :icore3:icore3_cube_24_5.png?direct | }} |
- | |例程十三 |[[SDIO实验——读取SD卡信息(标准外设库)]] | | + | 6. 引脚模式配置 |
- | |例程十四 |[[FATFS实验——文件操作(标准外设库)]] | | + | {{ :icore3:icore3_cube_24_6.png?direct | }} |
- | |例程十五 |[[USB_CDC实验——高速数据传输(标准外设库)]] | | + | 7. 选中SPI1,Mode选择Full_Duplex Master,配置PB3(SPI1_SCK)、PB4(SPI1_MISO)、PA7(SPI1_MOSI)和PA15(CS)为SPI引脚。 |
- | |例程十六 |[[USB_HID实验——双向数据传输(标准外设库) ]] | | + | {{ :icore3:icore3_cube_24_7.png?direct | }} |
- | |例程十七 |[[USB_MSC实验——读/写U盘(大容量存储器)(标准外设库)]] | | + | 配置PA15(CS)的GPIO输出模式 |
- | |例程十八 |[[USB_VCP实验——虚拟串口灯(标准外设库)]] | | + | {{ :icore3:icore3_cube_24_8.png?direct | }} |
- | |例程十九 |[[SBD_MSC实验——虚拟U盘(标准外设库) ]] | | + | 8. 时钟源设置,选择外部高速时钟源,配置为最大主频 |
- | |例程二十 |[[LAN_TCPC实验——以太网数据传输(标准外设库) ]] | | + | {{ :icore3:icore3_cube_24_9.png?direct | }} |
- | |例程二十一 |[[LAN_TCPS实验——以太网数据传输(标准外设库)]] | | + | |
- | |例程二十二 |[[LAN_UDP实验——以太网数据传输(标准外设库)]] | | + | |
- | |例程二十三 |[[LAN_HTTP实验——网页服务器(标准外设库)]] | | + | |
- | |例程二十四 |[[LAN_DHCP实验——动态分配IP地址(标准外设库) ]] | | + | |
- | |例程二十五 |[[LAN_DNS实验——域名解析(标准外设库)]] | | + | |
- | |例程二十六 |[[MODBUS TCP实验——电源监控(标准外设库) ]] | | + | |
- | |例程二十七 |[[DMA LAN实验——高速数据传输测速(标准外设库)]] | | + | |
- | |例程二十八 |[[FSMC实验——读写FPGA(标准外设库)]] | | + | |
- | |例程二十九 |[[SD_IAP_FPGA实验——更新升级FPGA(标准外设库)]] | | + | |
- | |例程三十 |[[U_DISK_IAP_FPGA实验——更新升级FPGA(标准外设库)]] | | + | |
- | |例程三十一 |[[AHTTP_IAP_FPGA实验——更新升级FPGA ARM驱动三色LED灯(标准外设库)]] | | + | |
- | |例程三十二 |[[UART_IAP_ARM实验——更新升级STM32(标准外设库) ]] | | + | |
- | |例程三十三 |[[SD_IAP_ARM实验——更新升级STM32(标准外设库)]] | | + | |
- | |例程三十四 |[[U_DISK_IAP_ARM实验——更新升级STM32(标准外设库)]] | | + | |
- | |例程三十五 |[[HTTP_IAP_ARM实验——更新升级 STM32(标准外设库)]] | | + | |
- | |例程三十六 |[[DAC实验——输出直流电压(标准外设库) ]] | | + | |
- | ===== ARM实验例程(基于HAL库) ===== | + | 9. 工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可 IDE我们使用的是 MDK5 |
- | | 例程一 |[[iCore3_arm_hal_1|认识STM32——环境搭建与调试下载(HAL库)]] | | + | {{ :icore3:icore3_cube_24_10.png?direct | }} |
- | | 例程二 |[[iCore3_arm_hal_2|GPIO输出实验——ARM驱动三色LED(HAL库)]] | | + | 10. 点击Code Generator,进行进一步配置 |
- | | 例程三 |[[iCore3_arm_hal_3|GPIO输入实验——读取ARM按键状态(HAL库)]] | | + | {{ :icore3:icore3_cube_24_11.png?direct | }} |
- | | 例程四 |[[iCore3_arm_hal_4|EXTI外部中断输入实验——读取ARM按键状态(HAL库)]] | | + | * **Copy all used libraries into the project folder** |
- | | 例程五 |[[iCore3_arm_hal_5|UART通信实验——通过命令控制LED(HAL库)]] | | + | * 将HAL库的所有.C和.H都复制到所建工程中 |
- | | 例程六 |[[iCore3_arm_hal_6|SYSTICK定时器实验——定时点亮LED(HAL库)]] | | + | * 优点:这样如果后续需要新增其他外设又可能不再用STM32CubeMX的时候便会很方便 |
- | | 例程七 |[[iCore3_arm_hal_7|IWDG看门狗实验——复位ARM(HAL库)]] | | + | * 缺点:体积大,编译时间很长 |
- | | 例程八 |[[iCore3_arm_hal_8|WWDG看门狗实验——复位ARM(HAL库)]] | | + | * **Copy only the necessary library files** |
- | | 例程九 |[[iCore3_arm_hal_9|定时器PWM实验——呼吸灯(HAL库)]] | | + | * 只复制所需要的.C和.H(推荐) |
- | | 例程十 |[[iCore3_arm_hal_10|ADC实验——电源监控(HAL库)]] | | + | * 优点:体积相对小,编译时间短,并且工程可复制拷贝 |
- | | 例程十一 |[[iCore3_arm_hal_11|DAC实验——输出直流电压(HAL库)]] | | + | * 缺点:新增外设时需要重新用STM32CubeMX导入 |
- | | 例程十二 |[[iCore3_arm_hal_12|DAC实验——DDS输出正弦波(HAL库)]] | | + | * **Add necessary library files as reference in the toolchain project configuration file** |
- | | 例程十三 |[[iCore3_arm_hal_13|RTC实时时钟实验——显示日期和时间(HAL库)]] | | + | * 不复制文件,直接从软件包存放位置导入.C和.H |
- | | 例程十四 |[[iCore3_arm_hal_14|DMA实验——储存器到存储器的传输(HAL库)]] | | + | * 优点:体积小,比较节约硬盘空间 |
- | | 例程十五 |[[iCore3_arm_hal_15|通用定时器实验——定时点亮LED(HAL库)]] | | + | * 缺点:复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径 |
- | | 例程十六 |[[iCore3_arm_hal_16|SDIO实验——读取SD卡信息(HAL库)]] | | + | 自行选择方式即可 |
- | | 例程十七 |[[iCore3_arm_hal_17|FATFS实验——文件操作(HAL库)]] | | + | |
- | | 例程十八 |[[iCore3_arm_hal_18|USB_CDC实验——高速数据传输(HAL库)]] | | + | |
- | | 例程十九 |[[iCore3_arm_hal_19|USB_HID实验——双向数据传输(HAL库)]] | | + | |
- | | 例程二十 |[[iCore3_arm_hal_20|USB_MSC实验——读/写U盘(大容量存储器)(HAL库)]] | | + | |
- | | 例程二十一 |[[iCore3_arm_hal_21|USB_VCP实验——虚拟串口(HAL库)]] | | + | |
- | | 例程二十二 |[[iCore3_arm_hal_22|USBD_MSC实验——虚拟U盘(HAL库)]] | | + | |
- | | 例程二十三 |[[iCore3_arm_hal_23|LAN_TCPC实验——以太网数据传输(HAL库)]] | | + | |
- | | 例程二十四 |[[iCore3_arm_hal_24|LAN_TCPS实验——以太网数据传输(HAL库)]] | | + | |
- | | 例程二十五 |[[iCore3_arm_hal_25|LAN_UDP实验——以太网数据传输(HAL库)]] | | + | |
- | | 例程二十六 |[[iCore3_arm_hal_26|LAN_HTTP实验——网页服务器(HAL库)]] | | + | |
- | | 例程二十七 |[[iCore3_arm_hal_27|LAN_DHCP实验——动态分配IP地址(HAL库)]] | | + | |
- | | 例程二十八 |[[iCore3_arm_hal_28|LAN_DNS实验——域名解析(HAL库)]] | | + | |
- | | 例程二十九 |[[iCore3_arm_hal_29|MODBUS TCP实验——电源监控(HAL库)]] | | + | |
- | |例程三十|[[iCore3_arm_hal_30|DAM_LAN实验——高速数据传输(HAL库)]] | | + | |
- | |例程三十一|[[iCore3_arm_hal_31|FSMC实验——读写FPGA(HAL库)]] | | + | |
- | |例程三十二|[[iCore3_arm_hal_32|DMA实验——读写FPGA(HAL库)]] | | + | |
- | |例程三十三|[[iCore3_arm_hal_33|SD_IAP_FPGA实验——更新升级FPGA(HAL库)]] | | + | |
- | |例程三十四|[[iCore3_arm_hal_34|U_DISK_IAP_FPGA实验——更新升级FPGA(HAL库)]] | | + | |
- | |例程三十五|[[iCore3_arm_hal_35|HTTP_IAP_FPGA实验——更新升级FPGA(HAL库)]] | | + | |
- | |例程三十六|[[iCore3_arm_hal_36|UART_IAP_ARM实验——更新升级STM32(HAL库)]] | | + | |
- | |例程三十七|[[iCore3_arm_hal_37|SD_IAP_ARM实验——更新升级STM32(HAL库)]] | | + | |
- | |例程三十八|[[iCore3_arm_hal_38|U_DISK_IAP_ARM实验——更新升级STM32(HAL库)]] | | + | |
- | |例程三十九|[[iCore3_arm_hal_39|HTTP_IAP_ARM实验——更新升级STM32(HAL库)]] | | + | |
- | |例程四十|[[iCore3_arm_hal_40|STM32产生随机数据实验(HAL库)]] | | + | |
- | |例程四十一|[[iCore3_arm_hal_41|DSP_MATH实验(HAL库)]] | | + | |
- | + | ||
- | ===== MicroPython ARM 例程 ===== | + | |
+ | 11. 然后点击GENERATE CODE 创建工程 | ||
+ | {{ :icore3:icore3_cube_24_12.png?direct | }} | ||
+ | 创建成功,打开工程。 | ||
- | | 例程一 |[[iCore3_MicroPython_1 |MicroPython 固件烧录]] | | + | \\ |
- | | 例程二 |[[iCore3_MicroPython_2 |MicorPython 驱动三色LED ]] | | + | \\ |
- | | 例程三 |[[iCore3_MicroPython_3 |MicorPython 读取按键状态 ]] | | + | \\ |
- | | 例程四 |[[iCore3_MicroPython_4 |MicorPython EXTI外部中断 ]] | | + | \\ |
- | | 例程五 |[[iCore3_MicroPython_5 |MicorPython UART串口通讯 ]] | | + | |
- | | 例程六 |[[iCore3_MicroPython_6 |MicorPython 定时器实验 ]] | | + | |
- | | 例程七 |[[iCore3_MicroPython_7 |MicorPython 看门狗实验 ]] | | + | |
- | | 例程八 |[[iCore3_MicroPython_8 |MicorPython PWM呼吸灯 ]] | | + | |
- | | 例程九 |[[iCore3_MicroPython_9 |MicorPython DAC实验 ]] | | + | |
- | | 例程十 |[[iCore3_MicroPython_10 |MicorPython RTC实时时钟实验 ]] | | + | |
- | | 例程十一 |[[iCore3_MicroPython_11 |MicorPython SDIO实验 ]] | | + | |
- | | 例程十二 |[[iCore3_MicroPython_12 |MicorPython 文件操作实验 ]] | | + | |
- | | 例程十三 |[[iCore3_MicroPython_13 |MicorPython 导入自写Python模块]] | | + | |
- | | 例程十四 |[[iCore3_MicroPython_14 |MicorPython USB_VCP虚拟串口 ]] | | + | |
- | | 例程十五 |[[iCore3_MicroPython_15 |MicorPython 多线程实验 ]] | | + | |
- | | 例程十六 |[[iCore3_MicroPython_16 |MicorPython TF卡虚拟成U盘 ]] | | + | |
- | | 例程十七 |[[iCore3_MicroPython_17 |MicorPython ADC实验 ]] | | + | |
- | | 例程十八 |[[iCore3_MicroPython_18 |MicorPython TCP客户端实验 ]] | | + | |
- | | 例程十九 |[[iCore3_MicroPython_19 |MicorPython TCP服务器实验 ]] | | + | |
- | | 例程二十 |[[iCore3_MicroPython_20 |MicorPython UDP通信实验 ]] | | + | |
- | | 例程二十一 |[[iCore3_MicroPython_21 |MicorPython RAM-FPGA SPI通信 ]] | | + | |
- | | 例程二十二 |[[iCore3_MicroPython_22 |MicorPython RAM-FPGA I2C通信 ]] | | + | |
- | | 例程二十三 |[[iCore3_MicroPython_23 |MicorPython 等待更新 ]] | | + | |
- | | 例程二十四 |[[iCore3_MicroPython_24 |MicorPython 等待更新 ]] | | + | |
- | | 例程二十五 |[[iCore3_MicroPython_25 |MicorPython 等待更新 ]] | | + | |
- | ===== FPGA实验例程 ===== | + | ===== 实验二十四:LAN_TCPS实验——以太网数据传输 ===== |
- | | 例程一 |[[iCore3_FPGA_ |认识FPGA——环境搭建与调试下载]] | | + | ==== 一、 实验目的与意义 ==== |
- | | 例程二 |[[iCore3_FPGA_2 |GPIO输出实验——点亮三色LED]] | | + | - 了解STM32的SPI和W5500的TCPS结构 |
- | | 例程三 |[[iCore3_FPGA_3 |GPIO输入实验——识别按键输入]] | | + | - 了解STM32的SPI和W5500的TCPS特征 |
- | | 例程四 |[[iCore3_FPGA_4 |Tcl脚本实验——配置引脚]] | | + | - 掌握STM32 HAL库中SPI和TCPS的配置方法 |
- | | 例程五 |[[iCore3_FPGA_5 |Signal Tapll实验——逻辑分析仪]] | | + | - 掌握STM32CubeMX的使用方法 |
- | | 例程六 |[[iCore3_FPGA_6 |计数器实验——计数器使用]] | | + | - 掌握KEIL MDK集成开发环境使用方法 |
- | | 例程七 |[[iCore3_FPGA_7 |基础逻辑门实验——逻辑门使用]] | | + | |
- | | 例程八 |[[iCore3_FPGA_8 |触发器实验——触发器的使用]] | | + | |
- | | 例程九 |[[iCore3_FPGA_9 |状态机实验——状态机使用]] | | + | |
- | | 例程十 |[[iCore3_FPGA_10 |锁相环实验——锁相环使用]] | | + | |
- | | 例程十一 |[[iCore3_FPGA_11 |乘法器实验——乘法器使用]] | | + | |
- | | 例程十二 |[[iCore3_FPGA_12 |Modelsim仿真实验]] | | + | |
- | | 例程十三 |[[iCore3_FPGA_13 |FSMC总线通信实验——复用地址模式]] | | + | |
- | | 例程十四 |[[iCore3_FPGA_14 |FSMC总线通信实验——独立地址模式]] | | + | |
- | | 例程十五 |[[iCore3_FPGA_15 |基于USART的ARM与FPGA通信实验]] | | + | |
- | | 例程十六 |[[iCore3_FPGA_16 |基于SPI总线的ARM与FPGA通信实验]] | | + | |
- | | 例程十七 |[[iCore3_FPGA_17 |基于I2C总线的ARM与FPGA通信实验]] | | + | |
- | | 例程十八 |[[iCore3_FPGA_18 |基于单口RAM的ARM+FPGA数据存取实验 ]] | | + | |
- | | 例程十九 |[[iCore3_FPGA_19 |基于双口RAM的ARM+FPGA数据存取实验]] | | + | |
- | | 例程二十 |[[iCore3_FPGA_20 |基于FIFO的ARM+FPGA数据存取实验]] | | + | |
- | | 例程二十一 |[[iCore3_FPGA_21 |Niosii——基于内部RAM建立第一个软核]] | | + | |
- | | 例程二十二 |[[iCore3_FPGA_22 |Niosii——固化程序到 EPCS 里]] | | + | |
- | | 例程二十三 |[[iCore3_FPGA_23 |使用JTAG UART终端打印信息]] | | + | |
- | | 例程二十四 |[[iCore3_FPGA_24 |Niosii——SDRAM读写实验]] | | + | |
- | | 例程二十五 |[[iCore3_FPGA_25 |NIOS II之UART串口通信实验 ]] | | + | |
- | | 例程二十六 |[[iCore3_FPGA_26 |SDRAM读写测试实验]] | | + | |
- | | 例程二十七 |[[iCore3_FPGA_27 |基于SDRAM的TFT驱动器的设计]] | | + | |
- | | 例程二十八 |[[iCore3_FPGA_28 |基于SDRAM 的VGA 驱动器的设计]] | | + | |
- | | 例程二十九 |[[VGA驱动器的设计]] | | + | |
- | | 例程三十 |[[TFT_LCD彩条显示实验]] | | + | |
- | | 例程三十一 |[[TFT_LCD触摸屏实验]] | | + | |
- | | 例程三十二 |[[千兆以太网实验]] | | + | |
- | | 例程三十三 |[[基于ARM+FPGA的高速AD采集传输实验(AD9226)]]| | + | |
- | ===== 1 介绍 ===== | + | ==== 二、 实验设备及平台 ==== |
- | * iCore3双核心工控板是银杏公司推出的第三代iCore系列双核心板;由于其独特的ARM+FPGA的“万金油”式双核心结构,使得其能用于诸多测试测量及控制领域。“ARM”核心采用Coretex-M4内核的STM32F407IGT6,负责功能实现、事件处理及接口等 功能。“FPGA”核心采用AlteraCyclone系列第四代产品EP4CE10F17C8N,作为“逻辑器件”角 色(亦可以说成“并行”执行角色),负责并行处理、实时性处理及逻辑管理等功能。两个核心数据交换的便利性及实时性,使得两个核心“拧成一股绳”,以应对越来越高的测试测量 及自动控制类产品功能、性能的需求。 | + | |
+ | - iCore3 双核心板。[[https://item.taobao.com/item.htm?spm=a1z10.1-c.w4024-251734887.3.5923532fXD2RIN&id=524229438677&scene=taobao_shop|点击购买]] | ||
+ | - JLINK(或相同功能)仿真器。[[https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-251734908.13.20822b61MmPeNN&id=554869837940|点击购买]] | ||
+ | - Micro USB线缆。 | ||
+ | - 网线 | ||
+ | - Keil MDK 开发平台。 | ||
+ | - STM32CubeMX开发平台。 | ||
+ | - 装有WIN XP(及更高版本)系统的计算机。 | ||
+ | ==== 三、 实验原理 ==== | ||
+ | === 1、SPI简介 === | ||
+ | * SPI是串行外围设备接口,全称Serial Peripheral interface,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线。主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。 | ||
+ | * SPI 主要特点有: | ||
+ | - 可以同时发出和接收串行数据; | ||
+ | - 可以当作主机或从机工作; | ||
+ | - 提供频率可编程时钟; | ||
+ | - 发送结束中断标志; | ||
+ | - 写冲突保护; | ||
+ | - 总线竞争保护等; | ||
+ | * SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,它们是MISO(主设备数据输入)、MOSI(主设备数据输出)、SCLK(时钟)、CS(片选)。 | ||
+ | - MISO 主设备数据输入,从设备数据输出。 | ||
+ | - MOSI 主设备数据输出,从设备数据输入。 | ||
+ | - SCLK时钟信号,由主设备产生。 | ||
+ | - CS从设备片选信号,由主设备控制。当有多个从设备的时候,因为每个从设备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需要将从设备对应的片选引脚电平拉低或者是拉高。 | ||
+ | {{ :icore3:icore3_arm_hal_24_1.png?direct |}} | ||
+ | * 在一个SPI时钟周期内,会完成如下操作: | ||
+ | - 主设备通过MOSI线发送1位数据,从设备通过该线读取这1位数据; | ||
+ | - 从设备通过MISO线发送1位数据,主设备通过该线读取这1位数据。 | ||
+ | * 这是通过移位寄存器来实现的。主机和从机都有一个串行移位寄存器,随着时钟脉冲,数据按照从高位到低位的方式依次移出主设备寄存器和从机寄存器,并且依次移入从设备寄存器和主设备寄存器。当寄存器中的内容全部移出时,相当于完成了两个寄存器内容的交换。 | ||
+ | * 主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。寄存器通过MOSI信号线将字节传送给主机,从机也将自己的移位寄存器中的内容通过MISO信号线返回给主机,这样两个移位寄存器中的内容就被交换,外设的写操作和读操作是同时进行的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。 | ||
+ | {{ :icore3:icore3_arm_hal_24_2.png?direct |}} | ||
+ | * iCore3 双核心板采用的ARM控制器为STM32F407IGT6,SPI接口引脚选用的是PB3(SPI1_SCK)、PB4(SPI1_MISO)、PA7(SPI1_MOSI)和PA15(CS)这4个引脚。初始化SPI,通过SPI读写控制W5500内部寄存器。 | ||
+ | {{ :icore3:icore3_arm_hal_24_3.png?direct |}} | ||
+ | {{ :icore3:icore3_arm_hal_24_4.png?direct |}} | ||
+ | {{ :icore3:icore3_arm_hal_24_5.png?direct |}} | ||
+ | === 2、W5500简介 === | ||
+ | * W5500是一款全硬件TCP/IP嵌入式以太网控制器,为嵌入式系统提供了更加简易的互联网连接方案。W5500集成了TCP/IP协议栈,10/100M以太网数据链路层(MAC)及物理层(PHY),使得用户使用单芯片就能够在他们的应用中拓展网络连接。久经市场考验的WIZnet全硬件TCP/IP协议栈支持TCP,UDP,IPv4,ICMP,ARP,IGMP 以及PPPoE协议。W5500内嵌32K字节片上缓存以供以太网包处理。如果你使用W5500,你只需要一些简单的Socket编程就能实现以太网应用。这将会比其他嵌入式以太网方案更加快捷、简便。用户可以同时使用8个硬件Socket独立通讯。W5500提供了SPI(外设串行接口)从而能够更加容易与外设MCU整合。而且,W5500使用了新的高效SPI协议支持80MHz速率,从而能够更好的实现高速网络通讯。 | ||
+ | * W5500 有 1 个通用寄存器, 8 个 Socket 寄存器区,以及对应每个 Socket 的收发缓存区。每个区域均通过 SPI 数据帧的区域选择位(BSB[4:0])来选取。 | ||
+ | * (1)通用寄存器区配置了 W5500 的基本信息。 | ||
+ | * GAR (网关 IP 地址寄存器) [R/W] [0x0001 – 0x0004] [0x00] | ||
+ | * 该寄存器用来设置默认网关地址,例如: “192.168.0.1”。 | ||
+ | {{ :icore3:icore3_arm_hal_24_6.png?direct |}} | ||
+ | * SUBR (子网掩码寄存器) [R/W] [0x0005 – 0x0008] [0x00] | ||
+ | * 该寄存器用来设置子网掩码地址,例如“255.255.255.0”。 | ||
+ | {{ :icore3:icore3_arm_hal_24_7.png?direct |}} | ||
+ | * SHAR (源 MAC 地址寄存器) [R/W] [0x0009 – 0x000E] [0x00] | ||
+ | * 该寄存器用来设置源 MAC 地址。例如: “00.08.DC.01.02.03”。 | ||
+ | {{ :icore3:icore3_arm_hal_24_8.png?direct |}} | ||
+ | * SIPR (源 IP 地址寄存器) [R/W] [0x000F – 0x0012] [0x00] | ||
+ | * 该寄存器用来设置源 IP 地址。例如: “192.168.0.2”。 | ||
+ | {{ :icore3:icore3_arm_hal_24_9.png?direct |}} | ||
+ | * (2)Socket 端口寄存器 | ||
+ | * Socket寄存器用于建立socket通信。TCP是一种连接的通信。两个socket连接之前,必定要有一个Socket处在监听状态,而另一个socket启动连接,处于监听状态的就是服务器,启动连接的Socket就是客户端。启动TCP连接之前,必须正确设置Socket的目标IP和目的端口号。以下为配置目标IP地址和目的端口号的Socket寄存器。 | ||
+ | * Sn_DIPR (Socket 目标 IP 地址寄存器) [R/W] [0x000C-0x000F] [0x00000000] | ||
+ | * Sn_DIPR配置或指示的为 Socket n 的目标主机 IP 地址,在 TCP/UDP 模式下生效。在 TCP 客户端模式下,在 CONNECT 配置命令前,该寄存器设置了 TCP 服务器的 IP 地址。例如: Socket 0 的目标 IP 地址= 192.168.0.11, 配置应如下: | ||
+ | {{ :icore3:icore3_arm_hal_24_10.png?direct |}} | ||
+ | * Sn_DPORT (Socket n 目标端口寄存器) [R/W] [0x0010-0x0011] [0x00] | ||
+ | * Sn_DPORT 配置或指示了 Socket n 的目标主机端口号,在 TCP/UDP 模式下生效。在 TCP 客户端模式下,在 CONNET 配置命令前,该寄存器配置了 TCP Server监听的端口号。例如: Socket 0 的目标端口号 = 5000(0x1388) ,配置应如下: | ||
+ | {{ :icore3:icore3_arm_hal_24_11.png?direct |}} | ||
+ | === 3、TCPC简介 === | ||
+ | * TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内[1] 另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。 | ||
+ | * 基于TCP/IP协议的服务器和客户端程序的一般流程,如下图所示: | ||
+ | {{ :icore3:icore3_arm_hal_24_12.png?direct |}} | ||
+ | * 客户端与服务器在使用TCP传输协议时要先建立一个“通道”,在传输完毕之后又要关闭这“通道”,前者可以被形象地成为“三次握手”,而后者则可以被称为“四次挥手”。 | ||
- | ===== 2 资源特性 ===== | + | * 通道的建立——三次握手: |
+ | - 在建立通道时,客户端首先要向服务端发送一个SYN同步信号。 | ||
+ | - 服务端在接收到这个信号之后会向客户端发出SYN同步信号和ACK确认信号。 | ||
+ | - 当服务端的ACK和SYN到达客户端后,客户端与服务端之间的这个“通道”就会被建立起来 | ||
+ | * 通道的关闭——四次挥手: | ||
+ | - 在数据传输完毕之后,客户端会向服务端发出一个FIN终止信号 | ||
+ | - 服务端在收到这个信号之后会向客户端发出一个ACK确认信号 | ||
+ | - 如果服务端此后也没有数据发给客户端时服务端会向客户端发送一个FIN终止信号 | ||
+ | - 客户端在收到这个信号之后会回复一个确认信号,在服务端接收到这个信号之后,服务端与客户端的通道也就关闭了 | ||
- | ====2.1 电源特性: ==== | + | ==== 四、 实验原理 ==== |
+ | * iCore3带有W5500嵌入式以太网控制器,本实验实现TCP服务器功能。以iCore3作为服务器,PC作为客户端,PC的IP地址192.168.0.2,iCore3的IP地址为192.168.0.10,端口为60000。当客户端连接到服务器,TCP建立成功即可进行数据信息传输。硬件连接示意图如下。 | ||
+ | {{ :icore3:icore3_arm_hal_24_13.png?direct |}} | ||
+ | * iCore3双核心板CPU采用STM32F407IGT6,STM32F407通过SPI接口与W5500通信,来进行W5500寄存器的访问,从而进行IP地址、MAC地址、网关信息、子网掩码地址等信息的读写。同时通过SPI驱动W5500建立Socket通信,来与客户端进行TCP连接。 | ||
+ | ==== 五、 实验程序 ==== | ||
+ | === 1. main()函数中建立的服务器程序 === | ||
+ | * 实现TCP通信需要移植的文件为socket.c、w5500.c文件。socket.c 文件夹里面主要是socket的一些函数,比如close connect socket等等函数,实现了一些应用层的封装 ;w5500.c 文件主要实现的是对W5500模块寄存器的读写和操作,包括读写那些寄存器,地址是多少等等。 | ||
+ | * W5500内部自己实现了TCP/IP协议,STM32与W5500正常通信以后,可以通过SPI驱动W5500实现TCP通信。在将本设备IP地址、默认网关、MAC地址、子网掩码信息写入到W5500的通用寄存器中后,通过获取socket 0的状态来进行通信。首先在未连接时打开端口60000,在TCP的模式下监听客户端,与客户端连接成功以后,接收客户端的数据,同时将数据再发送给客户端,从而实现交互通信。 | ||
- | * 1、采用USB_OTG、USB_UART 和EXT_IN三种供电方式; | + | <code c> |
+ | while (1) | ||
+ | { | ||
+ | //处理TCP server信息 | ||
+ | switch(getSn_SR(0)) /*获取socket0的状态*/ | ||
+ | { | ||
+ | case SOCK_INIT: | ||
+ | listen(0); /*在TCP模式下监听客户端*/ | ||
+ | break; | ||
+ | case SOCK_ESTABLISHED: | ||
+ | if(getSn_IR(0) & Sn_IR_CON) | ||
+ | { | ||
+ | setSn_IR(0, Sn_IR_CON); | ||
+ | } | ||
+ | receive_length = getSn_RX_RSR(0); | ||
+ | /*receive_length为已接收数据长度*/ | ||
+ | if(receive_length>0) | ||
+ | { | ||
+ | LED_GREEN_ON; | ||
+ | recv(0,receive_buffer,receive_length); /*接收来自客户端的数据*/ | ||
+ | send(0,receive_buffer,receive_length);/*接收到的数据发给客户端*/ | ||
+ | LED_GREEN_OFF; | ||
+ | } | ||
+ | break; | ||
+ | case SOCK_CLOSE_WAIT: | ||
+ | disconnect(0); /*断开连接*/ | ||
+ | break; | ||
+ | case SOCK_CLOSED: | ||
+ | socket(0,Sn_MR_TCP,60000,Sn_MR_ND); /*打开socket0的60000端口*/ | ||
+ | break; | ||
+ | } | ||
+ | } | ||
- | * 2、数字电源输出为3.3V,采用高效率的BUCK电路,为ARM/FPGA/SDRAM 等供电; | + | </code> |
- | * 2、FPGA PLL内部含有大量模拟电路,为了保证PLL的性能,我们采用LDO为PLL提供模拟电源; | + | === 2. SPI初始化配置 === |
+ | * 初始化SPI 主要是对SPI要使用到的引脚以及SPI通信协议中时钟相位和极性进行设置 | ||
- | * 3、STM32F407IGT6提供独立的模拟电压基准,为片上ADC/DAC提供基准电压; | + | <code c> |
+ | void MX_SPI1_Init(void) | ||
+ | { | ||
+ | hspi1.Instance = SPI1; | ||
+ | hspi1.Init.Mode = SPI_MODE_MASTER; //SPI主模式 | ||
+ | hspi1.Init.Direction = SPI_DIRECTION_2LINES; //全双工模式 | ||
+ | hspi1.Init.DataSize = SPI_DATASIZE_8BIT; //数据位为8位 | ||
+ | hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; //CPOL = 0 | ||
+ | hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; //CPHA为数据线的第一个变化沿 | ||
+ | hspi1.Init.NSS = SPI_NSS_SOFT; //软件控制NSS | ||
+ | hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;//2分频 | ||
+ | hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; //最高位先发送 | ||
+ | hspi1.Init.TIMode = SPI_TIMODE_DISABLE; //TIMODE模式关闭 | ||
+ | hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;//CRC关闭 | ||
+ | hspi1.Init.CRCPolynomial = 10;//默认值,无效 | ||
+ | if (HAL_SPI_Init(&hspi1) != HAL_OK)//初始化 | ||
+ | { | ||
+ | Error_Handler(); | ||
+ | } | ||
+ | } | ||
- | * 4、提供电源监控和基准; | + | </code> |
- | + | === 3. SPI读写函数配置 === | |
- | ==== 2.2 ARM 特性: ==== | + | * HAL_SPI_TransmitReceive()为SPI的HAL库读写函数,一次操作一个字节,数据同时写入同时读出。send_data()函数为单字节读写函数,write()函数为多字节读写函数,可实现多字节数据的读写。 |
- | * 1、采用主频168M的高性能STM32F407IG; | + | <code c> |
- | + | static unsigned char send_data(unsigned char data)//SPI读写字节函数 | |
- | * 2、多达68个高性能I/O扩展; | + | { |
- | + | unsigned char receive_data; | |
- | * 3、与I/O复用,包括ARM内置的SPI/I2C/UART/TIMER/ADC/DAC等功能; | + | HAL_SPI_TransmitReceive(&hspi1,&data,&receive_data,1,1000);//接收发送函数 |
- | + | return receive_data;//返回接收到的值 | |
- | * 4、包括100M以太网、高速USB-OTG接口及用于调试的USB转UART功能; | + | } |
- | + | static int write(int number, unsigned char * buf) //SPI读写多字节函数 | |
- | * 5、包括TF卡接口,USB-OTG接口(可接U盘); | + | { |
- | + | int i; | |
- | * 6、5P简化后的SWD调试接口,可以选配转接器以适应通用的20p接口; | + | SPI1_CS_OFF; //拉低CS引脚 |
- | + | for (i = 0; i < number; i++){ | |
- | * 7、采用16位并行总线通信; | + | buf[i] = send_data(buf[i]); //调用send_data()函数 |
- | ==== 2.3 FPGA 特性: ==== | + | } |
- | * 1、采用Altera公司第四代Cyclone系列FPGA EP4CE10F17C8N; | + | SPI1_CS_ON; //拉高CS引脚 |
- | + | return 0; | |
- | * 2、多达105个高性能I/O扩展; | + | } |
- | + | </code> | |
- | * 3、FPGA外扩SDRAM,容量为8M字节; | + | |
- | + | ||
- | * 4、配置模式:支持JTAG、AS、PS模式; | + | |
- | + | ||
- | * 5、支持通过ARM配置加载FPGA;AS PS功能需通过跳线冒选择; | + | |
- | + | ||
- | * 6、采用16位并行总线通信; | + | |
- | + | ||
- | + | ||
- | ==== 2.4 其他特性: ==== | + | |
- | * 1、USB有三种工作模式:DEVICE模式、HOST模式和OTG模式; | + | |
- | + | ||
- | * 2、以太网接口类型为100M全双工; | + | |
- | + | ||
- | * 3、可跳线选择供电模式,USB接口直接供电,或通过排针供电(5V电源); | + | |
- | + | ||
- | * 4、两个独立按键分别由ARM和FPGA控制; | + | |
- | + | ||
- | * 5、两颗三色LED用作指示;分别接于ARM和FPGA上; | + | |
- | + | ||
- | * 6、含25M和24M两个独立的有源晶振时钟,和一个32.768K的无源晶振; | + | |
- | + | ||
- | 其他特性、资料待加入… | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ===== 3 仿真器与开发板连接 ===== | + | |
- | 1.选择iTool3下载器 第三代八合一调试工具箱 仿真器 支持iCore3开发板 | + | |
- | + | ||
- | {{:icore3:itool3_.png?400|}} | + | |
- | + | ||
- | 2.准备好一根5p**__异面__**红白排线,一根10p的灰排线,iCore3开发板,和iTool3下载器 | + | |
- | + | ||
- | {{:icore3:itool3-tu.png?400|}} | + | |
- | + | ||
- | + | ||
- | 3.连接图如图所示 | + | |
- | + | ||
- | ARM程序下载口(ARM_SWD)与iTool3的ARM下载口用5p的**__异面__**红白排线相连 | + | |
- | + | ||
- | FPGA程序下载口(FPGA_JTAG)与iTool3的FPGA下载口用10p的灰白排线相连 | + | |
- | + | ||
- | {{:icore3:lianjietu_.png?400|}} | + | |
- | + | ||
- | 如图,默认跳线帽选择中间,此时选择USB_UART端通过Microusb线与电脑端相连 | + | |
- | + | ||
- | {{:icore3:usblianjie.png?400|}} | + | |
- | + | ||
- | keil5中ARM程序下载如图 | + | |
- | + | ||
- | {{:icore3:keil5xiazai.png?600|}} | + | |
- | + | ||
- | FPGA程序下载如图 | + | |
- | + | ||
- | {{:fpgachengxuxiazai.png?600|}} | + | |
- | + | ||
- | ===== 4 出厂测试程序===== | + | |
- | + | ||
- | ==== 4.1概要 ==== | + | |
- | + | ||
- | 本资料包包含5个文件夹: | + | |
- | + | ||
- | * 1、“arm”里是 icore3上 arm的程序包,开发环境为 KEIL 5.17; | + | |
- | + | ||
- | * 2、“fpga”里是 icore3 上 fpga的程序包,开发环境为 QuartusII 15.0(好像低版本的也可以打开); | + | |
- | * 3、“相关软件”里包含 putty 终端软件和 UDP 调试软件; | + | === 4. W5500.c中的寄存器读写函数 === |
+ | <code c> | ||
+ | //定义本设备IP地址、默认网关、MAC地址、子网掩码 | ||
+ | W5500_T w5500={ | ||
+ | .initialize=initialize, | ||
+ | .mac = {0x00,0x98,0xdc,0x42,0x61,0x11}, | ||
+ | .ip = {192,168,0,10}, | ||
+ | .sub = {255,255,255,0}, | ||
+ | .gw = {192,168,0,1} | ||
+ | }; | ||
+ | //W5500写函数 | ||
+ | void IINCHIP_WRITE (unsigned long int addrbsb, unsigned char data) | ||
+ | { | ||
+ | SPI1_CS_OFF; | ||
+ | spi1.send_data( (addrbsb & 0x00FF0000)>>16); // Address byte 1 | ||
+ | spi1.send_data( (addrbsb & 0x0000FF00)>> 8); // Address byte 2 | ||
+ | spi1.send_data( (addrbsb & 0x000000F8) + 4); | ||
+ | // Data write command and Write data length 1 | ||
+ | spi1.send_data(data); // Data write (write 1byte data) | ||
+ | SPI1_CS_ON | ||
+ | } | ||
- | * 4、“屏幕截图”为工作时的截图; | + | //W5500读函数 |
- | + | unsigned char IINCHIP_READ (unsigned long int addrbsb) // Address byte 1 | |
- | * 5、“驱动”为板载 usb 转 uart的驱动程序,本实验之前需要安装到计算机。 | + | { |
- | + | unsigned char data = 0; | |
- | ==== 4.2 准备工作 ==== | + | SPI1_CS_OFF; |
- | + | spi1.send_data( (addrbsb & 0x00FF0000)>>16); // Address byte 1 | |
- | 为了运行测试程序,需要做一些准备工作。 | + | spi1.send_data( (addrbsb & 0x0000FF00)>> 8); // Address byte 2 |
- | + | spi1.send_data( (addrbsb & 0x000000F8)) ; | |
- | * 1、通过网线把iCore3与电脑连接,用于测试以太网功能;电脑ip设置为192.168.0.1网段; | + | // Data read command and Read data length 1 |
- | + | data = spi1.send_data(0x00); // Data read (read 1byte data) | |
- | * 2、把FPGA配置跳线置于PS模式; | + | SPI1_CS_ON; |
- | + | return data; | |
- | * 3、电源供电跳线选择为USB UART模式; | + | } |
- | + | ||
- | * 4、通过micro usb转U盘线缆,连接一个U盘到icore3上,u盘必须为fat32文件系统;也可以把fpga工程下的sdram.rbf文件拷贝到u盘里,这样就可以通过u盘配置fpga了; | + | |
- | + | ||
- | * 5、连接一个TF卡到iCore3卡座上,TF卡必须为fat32或者fat文件系统,也可以把fpga工程下的sdram.rbf文件拷贝到TF卡,这样就可以通过TF 配置fpga了; | + | |
- | + | ||
- | * 6、通过micro usb线缆把USB UART端口与计算机USB接口相连,并安装好“驱动”目录里的驱动文件;使得板载的USB转UART可以正常工作。 | + | |
- | + | ||
- | ==== 4.3 测试过程 ==== | + | |
- | **开始测试:** | + | |
- | * 通过 micro usb线把iCore3的usb uart接口与计算机连接好后,计算机会识别到一个串口号。通过putty.exe 软件把此串口打开(端口号需要在“设备管理器”里查看),波特率配置为 115200,然后键入 test 并按回车进行测试。测试图片如图所示。 | + | |
- | {{:icore3:icore3_demo.png|}} | + | |
- | + | ||
- | **网络接口测试:** | + | |
- | + | ||
- | * 网络接口需要安装软件自带的UDP 测试工具,安装好后“新建连接”,选择UDP协议,并把目标IP 设置成 192.168.0.10, 目标端口设置成30000;即可通过此软件发送数据到iCore3,iCore3 接收到数据后会原封不动发向计算机。测试图片如图所示。 | + | |
- | {{:icore3:yitaiwangceshi.png|}} | + | |
- | + | ||
- | ====4.4测试内容解析==== | + | |
- | + | ||
- | * 1、电源:紫色字体显示为[POWER ]为电源测试,可得到iCore3的5V供电、核心板电流、板载3.3V/1.2V/2.5V 的电压,测试成功后会显示[OK]; | + | |
- | + | ||
- | * 2、RTC实时时钟:会读出RTC时间和日期,若时间在走则说明功能正确,这里要注意的是时间还不准的(因为没有设定); | + | |
- | + | ||
- | * 3、TF卡测试:此测试分为两部分,第一步首先探测TF卡信息并显示,第二步为读写实验,程序会在TF卡上建立一个10k大小的文件,写入并读取校验,测试结果也会显示出来; | + | |
- | + | ||
- | * 4、U 盘测试:与TF卡测试类似,若U盘测试成功,则程序会在U盘上建立一个10k大小的文件,写入并读取校验,然后显示测试结果; | + | |
- | + | ||
- | * 5、FPGA PS配置:程序会尝试通过TF卡或者U盘里读取sdram.rbf文件,并配置FPGA,若TF卡或者U盘里有此程序,则会配置成功;sdram.rbf 是通过quartusii软件转换过来的,此文件在fpga文件夹内; | + | |
- | + | ||
- | * 6、总线读写测试:此功能通过stm32 fsmc读写fpga内ram数据,完成7个ram块的读写测试,每个ram块为512字节; | + | |
- | + | ||
- | * 7、按键测试:在>>提示符下,按下按键会显示按键按下信息; | + | |
- | + | ||
- | * 8、LED测试:ARM和FPGA LED均会三色循环显示; | + | |
- | + | ||
- | * 9、SDRAM读写测试:此测试由fpga程序完成,测试成功后fpga的LED会三色循环显示。测试失败后LED会显示“白色”; | + | |
- | + | ||
- | ====4.5FPGA程序下载 ==== | + | |
- | ===4.5.1 JTAG模式 === | + | |
- | * Core3工控板的JTAG接口与FPGA相连,即可用于芯片内部测试,还可对芯片进行在线编程。其电路连接图如图20所示,JTAG接口通过防静电芯片SRV05-4与FPGA相连,其中芯片SRV05-4是低电容、低漏电流的瞬态抑制二极管(TVS)阵列,SOT-26封装,5V的工作电压,可以保护JTAG接口与FPGA相连的四根高速数据线,这四根线分别为: | + | |
- | * TCK——测试时钟输入; | + | |
- | * TDI——测试数据输入,数据通过TDI输入JTAG口; | + | |
- | * TDO——测试数据输出,数据通过TDO从JTAG口输出; | + | |
- | * TMS——测试模式选择,TMS用来设置JTAG口处于某种特定的测试模式; | + | |
- | + | ||
- | === 4.5.2 AS模式 === | + | |
- | * iCore3异构双核心工控板上的FPGA有两种配置模式,分别为主动配置模式(AS)和被动配置 模式(PS)。所谓AS配置模式,即FPGA器件每次上电时作为控制器,由FPGA器件引导配置操作过程,它控制着外部存储器和初始化过程,从配置器件EPCS16主动发出读取数据信号,从而把EPCS16的数据读入FPGA中,实现对FPGA的编程。配置数据通过DATA0引脚送入FPGA,配置 数据被同步在DCLK输入上,1个时钟周期传送1位数据。 | + | |
- | + | ||
- | {{:icore3:as_peizhi.png|}} | + | |
- | + | ||
- | ** FPGA 配置模式示意图** | + | |
- | + | ||
- | === 4.5.3 PS模式 (default) === | + | |
- | * 所谓PS配置模式,则由ARM控制器控制配置过程。ARM作为控制器件,通过普通IO实现PS配置时序,实现对FPGA的编程。该模式可以实现对FPGA在线可编程,而且编程后FPGA立即工作,无需电源复位。 | + | |
- | + | ||
- | {{:icore3:pspeizhi.png|}} | + | |
- | + | ||
- | ** FPGA 配置模式示意图** | + | |
- | + | ||
- | ===== 5 接口电路 ===== | + | |
- | ====5.1 USB_OTG接口 ==== | + | |
- | * iCore3的USB有三种工作模式:DEVICE模式、HOST模式和OTG模式。当USB作为OTG 模式使用时其结构如图所示,USB3300为物理协议层,通过8个数据双向引脚,三个控制引脚STP、DIR和NXT,和一个时钟引脚CLKOUT,与STM32芯片中的USBMAC层相连,从而实现了STM32与USB座的连接。STM32的USB_OTG接口有两种工作模式:①当用作从机模式时,MOS关断;②当用作主机模式时(如U盘读取),MOS开关打开,通过USB座对外供电。 | + | |
- | + | ||
- | {{:icore3:usb-otg.png|}} | + | |
- | ====5.2 以太网接口 ==== | + | |
- | * iCore3双核心工控板的网络模块采用W5500芯片作为以太网控制器,其通过SPI总线与STM32 的SPI口相连,STM32通过引脚LAN_CS对W5500进行片选,W5500则通过引脚LAN_INT进行 中断输出,另外通过信号收发线与隔离型网络接口连接,其连接示意图如图所示。为了减少系统能耗,W5500还提供了网络唤醒模式(WOL)及掉电模式供客户选择。 | + | |
- | + | ||
- | {{:icore3:yitaiwangjiekou.png|}} | + | |
- | ==== 5.3 三色LED指示灯 ==== | + | |
- | * iCore3异构双核心工控板的两个LED灯共有红、绿、蓝三种颜色,分别由ARM和FPGA控制。三色LED电路连接图如图所示。在编程调试过程中可用指示灯显示其状态,三色合一的设计,减少了LED灯占用空间,也使状态指示更加清晰明了。 | + | |
- | {{:icore3:led.png|}} | + | |
- | ==== 5.4 独立按键 ==== | + | |
- | * iCore3异构双核心工控板的两个独立按键分别由ARM和FPGA控制,按键电路连接图如图所示。ARM_KEY或FPGA_KEY低电平时表示按键按下。 | + | |
- | + | ||
- | {{:icore3:anjian.png|}} | + | |
- | ==== 5.5 RTC实时时钟 ==== | + | |
- | * iCore3异构双核心工控板采用32.768K无源晶体为系统提供RTC实时时钟,其电路连接图如图所示。32.768KHz外部无源晶体连接OSC32_IN和OSC32_OUT两引脚之间,为获得稳定的频率必须外加两个电容构成外部振荡电路。 | + | |
- | {{:icore3:waibuzhendangdianlu.png|}} | + | |
- | ==== 5.6 SDRAM存储器 ==== | + | |
- | * iCore3异构双核心工控板载有一片SDRAM,其型号为HY57V641620HT,主要用作数据缓存,也可以用于内建NIOSII软核,将SDRAM作为它的主存储器。SDRAM与FPGA的连接示意图如图所示。 | + | |
- | {{:icore3:sdram.png|}} | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ===== 6 开发环境安装 ===== | + | |
- | [[soft| 进入开发软件下载]] | + | |
- | + | ||
- | * ARM和FPGA开发环境,推荐安装与例程版本相同的环境。否则会造成兼容性问题,导致例程无法正常使用。解压后FPGA 工程、ARM工程一定要保证没有中文路径。 | + | |
- | ===== 7 外围模块 ===== | + | |
- | ==== 7.1 VGA显示模块 ==== | + | |
- | **原理图:** {{ :icore3:vga.pdf |}} | + | |
- | + | ||
- | **外形结构(实物图)**: | + | |
- | + | ||
- | {{:icore3:vga.png|}} | + | |
- | + | ||
- | **连接方式:** | + | |
- | + | ||
- | {{:icore3:pga_connect_picture.png|}} | + | |
- | + | ||
- | **特性:** | + | |
- | + | ||
- | * **1.此模块只支持与iCore3相连接;** | + | |
- | + | ||
- | * **2.提供分辨率800x600/1024x68两个分辨率的源码;** | + | |
- | + | ||
- | * **3.提供emwin5工程及实例支持;** | + | |
- | + | ||
- | * **4.模块使用iCore3提供电源,无需单独供电;** | + | |
- | + | ||
- | ==== 7.2 4.3寸液晶模块 ==== | + | |
- | **原理图:** {{ :icore3:i3_tft43.pdf |}} | + | |
- | + | ||
- | **连接图** | + | |
- | + | ||
- | {{:icore3:4.3cunlianjie.png|}} | + | |
- | + | ||
- | + | ||
- | **特性** | + | |
- | + | ||
- | * **1.此模块只支持与iCore3相连接;** | + | |
- | + | ||
- | * **2.480x272的分辨率,带电阻触摸,提供驱动源代码;** | + | |
- | + | ||
- | * **3.提供emwin5工程及实例支持;** | + | |
- | + | ||
- | * **4.模块使用iCore3提供电源,无需单独供电;** | + | |
- | + | ||
- | ==== 7.3 7.0寸液晶模块 ==== | + | |
- | **原理图:** | + | |
- | {{ :icore3:i3_tft70.pdf |}} | + | |
- | + | ||
- | **连接图:** | + | |
- | + | ||
- | {{:icore3:7.0lianjie.png|}} | + | |
- | + | ||
- | **特性:** | + | |
- | + | ||
- | * **1.此模块只支持和iCore3连接;** | + | |
- | + | ||
- | * **2.800x480的分辨率,带电阻触摸,提供驱动源代码;** | + | |
- | + | ||
- | * **3.提供emWin5工程及实例支持;** | + | |
- | + | ||
- | * **4.模块使用iCore3提供电源,无需单独供电;** | + | |
- | + | ||
- | ==== 7.4 GEM千兆以太网模块 ==== | + | |
- | [[Gem|千兆以太网模块]] | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
+ | </code> | ||
+ | ==== 六、 实验步骤 ==== | ||
+ | - 把仿真器与iCore3的SWD调试口相连(直接相连或者通过转接器相连); | ||
+ | - 把iCore3(USB OTG)通过Micro USB线与计算机相连,为iCore3供电; | ||
+ | - 把iCore3网口通过网线与计算机网口相连; | ||
+ | - 设置本机电脑IP;(方法见附录1) | ||
+ | - 打开Keil MDK 开发环境,并打开本实验工程; | ||
+ | - 打开TCP&UDP测试工具;(安装及使用方法见附录) | ||
+ | - 烧写程序到iCore3上; | ||
+ | - 也可以进入Debug 模式,单步运行或设置断点验证程序逻辑。 | ||
+ | ==== 七、 实验现象 ==== | ||
+ | * 在发送区编辑完要发送的数据信息后,点击发送即可收到发送的数据包。如图所示 | ||
+ | {{ :icore3:icore3_arm_hal_24_14.png?direct |}} | ||
+ | ==== 附录 ==== | ||
+ | * 1、TCP&UDP测试工具安装 | ||
+ | 双击TCPUDPDebug102_Setup.exe,点击下一步,在这里安装路径我们默认即可,点击安装,然后Finish。 | ||
+ | * 2、TCP&UDP测试工具的使用 | ||
+ | (1)打开测试工具,界面如下。点击创建服务器,弹出了设置端口的窗口,端口设置为60001。 | ||
+ | {{ :icore3:icore3_arm_hal_24_15.png?direct |}} | ||
+ | (2)服务器已经创建完成(如下图),点击启动服务器 | ||
+ | {{ :icore3:icore3_arm_hal_24_16.png?direct |}} | ||
+ | (3)iCore3客户端自动连接服务器,即可进行通信。(若连接不上请关闭电脑防火墙) | ||