开发板 — 调试串口

Posted yantuguiguziPGJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开发板 — 调试串口相关的知识,希望对你有一定的参考价值。

《开发板 — 调试串口》

1.查看串口设备

ls /dev/tty*

  其中ttyAMA1是我们要调试我串口。

2.使用ttyAMA1

通过stty -F  /dev/ttyAMA1 -a查看串口属性

  

   可以查看波特率是9600

通过stty修改串口设置:

1

2

3

stty -F /dev/ttyAMA1 ispeed 115200 ospeed 115200 cs8

115200波特率 8数据位 1停止位 无校验位

  

从ttyAMA1中读取数据:

1

2

3

4

5

cat  /dev/ttyAMA1    //读取串口中的数据

cat  /dev/ttyAMA1  > file.txt    //读取到的数据保存到txt文本文件中

或者

microcom -t 10000 -s 115200 /dev/ttyAMA1 # microcom 读数据,10秒无数据,退出

microcom

  

向ttyAMA1中写数据:

echo "1"  >  /dev/ttyAMA1

3.串口配置

  场景:在调试串口为ttyFIQ0的时候,要调试485。485连接在uart0上。在设备树中使能了设备树后,发现只能往外发送数据,但是用cat数据接收不进来。(用示波器测试485芯片上的Rx有数据进来的情况下)

  可能原因:波特率不同,因为ttyFIQ0是115200,但是uart0的波特率是9600。但是数据可以发送出去用echo,并且在电脑端接收没有乱码。不太理解为什么?

  解决:写串口程序。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

/*******************************************************

*filename:serial_rev.c

*Description:receivedata from Serial_Port

*Date:

*******************************************************/

#include <stdio.h>

#include <string.h>

#include <malloc.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

#include <sys/msg.h> 

#include <termios.h>

#include <sys/time.h>

#include <stdlib.h>

#include <unistd.h>

#include <termios.h>

#include <sys/ioctl.h> 

#include "uart_4g_ttyusb2.h"

//#include <pthread.h>

/*********************************************************/

#define CMD_LEN 7

//#define MAX_MSG_BUFF_SIZE   128 /*定义缓冲区最大宽度*/

static int g_fg_4g = -1;

static char frame_tail[] = {0xFF,0xFC,0xFF,0xFF};

//#define TTYS_DEVNAME "/dev/ttyAMA1" /*需要把寄存器配置uart2的复用口为uart*/

//#define TTYS_DEVNAME "/dev/ttyAMA2" /*需要把寄存器配置uart2的复用口为uart*/

//#define TTYS_DEVNAME "/dev/ttyS1"

//#define TTYS_DEVNAME "/dev/ttyUSB0"

#define TTYS_USB2_DEVNAME "/dev/ttyAMA1"

int uart_4gserial_dev_init()

{

    struct termios opt;

    if(0 < g_fg_4g)

    {

        printf("%s is already opened!",TTYS_USB2_DEVNAME);

    }

    if(0 > g_fg_4g)

    {

        g_fg_4g = open(TTYS_USB2_DEVNAME, O_RDWR|O_NOCTTY); /*读写方式打开串口*/

    }

    if(0 > g_fg_4g) /*打开失败*/

    {

        printf("open %s Error",TTYS_USB2_DEVNAME);

        return -1;

    }

    DBG_PRT(DBG_OFF," FD=%d\\n",g_fg_4g);

    tcgetattr(g_fg_4g,&opt);

     

    DBG_PRT(DBG_OFF," A cflg=%2X oflg=%2X lflg=%2X iflg=%2X\\n",

        opt.c_cflag,opt.c_oflag,opt.c_lflag,opt.c_iflag);

    cfmakeraw(&opt);

    DBG_PRT(DBG_OFF," B cflg=%2X oflg=%2X lflg=%2X iflg=%2X\\n",

        opt.c_cflag,opt.c_oflag,opt.c_lflag,opt.c_iflag);

    cfsetispeed(&opt,B9600); /*波特率设置为B115200bps*/

    cfsetospeed(&opt,B9600);

    //cfsetispeed(&opt,B115200); /*波特率设置为B115200bps*/

    //cfsetospeed(&opt,B115200);

    opt.c_iflag = 0;

    opt.c_oflag = 0;

    opt.c_lflag = 0; //non ICANON

    opt.c_cflag &= ~PARENB;

    opt.c_cflag |= CSTOPB;//停止位2位

    opt.c_cflag &= ~CSIZE;

    opt.c_cflag |= CS8;

    fcntl(g_fg_4g,F_SETFL,0);

    opt.c_cc[VTIME] = 2;

    opt.c_cc[VMIN]  = 128;

    tcsetattr(g_fg_4g,TCSANOW,&opt);

    tcflush(g_fg_4g, TCIFLUSH);

    tcgetattr(g_fg_4g,&opt);

     

    DBG_PRT(DBG_OFF," C cflg=%2X oflg=%2X lflg=%2X iflg=%2X\\n",

        opt.c_cflag,opt.c_oflag,opt.c_lflag,opt.c_iflag);

    DBG_PRT(DBG_OFF," FD=%d return 0\\n",g_fg_4g);

    DBG_PRT(DBG_OFF,"#####\\n");

    return 0;

}

