Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
nuc980
NK-980IOT测评之EBI
发布于 2022-03-27 15:29:47 浏览:932
订阅该版
[tocm] ### **简介** nuc980配有外部总线接口(EBI),供外部设备使用。EBI支持地址总线和数据总线独立模式和复用模式,地址总线最大支持1MB地址空间,数据总线最大支持16bit宽度;EBI支持3路片选信号,可直连三个外部设备,并且3个片选信号可以单独设置读写时序。 ### **功能模块的硬件介绍** - 官方手册介绍 ![image.png](https://oss-club.rt-thread.org/uploads/20220327/eaabc2a5728254f5a6139c31529de3de.png.webp) ![image.png](https://oss-club.rt-thread.org/uploads/20220327/b9f5d58efa1933e1d30f9e5ec667922e.png.webp) ![image.png](https://oss-club.rt-thread.org/uploads/20220327/70d0d88682fa0ec737bf40e3f8707017.png) ![image.png](https://oss-club.rt-thread.org/uploads/20220327/9c721cccc47946a99e56c967a847c074.png.webp) 从NK-980iot开发板的原理图上可以看到,EBI总线的部分信号引出到了CON11上,信号包括,地址总线ADDR[8~10]、数据总线DATA[0~15]、片选nCS0、读使能nRE、写使能nWE。 ![image.png](https://oss-club.rt-thread.org/uploads/20220327/20d27f4b68e0a1ddaebe2dcf09a33218.png.webp) ### **功能模块的使用说明** - 硬件环境 NK-980Iot开发板(为了方便测试,需要给CON11焊接2.54mm双排针) 两个USB数据线(一条接VCOM,另一条接USB0) saleae logic逻辑分析仪(若干测试线),CH0~7对接EBI_DATA0~7、CH8对接EBI_nWE、CH15对接EBI_nRE、CH10对接EBI_nCS0、CH11~13对接EBI_ADDR8~10 - 软件环境 RT-Thread Studio NuWriter SecureCRT ### **模块功能的测试演示** 在RT-Thread Studio环境中,基于NK-980IOT开发板创建项目;项目创建完成后,在
文件中,增加ebi总线的相关初始化代码,初始化内容包含HCLK时钟、ebi模块时钟使能以及ebi总线IO复用功能配置,如下: ![image.png](https://oss-club.rt-thread.org/uploads/20220327/f0b505b6a6a4204e18f550b1fdeeee7f.png.webp) 然后将nu_pin_ebi_init()函数增加到nu_pin_init()函数中。 创建
文件,实现ebi总线测试的read和write函数,并添加到msh命令中,代码如下: ``` /**************************************************************************//** * * @copyright (C) 2019 Nuvoton Technology Corp. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2022-03-26 yzh First version * ******************************************************************************/ #include
#include
#include
#include
static void ebi_open(void) { EBI_Open(EBI_BANK0,EBI_BUSWIDTH_8BIT,EBI_TIMING_NORMAL,EBI_OPMODE_NORMAL,EBI_CS_ACTIVE_LOW);/*初始化ebi总线cs0*/ EBI_SetBusTiming(EBI_BANK0,0x03003318U,EBI_MCLKDIV_128);/*TAHD=3,TACC=3*/ } static void ebi_close(void) { EBI_Close(EBI_BANK0);/*关闭ebi总线cs0*/ } static void ebi_read(int argc, char**argv) { uint32_t addr; uint8_t bus_val; sscanf(argv[1],"0x%x",&addr); if(addr < 0x60000000 || addr > 0x600fffff) { rt_kprintf("%s@nk980iot: illegal address.\n",argv[0],addr); return; } ebi_open(); bus_val = *((volatile uint8_t *)addr); ebi_close(); rt_kprintf("%s@nk980iot: addr - 0x%x, data - 0x%x\n",argv[0],addr,bus_val); } MSH_CMD_EXPORT(ebi_read, ebi_read sample: ebi_read
); static void ebi_write(int argc, char**argv) { uint32_t addr; uint32_t bus_val; /* for(int i; i
0x600fffff) { rt_kprintf("%s@nk980iot: illegal address.\n",argv[0],addr); return; } sscanf(argv[2],"0x%x",&bus_val); ebi_open(); *((volatile uint8_t *)addr) = (uint8_t)bus_val; ebi_close(); rt_kprintf("%s@nk980iot: addr - 0x%x, data - 0x%x\n",argv[0],addr,bus_val); } MSH_CMD_EXPORT(ebi_write, ebi_write sample: ebi_write
); ``` 在RT-Thread Studio环境中构建成功后,使用NuWriter将可程序文件“rtthread.bin”下载到开发板上。 ![image.png](https://oss-club.rt-thread.org/uploads/20220327/d2a642e1a53310ee444e2f81f7f6fe69.png.webp) 程序文件和开发板连线准备完毕,打开SecureCRT,执行下载程序步骤,系统启动成功,可以看到在Finsh控制台已经增加了ebi读写命令。 ![image.png](https://oss-club.rt-thread.org/uploads/20220327/5312ed8c99604a967057361995a3c186.png.webp) - 读功能测试 首先,将EBI_DATA1信号连接至VDD33信号上(其他信号连接逻辑分析仪默认低电平),这样8位数据总线上的数据为0x02; 再根据芯片手册定义CS0地址空间为0x60000000~0x600FFFFF,并且地址总线使用了EBI_ADDR8~10,因此使用0x60000500(bit8~10为b101)作为读写测试地址; 在Finsh控制台上输入
,可以看到返回了0x02,证明EBI读数据功能成功; ![image.png](https://oss-club.rt-thread.org/uploads/20220327/2a326b83e26f128cd9bea9546c040710.png.webp) 分析逻辑分析仪上捕捉到的写操作波形如下, ![image.png](https://oss-club.rt-thread.org/uploads/20220327/e7a9a4f9370326f70b16e04c041060e7.png.webp) 从逻辑分析仪上捕捉到的读操作波形上可以看到,CH1-DATA1为高电平,其余DATA信号为低电平,正确;CH11~13对接ADDR8~10信号为b101,正确。 - 读时序分析 进行时序分析前,我们先根据官方手册的时序图和ebi初始化配置来计算理论的时间参数; 1)tASU(nCS active to nRE active),芯片固定为1MCLK,根据初始化配置MCLK = HCLK / DIV = 150M /128,因此tASU = 0.853us; 2)tACC(nRE active width),根据初始化配置为4MCLK,因此tACC = 3.413us; 3)tAHD(nRE deactive to nCS deactive),根据初始化配置为4MCLK,因此tAHD = 3.413us; 接着分析逻辑分析仪上捕捉到的读操作波形,首先在nCS的下降沿,地址总线同时输出;nCS下降沿后经过0.875us(tASU),nRE出现下降沿;nRE低电平状态持续 3.375us(tACC);nRE出现上升沿后经过3.438us(tAHD),nCS出现上升沿。 综上分析,测试EBI总线读时序基本和官方手册描述一致(逻辑分析仪由于采样频率不够导致时间有一定的误差)。 - 写功能测试 在Finsh控制台上输入
, ![image.png](https://oss-club.rt-thread.org/uploads/20220327/0ef3833c66111198158681d0c7dccfd4.png) 分析逻辑分析仪上捕捉到的写操作波形如下, ![image.png](https://oss-club.rt-thread.org/uploads/20220327/0463ff71289e319bf3f5b768a0c36527.png.webp) 从逻辑分析仪上捕捉到的写操作波形上可以看到,在nWE上升沿时刻,数据总线CH0~7-DATA0~7为b01010101(0x55),正确;CH11~13对接ADDR8~10信号为b101,正确。 - 写时序分析 进行时序分析前,我们先根据官方手册的时序图和ebi初始化配置来计算理论的时间参数; 1)tASU(nCS active to nWE active),芯片固定为1MCLK,根据初始化配置MCLK = HCLK / DIV = 150M /128,因此tASU = 0.853us; 2)tACC(nWE active width),根据初始化配置为4MCLK,因此tACC = 3.413us; 3)tAHD(nWE deactive to nCS deactive),根据初始化配置为4MCLK,因此tAHD = 3.413us; 接着分析逻辑分析仪上捕捉到的写操作波形,首先在nCS的下降沿,地址总线同时输出;nCS下降沿后经过0.875us(tASU),nWE出现下降沿;nWE低电平状态持续 3.375us(tACC);nWE出现上升沿后经过3.438us(tAHD),nCS出现上升沿。 综上分析,测试EBI总线写时序基本和官方手册描述一致(逻辑分析仪由于采样频率不够导致时间有一定的误差)。 ### **可编译下载的代码** https://github.com/fever123123/Test-EBI-NK908iot.git ### **心得体会** nuc980的EBI模块对比nuc970,优点是EBI模块配置功能简化,时序简明;缺点是模块功能阉割,片选信号减少,时序可配性降低。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
啊华田
这家伙很懒,什么也没写!
文章
2
回答
0
被采纳
0
关注TA
发私信
相关文章
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
xiaorui
1
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部