首先底层确保rk3288的板子串口通讯是ok的,即能实现自发自收。操作方法简单粗暴:通过用镊子短接串口TX和RX,然后cmd操作echo和cat对应串口节点即可。
1.adb使用ls -l ttyS*命令显示如下,这些就是对应的串口节点,uart0对应/dev/ttyS0,uart1对应/dev/ttyS1,其他以此类推。
crw-rw----. 1 root dialout 4, 64 5月 17 02:24 /dev/ttyS0
crw-rw----. 1 root dialout 4, 65 5月 17 02:24 /dev/ttyS1
crw-rw----. 1 root dialout 4, 66 5月 17 02:24 /dev/ttyS2
crw-rw----. 1 root dialout 4, 67 5月 17 02:24 /dev/ttyS3
2.使用cat /proc/tty/driver/serial
130|rk3288:/ # cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A mmio:0xFF180000 irq:37 tx:0 rx:0
1: uart:unknown port:00000000 irq:0
2: uart:unknown port:00000000 irq:0
3: uart:16550A mmio:0xFF1B0000 irq:38 tx:0 rx:0
4: uart:unknown port:00000000 irq:0
我们发现串口0和3的uart值时16550A,tx值为0,rx值也为0,因此我们本机有2个串口启用,是串口0和3,即ttyS0,ttyS3,我这里使用的是ttyS3来调试。
3、串口屏模组分辨率:240X320
4、注意:如果VCC是3.3V输入时,需要将背面的电阻R4短路、R2开路。模块出厂默认的为5.0V供电输入。
所以如果是使用SunStudio工具给集成屏下指令的话,连接串口跟PC机连接的,集成屏要跳电阻到5v供电,
我们的板子是3.3v串口供电,所以需要跳电阻到3.3v。具体参看文档
5、使用SunStudio工具注意事项:
(1)、串口板的供电要确保是5v,串口板的TX和RX跟屏的TX和RX交叉连接,即屏TX和串口板RX连接,屏RX和串口板TX连接,参考《集成串口屏应用文档.pdf》文档,但是TX和RX的连接不能按照文档接,切记。
(2)、串口板直接和PC机连接,然后查看串口端号,SunStudio工具具体操作参考《软件使用说明.pdf》文档。
(3)、更多的指令《参考集成串口屏指令集.pdf》文档。
6、集成屏接到rk3288板子的时候要将屏供电跳电阻到3.3v,因为板子只能供电到3.3v。
遇到的问题点:
1、背光不亮,原因:背光电压没给对,如果VCC是3.3V输入时,需要将背面的电阻R4短路、R2开路。模块出厂默认的为5.0V供电输入。我这里接到板子上只供3.3v,而集成屏默认供电电压是5v,所以
背光不亮;
2、PC的串口端号没选对,导致识别到的串口错误;
3、使用SunStudio工具发送指令不成功,数据接收区没有返回ok的字符串。原因:错信文档tx和rx没有交叉接,交叉接之后,发送指令ok。
4、接上rk3288板子的时候,tx和rx不用交叉连接,否则发送失败。
5、可以通过stty工具指令设置rk3288板子串口的波特率,具体可百度,这里波特率设置成115200,因为串口屏的使用说明默认波特率就是115200:
busybox stty -F /dev/ttyS0 -a //查看串口参数,查看串口0(/dev/ttyS0)当前的参数,包括波特率、数据位等。
stty -F /dev/ttyS0 ispeed 115200 ospeed 115200 cs8 //该命令将串口1(/dev/ttyS0)设置成115200波特率,8位数据模式。一般情况下设置这两个参数就可以了,如果显示数据乱码,可能还需要设置其它参数,使用man查看stty其它设置选项。
busybox stty -F /dev/ttyS0 speed 115200 cs8 -parenb -cstopb //115200波特率 8数据位 1停止位 无校验位
cat /dev/ttyS3 //接收串口节点/dev/ttyS3发出的数据
echo “xxxx” > /dev/ttyS3 //发送,xxxx表示要写入串口节点/dev/ttyS3的内容
6、串口操作采用UNIX类似的方式,打开/关闭/发送/接收等基本操作采用类似文件系统的方式进行,而一些属性的设置和控制则使用termios来进行。
串口对应的设备文件名为”/dev/ttyS3”。
fd = open(“/dev/ttyS3”, O_RDWR);
如果只发送数据,可以使用O_WRONLY, 如果只接收数据,可以设置成O_RDONLY。
close(fd);
ret = read(fd, buf, 100); //或者read(fd, buf, sizeof(buf);
串口默认的打开方式是非阻塞的,因此本函数只是接收缓冲中的数
据,而并非直接操作IO。
如果缓冲中有接收到的数据,那么本函数将返回实际接收到的数据
长度,当然不会超过指定的100字节。
如果缓冲中没有数据,那么将返回0。
如果接收失败,那么将返回-1,错误代码放在errno中。
ret = write(fd, buf, 100); \write(fd, buf, sizeof(buf));
返回值表示实际发送的数据长度。