int uart_4gserial_dev_close()

{

    int ret = 0;

    ret = close(g_fg_4g);

    if(ret == -1)

    DBG_PRT(DBG_OFF,"Closethe Device failur");

    return 0;

}

#define PRI_LEN 8

void buf_print(char* str,unsigned char *buf, int len)

{

    int i = 0;

    int j = 0;

    if(NULL == buf)

    {

        return;

    }

    fprintf(stderr,"\\n******** print %s begin len=%d********\\n",str,len);

    while (i < len)

    {

         

        if ((len - i) < PRI_LEN )

        {

            for (; i < len; i++)

            {

                fprintf(stderr,"0x%02X ",buf[i]);

            }

        }

        else

        {

            for (j = 0; j < PRI_LEN; j++)

            {

                fprintf(stderr,"0x%02X ", buf[i + j]);

            }

            i += 8;

        }  

         

        fprintf(stderr,"\\n");

    }  

    fprintf(stderr,"******** print %s end ********\\n",str);

    return;

}

int uart_4guart_cmd_send(unsigned char *cmd, int len)

{

    int write_len = -1;

    if(len > SERIAL_OUT_BUFF_SIZE - 1 || 0 > g_fg_4g)

    {

        return -1;

    }

     

    //buf_print("uart_cmd_send buf",cmd,len);

    write_len = write(g_fg_4g, cmd, len);

    //write_len = len;

    if(write_len != len)

    {

        DBG_PRT(DBG_OFF,"write Device failureá");

        return -1;

    }

    return 0;

}

int uart_4guart_at_read(unsigned char *tmpbuff, int len)

{

    int ret,rcv_len,n = 0;

    rcv_len = read(g_fg_4g, tmpbuff, len);

    if(rcv_len == -1)

    {

        DBG_PRT(DBG_ON," read err\\n");

        perror("read");

        return -1;

    }

     

    return rcv_len;

}

  

4.从内核配置串口

问题描述:一开始通过ls查看到有ttyAMA1这个设备节点。但是直接使用的时候不能使用。然后使用stty查看属性。提示:没有这个设备或者地址。

 

问题分析:有可能是串口驱动里面直接映射了这个设备节点,也就是创建了这个设备节点。但是并没有配置硬件。

问题修改:

1.使能uart1

vi arch/arm/boot/dts/hi3521d.dtsi

   可以查看到这个设备。直接将status中修改成okay。就可以了(不过不建议直接在这边修改)

直接修改

vi arch/arm/boot/dts/hi3521d.dts

 本来只有一个uart0,这个是我们的调试串口。

然后模仿写一个uart1。

2.引脚复用

查看海思的引脚复用手册可以看到

 

通过himm修改引脚复用。这样串口就配置成功。 

分类: 《开发板》

以上是关于开发板 — 调试串口的主要内容,如果未能解决你的问题,请参考以下文章

搭建S3C6410开发板测试环境

AM57x平台开发板的默认调试串口为UART3改为uart1

AM57x平台开发板的默认调试串口为UART3改为uart1

AM57x平台开发板的默认调试串口为UART3改为uart1

第五章

在开发板上安装Android