serial port device driver

12
BY-ARPAN BHATIA EMBLOGIC 53 BATCH

Upload: ellie-james

Post on 18-Nov-2015

232 views

Category:

Documents


0 download

DESCRIPTION

"Emblogic.com" is the best education center in India to assist you about serial port device driver and their development as well. To know more about these kind of training program, visit our professional website.

TRANSCRIPT

  • BY-ARPAN BHATIA

    EMBLOGIC 53 BATCH

  • SERIAL PORT

    1. INTRODUCTION

    Our PCs are generally contains two parallel ports and one serial port.

    These both the ports work in different manner. Parallel port is generally used to

    connect a PC to Printer, and rarely used for any other work. A parallel port

    sends and receives the data 8 bits, through eight separate wires at a time. While

    serial port send and receive one bit at a time by use of one wire. It uses three

    wires one for send one for receive the data and one wire for ground. so two way

    communication is possible in that case.

    2. RS232 PROTOCOL

    RS23 is a common standard protocol used for communication between

    the computers and its peripheral devices. It specifies common voltage and

    signal level, common pin wire configuration and minimum, amount of control

    signals. As mentioned above this standard was designed with specification for

    electromechanically teletypewriter and modem system and did not define

    elements such as character encoding, framing of characters, error detection

    protocols that are essential features when data transfer takes place between a

    computer and a printer. Without which it could not be adopted to transfer data

    between a computer and a printer. To overcome this problem a single integrated

    circuit called as UART known as universal asynchronous receiver/transmitter is

    used in conjunction with RS232.

    A standard definition was given by EIA to define RS232 as an interface

    between Data terminal equipment and Data communication equipment. A

    typical RS232 system is shown below.

    The arrangement to shown in fig1 and fig2-

  • Fig:1

    Fig:2

    2.1 DTE-A DTE stands for data terminal equipment is an end instrument that

    convert user information into signals or reconverts the receive signal. It is a

    functional unit of station that serves as data source or data sink and provides for

    communication control function according to the link protocol. A male

    connector is used in DTE and has pin out configuration.

    2.2 DCE-A DCE stands for data communication equipments. It sits between the

    DTE and data transmission circuit for example modem. A DCE device uses a

    female connector which has holes on the surface to hold male connector.

    A minimum of three signals are required for communication between a DTE

    and a DCE devices. These signals are a transmission line, a reception line and

    ground. These two devices communicate with each other by handshaking. It

  • allows a DTE and a DCE device system to acknowledge each other before

    sending the data.

    2.3 Handshaking -is a process in which a DTE device sends a signal to a DCE

    device to establish a connection between the devices before the actual transfer

    of data. It sets the parameters of communication channel establish between two

    equipment before normal communication over the channel begins. It follows

    physical establishment of the channel and precedes normal information

    transfer. Handshaking makes it possible to connect relatively heterogeneous

    systems or equipment over a communication channel without the need for

    human intervention to set parameters. This same concept is used in RS232 to

    allow two devices communicate with each other before the actual exchange of

    information.

    All these terms put together gives a complete picture of a RS232 system starting

    from DTE to DCE with UART, line drivers and RS232 as conjunction between

    them.

    3.UART

    The Universal Asynchronous Receiver/Transmitter (UART) controller is

    the key component of the serial communications subsystem of a computer.

    The UART takes bytes of data and transmits the individual bits in a sequential

    fashion. At the destination, a second UART re-assembles the bits into complete

    bytes. Serial transmission is commonly used with modems and for non-

    networked communication between computers, terminals and other devices.

    There are two primary forms of serial transmission: Synchronous and

    Asynchronous Depending on the modes that are supported by the hardware.

    3.1 SYNCHRONOUS SERIAL TRANSMISSION-Synchronous serial

    transmission requires that the sender and receiver share a clock with one

    another, or that the sender provide a strobe or other timing signal so that the

  • receiver knows when to read the next bit of the data. In most forms of serial

    Synchronous communication, if there is no data available at a given instant to

    transmit, a fill character must be sent instead so that data is always being

    transmitted. Synchronous communication is usually more efficient because only

    data bits are transmitted between sender and receiver, and synchronous

    communication can be more costly if extra wiring and circuits are required to

    share a clock signal between the sender and receiver. The standard serial

    communications hardware in the PC does not support Synchronous operations.

    3.2 ASYNCHRONOUS SERIAL TRANSMISSION-Asynchronous

    transmission allows data to be transmitted without the sender having to send a

    clock signal to the receiver. Instead, the sender and receiver must agree on

    timing parameters in advance and special bits are added to each word which are

    used to synchronize the sending and receiving units. When a word is given to

    the UART for Asynchronous transmissions, a bit called the "Start Bit" is added

    to the beginning of each word that is to be transmitted. The Start Bit is used to

    alert the receiver that a word of data is about to be sent, and to force the clock in

    the receiver into synchronization with the clock in the transmitter.

  • 4. BLOCK DIAGRAM OF UART-

    Fig:3

    Before Considering the Block Diagram this is necessary to know about the task

    we want to perform there are mainly three task for we want to make the driver

    of our serial port and give the following task under consideration we will

    proceed further-

    CASE1: To implement the NULL modem and send and receive a character.

    CASE2: Modify the above driver and send a string using ring buffer.

    CASE: Transfer a file using FTP across a serial port.

    4.1 NULL MODEM -The null modem cable is frequently called a crossover

    cable. It is used to allow two serial Data Terminal Equipment (DTE) devices to

  • communicate with each other without using a modem or a Data Communications

    Equipment (DCE) device in between. For this to happen, the Transmit (TXD) pin

    of one device needs to be connected to the Receive (RXD) pin of the other

    device. To enable handshaking between the two devices, the Request to Send

    (RTS) pin of one device must be connected to the Clear to Send (CTS) pin of the

    other device. Because these pins are "crossed" on the two cable terminals, the

    name crossover cable is used.

    A straight-through cable is used to connect a DTE device to a DCE

    device. The TXD-RXD and RTS-CTS pins are not cross-connected in this case,

    hence the term straight through cable.

    Fig: 4 Simple Null Modem

    Fig: 5 Null Modem with Handshaking

  • 5. REGISTERS-

    To set the addresses of register first we set the BASE_ADDRESS in header file

    i.e. 0x3f8 and according to the table 1 we given the address of all registers as

    follows

    #define BASE_ADDRESS 0X3f8

    #define RBR (BASE_ADDRESS+0)

    #define DLL (BASE_ADDRESS+0)

    #define DLM (BASE_ADDRESS+1)

    #define THR (BASE_ADDRESS+0)

    #define IER (BASE_ADDRESS+1)

    #define IIR (BASE_ADDRESS+2)

    #define FCR (BASE_ADDRESS+2)

    #define LCR (BASE_ADDRESS+3)

    #define MCR (BASE_ADDRESS+4)

    #define LSR (BASE_ADDRESS+5)

    #define MSR (BASE_ADDRESS+6)

    #define SCR (BASE_ADDRESS+7)

    5.1 Line Control Registers (LCR) - The Default value of this registers is

    0000 0000 it is called also the reset value. The programmer can also read the

    contents of the Line Control Register. The read capability simplifies system

    programming and eliminates the need for separate storage in system memory of

    the line characteristics. The system programmer specifies the format of the

    asynchronous data communications exchange and set the Divisor Latch Access

    bit via the Line Control Register (LCR).

    CASE1: According to table 1 we have to set the value. first we initialize the

    value of LCR 0x8c using outb(0x8c,LCR); to activate the divisor latch.

    After this we have to set the baud rate according to specification of computer.

  • Than we again set this register to outb(0x03,LCR); to assign the number of bits

    to send and access receiver buffer, Transmitter holding register and interrupt

    enable register.

    5.2 DIVISOR LETCH- This register is used to set the baud rate for the

    computer. It is a 16 bit register divided into two parts Divisor Letch (LS) and

    Divisor Latch (MS) generally called as DLL and DLM. We can set baud rate

    According to the given table below or we have a formula i.e.

    output frequency of the Baud Generator is 16 x the Baud [divisor =

    16 x (frequency input) / (baud rate c 16)].

    Table:1

    we put the value in init file for DLL and DLM like: outb(0x0c,DLL); and

    (0x00,DLM);.

    After this we put the value of LCR is (0x03,LCR); as discussed above.

    5.3 Line Status Register (LSR) - This register provides status information to

    the CPU concerning the data transfer. Its default value is 0110 0000.

    we will set the bit 0 of this register because this bit is use to tell us that this bit

    will be 1 whenever all the characters will be received and transfer to receiver

    buffer register this bit will become 0 when all all the data has been read from

  • RBR or FIFO. So we set the program in a manner so that it will fulfill the above

    condition as below in our read file.

    do

    {

    status=inb(LSR);

    printk(KERN_INFO"status (in do while):%x\n",status);

    }

    while((status & (0x01))!=0x01);

    printk(KERN_INFO"status ( after do while):%x\n",status);

    *((char *)temp->data)=inb(BASE_ADDRESS+0);

    ret=copy_to_user(rbuff,temp->data,1);

    #ifdef DEBUG

    printk(KERN_INFO"ret:%d\n",ret);

    printk(KERN_INFO"read data:%c\n",*(char *)rbuff);

    #endif

    Table: 2

  • According to the given table we have to set the value in Line Status Register.

    5.4 FIFO CONTROL REGISTER: This will come in use when we have to

    send a string through serial port. As discussed above in case 2. The default bit

    of this register is set to 0000 0000.

    Bit 0: Writing a 1 to FCR0 enables both the XMIT and RCVR FIFOs. Resetting

    FCR0 will clear all bytes in both FIFOs. When changing from the FIFO Mode

    to the 16450 Mode and vice versa, data is automatically cleared from the FIFOs.

    This bit must be a 1 when other FCR bits are written to or they will not be

    programmed.

    Bit 1: Writing a 1 to FCR1 clears all bytes in the RCVR FIFO and resets its

    counter logic to 0. The shift register is not cleared. The 1 that is written to this

    bit position is self-clearing.

    Bit 2: Writing a 1 to FCR2 clears all bytes in the XMIT FIFO and resets its

    counter logic to 0. The shift register is not cleared. The 1 that is written to this

    bit position is self-clearing.

    Bit 3: Setting FCR3 to a 1 will cause the RXRDY and TXRDY pins to change

    from mode 0 to mode 1 if FCR0e1 (see description of RXRDY and TXRDY

    pins).

    Bit 4, 5: FCR4 to FCR5 are reserved for future use.

    Bit 6, 7: FCR6 and FCR7 are used to set the trigger level for the RCVR FIFO

    interrupt.

    Table: 3

  • By activate FIFO Registers we transferred a string through the serial port

    registers.