0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

測試新唐nuc980串口功能的過程

CHANBAEK ? 來源:嵌入式學(xué)習(xí)和實踐 ? 作者:嵌入式學(xué)習(xí)和實踐 ? 2023-09-04 16:07 ? 次閱讀

測試新唐nuc980串口功能的過程,如下:

  1. 直接下載使用官方的ubuntu系統(tǒng)。
  2. 直接使用官方的文件,在家目錄下 NUC970_Buildroot 目錄下或者自己git clone NUC970_Buildroot 工程也可以,克隆地址如下:
git clone https://github.com/OpenNuvoton/NUC970_Buildroot
或者
git clone https://gitee.com/OpenNuvoton/NUC970_Buildroot.git
  1. 查看配置文件 ls configs/* ,會顯示當(dāng)前的配置文件,我們選擇輸入 make nuvoton_nuc980_iot_defconfig ,產(chǎn)生預(yù)設(shè)的configuration file,預(yù)設(shè)的configuration 會聯(lián)網(wǎng)安裝U-Boot、Linux Kernel、root file system、toolchain ....... 等常用的工具。如果想修改預(yù)設(shè)的 configuration ,輸入 make menuconfig ,進(jìn)入配置界面進(jìn)行配置。

4.輸入 **make ** ,開始進(jìn)行 Compile ,成功后 NUC980 BSP 相關(guān)的文件就會出現(xiàn)在NUC970_Buildroot目錄下面的output 這個子目錄。如下:

圖片

  1. NUC970_Buildroot 文件夾下輸入 sudo ./install_nuc980_bsp.sh , 安裝下載nuc980bsp包。執(zhí)行完腳本,會出現(xiàn) nuc980bsp 文件夾。

圖片

  1. 自行編譯nuc980bsp包中的測試?yán)?a href="http://ttokpm.com/tags/uart/" target="_blank">uart的demo,或者按照如下代碼編寫即可。編譯uart 文件,將生成的可執(zhí)行文件uart_demo,復(fù)制到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     < stdio.h >
#include     < stdlib.h >
#include     < unistd.h > 
#include     < sys/types.h > 
#include     < sys/stat.h > 
#include     < fcntl.h > 
#include     < termios.h >  
#include     < errno.h >
#include     < string.h >
#include   < signal.h >
#include    < pthread.h >


#define FALSE 0
#define TRUE  1


int 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;
}
  1. 再NUC970_Buildroot 執(zhí)行 make linux-menuconfig ,打開串口1和串口2的驅(qū)動使能,保存后退出。

圖片

8.輸入 **make **編譯。

9.編譯完之后,拷貝相關(guān)文件,共四個文件

拷貝 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 文件夾下 未發(fā)現(xiàn)env.txt,從別的地方拷貝一份即可。env.txt的內(nèi)容如下:

baudrate=115200
bootdelay=1
stderr=serial
stdin=serial
stdout=serial
setspi=sf probe 0 30000000
loadkernel=sf read 0x7fc0 0x200000 0x800000
bootcmd=run setspi;run loadkernel;bootm 0x7fc0

10.選擇boot啟動方式,上電進(jìn)行鏡像下載,(參考: 新唐Nuc980學(xué)習(xí)筆記1 - 工程創(chuàng)建和下載

u-boot-spl.bin 選擇Loader默認(rèn)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啟動方式,復(fù)位運行(參考: 新唐Nuc980學(xué)習(xí)筆記1 - 工程創(chuàng)建和下載

12.開機之后的畫面如下:

圖片

13.輸入測試指令 ./usr/bin/uart_demo,可看到串口功能測試符合預(yù)期,測試結(jié)果如下:

圖片

注意:

【 以下動作只需要在更新 Buildroot 工具時使用 】
進(jìn)入Buildroot 資料夾后請輸入以下指令:
git reset --hard
git pull
更新完成后進(jìn)入 dl 資料夾,先將既有的 linux kernel 與 u-boot 刪除,并輸入以下指令:
sudo rm -rf linux-master.tar.gz
輸入密碼 user,并輸入以下指令:
sudo rm -rf uboot-master.tar.gz
離開 dl 資料夾,進(jìn)入 Builroot 資料夾下 make clean。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5059

    文章

    18973

    瀏覽量

    302024
  • 串口
    +關(guān)注

    關(guān)注

    14

    文章

    1540

    瀏覽量

    76059
  • Ubuntu
    +關(guān)注

    關(guān)注

    5

    文章

    559

    瀏覽量

    29501
  • 新唐
    +關(guān)注

    關(guān)注

    0

    文章

    131

    瀏覽量

    14178
  • nuc980
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    1240
收藏 人收藏

    評論

    相關(guān)推薦

    nuc980雙網(wǎng)卡開機啟動

    nuc980雙網(wǎng)卡開機啟動
    的頭像 發(fā)表于 12-07 18:25 ?1355次閱讀
    <b class='flag-5'>nuc980</b>雙網(wǎng)卡開機啟動

    NUC980怎么把Uboot和kernel的輸出改到其它串口?

    使用的NUC980官方固件 板子只引出了PA1和PA0 沒有把UART0引出 請問應(yīng)該怎么把Uboot和kernel的輸出改到其它串口
    發(fā)表于 01-17 06:52

    基于NUC980開發(fā)板DIY的項目合集

    。NUC980有非常豐富的外設(shè)資源,串口有10個,可以擴展出多個485接口,還有128M內(nèi)存,用于多任務(wù)運行。DIY過程首先畫了一個板子:通過arduino接口擴展了2個485和2個can,can與本次
    發(fā)表于 05-07 15:22

    NUC980IOT使用測評相關(guān)資料分享

    1、NUC980測評快速上手與GPIONUC980是新科技32位Cortex-A系列內(nèi)核產(chǎn)品,NUC980IOT所使用的芯片為NUC980DK61
    發(fā)表于 06-02 14:56

    NUC980開發(fā)板DIY項目大挑戰(zhàn)合集

    1、基于NUC980的4G、wifi、網(wǎng)的物聯(lián)網(wǎng)網(wǎng)關(guān)項目開發(fā)項目描述目前工業(yè)控制和工業(yè)現(xiàn)場的數(shù)據(jù)采集與遠(yuǎn)程控制多還是使用串口類接口進(jìn)行現(xiàn)場通信,而nuc980提供10個
    發(fā)表于 06-08 14:32

    求一種基于NUC980開發(fā)板的數(shù)據(jù)采集網(wǎng)關(guān)設(shè)計方案

    1、基于NUC980開發(fā)板的數(shù)據(jù)采集網(wǎng)關(guān)設(shè)計新NUC980系列MPU有高達(dá)300 MHz 的執(zhí)行速度和內(nèi)嵌最高 128 MB DRAM及豐富的周邊,現(xiàn)在又搭載上了RT-Thread OS以及
    發(fā)表于 06-13 18:08

    NUC980測評快速上手與GPIO

    ,首先介紹一下板子上的兩個端口,兩個microusb分別為NUWriter的下載與普通串口,所以基本上一根線就可以滿足譬如GPIO的測評。1.板載GPIO介紹NUC980是新科技3
    發(fā)表于 10-17 15:55

    請教nuc980如何實現(xiàn)在線升級

    請教,nuc980 如何實現(xiàn)在線升級,是通過u-boot升級嗎,應(yīng)該怎么配置u-boot,升級包要放在哪里?第一次用nuc980,不會linux
    發(fā)表于 10-28 10:16

    請問nuc980如何在裸機程序中實現(xiàn)nuc980軟件復(fù)位?

    nuc980如何在裸機程序中實現(xiàn)nuc980軟件復(fù)位?
    發(fā)表于 06-13 08:21

    請問nuc980如何在裸機程序中實現(xiàn)nuc980軟件復(fù)位?

    nuc980如何在裸機程序中實現(xiàn)nuc980軟件復(fù)位?
    發(fā)表于 09-04 08:22

    科技NuMaker NUC980 主板介紹

    Linux 工業(yè)網(wǎng)絡(luò)控制開發(fā)平臺 新科技提供工業(yè)網(wǎng)絡(luò)控制開發(fā)平臺采用 NUC980DK61Y 微處理器,此為一套工業(yè)用網(wǎng)絡(luò)控制開發(fā)平臺,完整的硬件設(shè)計與軟件參考設(shè)計。包含了新執(zhí)行速度300
    的頭像 發(fā)表于 01-13 10:13 ?9387次閱讀
    新<b class='flag-5'>唐</b>科技NuMaker <b class='flag-5'>NUC980</b> 主板介紹

    科技NUC980 工業(yè)控制物聯(lián)網(wǎng)系列介紹

    NUC980 系列采用 ARM926EJ-S 核心,執(zhí)行速度高達(dá) 300 MHz,堆棧 16 MB、64 MB 或 128 MB DDR-II 內(nèi)存于同一封裝,提供 64-pin、128-pin
    的頭像 發(fā)表于 02-05 09:17 ?4102次閱讀
    新<b class='flag-5'>唐</b>科技<b class='flag-5'>NUC980</b> 工業(yè)控制物聯(lián)網(wǎng)系列介紹

    NUC980規(guī)格書

    NUC980規(guī)格書(嵌入式開發(fā)工程師工資水平)-新科技ARM9 系列 NUC980產(chǎn)品手冊
    發(fā)表于 07-30 12:58 ?27次下載
    新<b class='flag-5'>唐</b><b class='flag-5'>NUC980</b>規(guī)格書

    NUC980 DIY項目大挑戰(zhàn) - EtherCAT實現(xiàn)

    ,就準(zhǔn)備上個RTOS,以前M3和M4的芯片,主要用FreeRTOS,最近也開始用RT-Thread。新官方也推出了NUC980的RT
    的頭像 發(fā)表于 02-02 11:30 ?1987次閱讀

    NUC980 Chili平臺可提供邊緣運算(Edge Computing)遠(yuǎn)程監(jiān)控的管理解決方案

    NUC980 Chili平臺可提供邊緣運算(Edge Computing)遠(yuǎn)程監(jiān)控的管理解決方案
    的頭像 發(fā)表于 08-10 11:00 ?634次閱讀
    新<b class='flag-5'>唐</b><b class='flag-5'>NUC980</b> Chili平臺可提供邊緣運算(Edge Computing)遠(yuǎn)程監(jiān)控的管理解決方案