测试新唐nuc980串口功能的过程,如下:
直接下载使用官方的ubuntu系统。直接使用官方的文件,在家目录下 nuc970_buildroot 目录下或者自己git clone nuc970_buildroot 工程也可以,克隆地址如下:git clone https://github.com/opennuvoton/nuc970_buildroot或者git clone https://gitee.com/opennuvoton/nuc970_buildroot.git查看配置文件 ls configs/* ,会显示当前的配置文件,我们选择输入 make nuvoton_nuc980_iot_defconfig ,产生预设的configuration file,预设的configuration 会联网安装u-boot、linux kernel、root file system、toolchain ....... 等常用的工具。如果想修改预设的 configuration ,输入 make menuconfig ,进入配置界面进行配置。4.输入 **make ** ,开始进行 compile ,成功后 nuc980 bsp 相关的文件就会出现在nuc970_buildroot目录下面的output 这个子目录。如下:
nuc970_buildroot 文件夹下输入 sudo ./install_nuc980_bsp.sh , 安装下载nuc980bsp包。执行完脚本,会出现 nuc980bsp 文件夹。
自行编译nuc980bsp包中的测试例程uart的demo,或者按照如下代码编写即可。编译uart 文件,将生成的可执行文件uart_demo,复制到nuc970_buildroot/output/target/usr/bin。/**************************************************************************** * * * copyright (c) 2014 nuvoton technology corp. all rights reserved. * * * ****************************************************************************//**************************************************************************** * * filename * uart_test.c * * version * 1.0 * * description * this is the test program used to test the uarts on nuc980 ev board * * data structures * none * * functions * none * * history * * * remark * none ****************************************************************************/#include #include #include #include #include #include #include #include #include #include #include #define false 0#define true 1int fd[2];pthread_t threads[10];char buff[101];static struct termios newtios,oldtios; /*termianal settings */static int saved_portfd=-1; /*serial port fd */static void reset_tty_atexit(void){ if(saved_portfd != -1) { tcsetattr(saved_portfd,tcsanow,&oldtios); } }/*cheanup signal handler */static void reset_tty_handler(int signal){ if(saved_portfd != -1) { tcsetattr(saved_portfd,tcsanow,&oldtios); } _exit(exit_failure);}static int open_port(const char *portname){ struct sigaction sa; int portfd; printf(opening serial port:%sn,portname); /*open serial port */ if((portfd=open(portname,o_rdwr | o_noctty)) < 0 ) { printf(open serial port %s fail n ,portname); return portfd; } /*get serial port parnms,save away */ tcgetattr(portfd,&newtios); memcpy(&oldtios,&newtios,sizeof newtios); /* configure new values */ cfmakeraw(&newtios); /*see man page */ newtios.c_iflag |=ignpar; /*ignore parity on input */ newtios.c_oflag &= ~(opost | onlcr | olcuc | ocrnl | onocr | onlret | ofill); newtios.c_cflag = cs8 | clocal | cread; newtios.c_cc[vmin]=1; /* block until 1 char received */ newtios.c_cc[vtime]=0; /*no inter-character timer */ /* 115200 bps */ cfsetospeed(&newtios,b115200); cfsetispeed(&newtios,b115200); /* register cleanup stuff */ atexit(reset_tty_atexit); memset(&sa,0,sizeof sa); sa.sa_handler = reset_tty_handler; sigaction(sighup,&sa,null); sigaction(sigint,&sa,null); sigaction(sigpipe,&sa,null); sigaction(sigterm,&sa,null); /*apply modified termios */ saved_portfd=portfd; tcflush(portfd,tciflush); tcsetattr(portfd,tcsadrain,&newtios); return portfd;}void * process1(void* arg){ int portfd = (int) arg; unsigned char i, j; int rev1, rev2; char rxbuffer[101]; rev1 =0; rev2 =0; while(rev2 < 100) { rev1 = write(portfd,(buff+rev2),100); rev2 += rev1; } printf(n uart1 send %d bytsn, rev2); rev1 = 0; rev2 = 0; while(rev2 < 100) { rev1 = read(portfd,(rxbuffer+rev2),100); rev2 += rev1; } printf(n uart1 receive %d bytesn, rev2); for(i = 0; i < 100; i++) { if(i != rxbuffer[i]) { printf(n uart1 compare error!!); while(1); } } printf(n uart1 compare correct!!n); printf(n uart1 test done!!n);} void * process2(void* arg){ int portfd = (int) arg; unsigned char i, j; int rev1, rev2; char rxbuffer[101]; rev1 =0; rev2 =0; while(rev2 < 100) { rev1 = write(portfd,(buff+rev2),100); rev2 += rev1; } printf(n uart2 send %d bytes n, rev2); rev1 = 0; rev2 = 0; while(rev2 < 100) { rev1 = read(portfd,(rxbuffer+rev2),100); rev2 += rev1; } printf(n uart2 receive %d bytes n, rev2); for(i = 0; i < 100; i++) { if(i != rxbuffer[i]) { printf(n uart2 compare error!!); while(1); } } printf(n uart2 compare correct!!n); printf(n uart2 test done!!n);}/***@breif main()*/int main(int argc, char **argv){ char *dev[10]={/dev/ttys1, /dev/ttys2}; unsigned int i; printf(n demo uart1/uart2 external loop back function n); for(i = 0; i < 100; i++) { buff[i] = (i & 0xff); } for(i = 0; i < 2; i++) { if((fd[i] = open_port(dev[i]))< 0) return -1; } pthread_create(&threads[0], null, process1, (void*)(fd[0])); pthread_create(&threads[1], null, process2, (void*)(fd[1])); pthread_join(threads[0], null); pthread_join(threads[1], null); return 0;}再nuc970_buildroot 执行 make linux-menuconfig ,打开串口1和串口2的驱动使能,保存后退出。
8.输入 **make **编译。
9.编译完之后,拷贝相关文件,共四个文件
拷贝 nuc970_buildroot/output/images 文件夹下的 **uimage **文件;
拷贝 nuc970_buildroot/output/build/uboot-master 文件夹下的u-boot.bin 文件 ;
拷贝 nuc970_buildroot/output/build/uboot-master/spl 文件夹下的u-boot-spl.bin 文件;
拷贝 nuc970_buildroot 文件夹下的 env.txt 文件。这里在 nuc970_buildroot 文件夹下 未发现env.txt,从别的地方拷贝一份即可。env.txt的内容如下:
baudrate=115200bootdelay=1stderr=serialstdin=serialstdout=serialsetspi=sf probe 0 30000000loadkernel=sf read 0x7fc0 0x200000 0x800000bootcmd=run setspi;run loadkernel;bootm 0x7fc010.选择boot启动方式,上电进行镜像下载,(参考: 新唐nuc980学习笔记1 - 工程创建和下载 )
u-boot-spl.bin 选择loader默认image execute address:0x 200 ;下载即可
u-boot.bin 选择 data下载到 image start offset: 0x 100000 ; 下载即可
uimage选择data下载到 image start offset: 0x 200000 ; 下载即可
**env.txt **选择 environment下载到 image start offset: 0x 80000 ; 下载即可
11.选择boot启动方式,复位运行(参考: 新唐nuc980学习笔记1 - 工程创建和下载 )
12.开机之后的画面如下:
13.输入测试指令 ./usr/bin/uart_demo,可看到串口功能测试符合预期,测试结果如下:
注意:
【 以下动作只需要在更新 buildroot 工具时使用 】
进入buildroot 资料夹后请输入以下指令:
git reset --hard
git pull
更新完成后进入 dl 资料夹,先将既有的 linux kernel 与 u-boot 删除,并输入以下指令:
sudo rm -rf linux-master.tar.gz
输入密码 user,并输入以下指令:
sudo rm -rf uboot-master.tar.gz
离开 dl 资料夹,进入 builroot 资料夹下 make clean。
微雪电子RS485 Board UART转485模块简介
IAR 开发环境下调试从核工程的方法(IAR篇)
S7-1500和S7-1200 F-CPU间Flexible F-Link通信
如何从Altium Designer中连接到我的Workspace?
最快速红外线传感器(Silicon Labs)
测试新唐nuc980串口功能的过程
电磁兼容EMC测试RS485接口的电路设计
刮泥机PLC数据采集远程监控系统
聚合物电池的结构、特点、性能及工作安全性
二极管的箝位原理和作用
你们会设计CPU取指执行电路吗?
三星S7升级安卓7.0了 然而Gear VR眼镜运行不了
pcb设计基础之稳压原理简述
台积电2nm工艺制程研发迎来突破
长期戴耳机听歌的危害,别让这些坏习惯害了你的听力!
芯海科技:国内MCU龙头企业,高尖端进口替代急先锋
IP6806无线充电发射端控制芯片的概述
苹果AirPods Max无镌刻版本预计2021年才能发货
NVIDIA推出新型处理器DPU,提供前所未有的安全性和算力
联想图像擘画未来蓝图,借势营商环境优化