Design methods and steps of serial communication under Linux environment

Publisher:脑电狂徒Latest update time:2018-02-17 Source: eefocus Reading articles on mobile phones Scan QR code
Read articles on your mobile phone anytime, anywhere

    introduction

    In the data acquisition system, since the single-chip microcomputer focuses on control and has weak data processing capabilities, it is cumbersome to operate the collected data. If the communication with the host computer is carried out through the serial port, the powerful data processing capabilities and friendly control interface of the host computer can be used to process and display the data, which can improve the design efficiency. Serial communication has become the first choice for communication between the upper and lower computers with its simple hardware connection and mature communication protocol. The s3c2440 transplanted with the Linux operating system can operate the serial port in the Linux environment, which reduces the difficulty of serial port operation and allows developers to focus on developing large-scale applications without spending time on operating the underlying design.

    1 Hardware Connection

    S3C2440 is a processor based on ARM9 core produced by Samsung, powered by 3.3V voltage ; C8051Fxxx series microcontroller is a high-performance and high-speed microcontroller compatible with 8051 launched by CYGNAL of the United States, powered by 3.3V voltage. The power supply voltage of the two is the same, so no level conversion is required for serial port communication . The hardware connection adopts the most commonly used TXD, RXD, GND three-wire connection method. Note that the cross connection method is used, that is, TXD  RXD, RXD  TXD.

    2Serial communication under Linux

    2.1 Serial port device description under Linux

    The Linux2.6.32 operating system is transplanted to s3c2440, and the serial port driver of s3c2440 is loaded. Through the serial port operation function and file operation function provided by Linux, the operation of the serial port is equivalent to file operation, which reduces the difficulty of serial port operation and improves efficiency. In the program, devices and files are operated through file descriptors. File descriptors are non-negative integers in the Linux kernel. Linux device files are stored in the "/dev" directory, and serial ports are no exception. The device files corresponding to the serial port can be found in /dev. The device file path of serial port 1 corresponding to this article is "/dev/ttySAC1".

    2.2 Serial communication programming under Linux

    Serial communication requires setting some parameters, such as baud rate, data bit, stop bit, input and output mode, etc. These parameters exist in the termios structure provided by Linux, which is a standard interface used by the Linux system to query and operate various terminals. It is defined in the header file as shown below:

   

    STructtermios{

    tcflag_tc_iflag;/*input flag*/

    tcflag_tc_oflag;/*output flag*/

    tcflag_tc_cflag/*control flag*/

    tcflag_tc_lflag/*Local flag*/

    CC _tc_cc[NCCS];/*Control characteristics*/

    };

    The Linux serial port communication steps can be divided into the following three steps, and the operation process is shown in Figure 1.

Figure 1 Operation process

    Figure 1 Operation process

    Step 1: Open the serial port

    Call the open() function to open the serial port device file. If an error occurs, -1 is returned. If successful, the file handle is returned.

    #defineUART1/dev/ttySAC1

    intfd;

    fd=open("UART1",O_RDWR)/*Open the serial port device in readable and writable mode*/

     

    Step 2: Set serial port properties

    The function tcsetattr() can set the structure attributes of the serial port, and tcgetatt() can get the structure attributes of the serial port. In the termios structure, the most important is c_cflag. By assigning values ​​to it, users can set the parameters such as the serial port baud rate, data bits, stop bits, and parity bits. The two variables VMIN and VTIME in the c_cc array determine whether to return input. c_cc[VTIME] sets the byte input time timer, and c_cc[VMIN] sets the minimum number of received bytes that meet the read function. The values ​​of these two variables must be set reasonably to ensure the communication success rate of the serial port.

    intset_attr(intfd)

    {

    structtermiosnewtio,oldtio;

    tcgetattr(fd,&oldtio);

    cfsetispeed(&newtio,B9600);/*Set the read baud rate to 9600*/

    cfsetospeed(&newtio,B9600);/*Set the write baud rate to 9600*/

    MEMSet(&newtio,0

    ,sizeof(newtio))

    ;

    newtio.c_cflag=CS8|CREAD;/*Set data bits to 8 bits and enable reception*/

    newtio.c_cflag&=~PARENB;/*No parity check*/

    newtio.c_cflag&=~CSTOPB;/*1 stop bit*/

    newtio.c_cc[VMIN]=1;/*Read when a byte of data is received*/

    newtio.c_cc[VTIME]=0;/*Do not use timer*/

    tcflush(fd,TCIOFLUSH);/*Clear the input and output buffers*/

    tcsetattr(fd,TCSANOW,&newtio)/*Make the set terminal attributes take effect immediately*/

    }

    Step 3: Serial port reading and writing, serial port closing

    After setting the communication parameters, you can use the standard file read and write commands read() and write() to operate the serial port. Finally, before exiting, use the close() function to close the serial port.

    voidrd_wr()

    {

    write(fd,wbuf,10);

    usleep(500000);/*Delay 50ms to wait for the lower computer to send data*/

    read(fd,rbuf,10);

    printf("readstringis%sn",rbuf);

    }

    3 Communication Programming

    The serial communication program between ARM and MCU includes two aspects: on the one hand, the serial communication program of ARM as the host computer, and on the other hand, the serial communication program of MCU as the slave computer. Before communication, a reasonable communication protocol must be formulated to ensure the reliability and success rate of communication. The communication protocol between the two parties is now agreed as follows:

    (1) The baud rate is 9600 bit/s, and the frame format is 1-8-N-1 (1 start bit, 8 data bits, no parity check, 1 stop bit); (2) Since the speed of the upper computer ARM is much higher than that of the lower computer microcontroller, the upper computer takes the initiative to communicate and the lower computer waits. Before data transmission, ARM first sends a communication signal /0xaa, and the microcontroller responds with a /0xbb after receiving it, indicating that it can be sent, otherwise it continues to communicate; (3) The microcontroller side can have interrupt and query methods to send and receive serial port data. This article adopts the interrupt method; (4) The ARM processor s3c2440 uses UART1 to communicate with the microcontroller, and UART0 is used as the s3c2440 terminal console.

    3.1 Communication Program Design of Host Computer ARM

    Since s3c2440 has transplanted a customized and tailored Linux2.6.32 kernel operating system, the serial port operation method under Linux mentioned above is used for serial port operation. The program flow chart is shown in Figure 2.

Figure 2 Program flow chart

    Figure 2 Program flow chart

    3.2 Communication Program Design of Lower MCU

    The timer T1 of C8051F021 is selected as the baud rate generator, the crystal oscillator uses 11.0592 MHz , the timer works in mode 2, the initial count value is 0xfd, the serial port works in serial mode 1 (1-8-N-1), and the interrupt mode is used to send and receive data. The program flow chart is shown in Figure 3.

    The serial communication program under Linux is compiled with the arm-linux-g CC 4.4.3 cross-compilation tool under LinuxRHEL5 on PC and mounted on s3c2440 via NFS to run. The communication program on the microcontroller side is compiled with Cygnal's integrated development environment (IDE) and downloaded to C8051F021 for running.

Figure 3 Program flow chart


    Figure 3 Program flow chart

    4 Conclusion

    With the growing application scope of embedded Linux in China in recent years, embedded Linux devices based on the ARM platform will also be increasingly used in data acquisition as a host computer to process, display, store and send data. The solution introduced in this article is suitable for the serial communication design of ARM and single-chip microcomputer under Linux in most occasions. Designers only need to modify or re-formulate the communication protocol according to their actual needs. In addition, it should be noted that since the speed of the host computer ARM is much faster than that of the single-chip microcomputer, too much data cannot be sent at one time, otherwise it is very likely that the sending buffer will overflow and data loss will occur. Developers should choose the appropriate frame length according to the conditions of the devices on both sides of the communication to achieve the best transmission state.


Reference address:Design methods and steps of serial communication under Linux environment

Previous article:Porting standard Linux operating system to S3C2410
Next article:Implementing SDR system based on OMAP-L138 DSP+ARM processor and FPGA

Latest Microcontroller Articles
  • Download from the Internet--ARM Getting Started Notes
    A brief introduction: From today on, the ARM notebook of the rookie is open, and it can be regarded as a place to store these notes. Why publish it? Maybe you are interested in it. In fact, the reason for these notes is ...
  • Learn ARM development(22)
    Turning off and on interrupts Interrupts are an efficient dialogue mechanism, but sometimes you don't want to interrupt the program while it is running. For example, when you are printing something, the program suddenly interrupts and another ...
  • Learn ARM development(21)
    First, declare the task pointer, because it will be used later. Task pointer volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • Learn ARM development(20)
    With the previous Tick interrupt, the basic task switching conditions are ready. However, this "easterly" is also difficult to understand. Only through continuous practice can we understand it. ...
  • Learn ARM development(19)
    After many days of hard work, I finally got the interrupt working. But in order to allow RTOS to use timer interrupts, what kind of interrupts can be implemented in S3C44B0? There are two methods in S3C44B0. ...
  • Learn ARM development(14)
  • Learn ARM development(15)
  • Learn ARM development(16)
  • Learn ARM development(17)
Change More Related Popular Components

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
circle

About Us Customer Service Contact Information Datasheet Sitemap LatestNews


Room 1530, 15th Floor, Building B, No.18 Zhongguancun Street, Haidian District, Beijing, Postal Code: 100190 China Telephone: 008610 8235 0740

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号