TI论坛
直播中

云达贞

7年用户 904经验值
私信 关注

使用pc端串口调试助手调试am335x的uart4,am335x向外发送数据,PC端可接收到但am335x一直读取数据失败这是为什么?

本帖最后由 一只耳朵怪 于 2018-6-5 16:52 编辑

问题如下:使用pc端串口调试助手调试am335x的uart4,am335x向外发送数据,PC端可接收到,但是通过PC端调试助手发送给am335x,am335x一直读取数据失败。而且串口调试助手本身会直接收到已发送的数据。
测试代码如下:
#include #include          /*标准函数库定义*/#include          /*Unix标准函数定义*/#include       /**/#include        /**/#include           /*文件控制定义*/#include         /*PPSIX终端控制定义*/#include           /*错误号定义*/int fd = -1;int open_port(char port[])[        fd = open( port, O_RDWR | O_NONBLOCK );         if (fd<0) [            printf("open serialport failed!n");            return -1;        ]        struct termios tio;        tcgetattr(fd, &tio);        //bzero(&tio, sizeof(tio));        // these must be set first, don't know why        tio.c_cflag |= CLOCAL;        tio.c_cflag |= CREAD;        tio.c_cflag &= ~CSIZE;        // baud rate 115200        if (cfsetispeed(&tio, B115200) != 0)    [            printf("cfsetispeed failedn");            return -1;        ]        if (cfsetospeed(&tio, B115200) != 0)        [            printf("cfsetospeed failedn");            return -1;        ]        // parity NONE        tio.c_cflag &= ~PARENB;        tio.c_iflag &= ~INPCK;        tio.c_iflag |= IGNBRK;        // data bit 8        tio.c_cflag |= CS8;        // stop bit 1        tio.c_cflag &= ~CSTOPB;        // others        tio.c_cc[VTIME] = 0;        tio.c_cc[VMIN]  = 0;        // flush settings        if(tcflush(fd, TCIOFLUSH) != 0)         [            printf("open serialport: Flushing %s ERROR!nn", port);            return -1;        ]        if(tcsetattr(fd, TCSANOW, &tio) != 0)        [            printf("open serialport: Setting %s ERROR!nn", port);            return -1;        ]        return 0;]int main(int argc, char* argv[])[        char port_num[10] = [0,0,0,0,0,0,0,0,0,0];        char wr_num[2] = [1,2];        int ret;        if(argc != 2)        [                printf("%s SerialPortDevFilen", argv[0]);                return -1;        ]        if(open_port(argv[1]) != 0)        [                printf("Fail to open %s!n", argv[1]);                return -2;        ]        else         [                while(1)                [                        printf( "start read %sn", argv[1] );                        ret = read( fd, (void *)port_num, 9 );                        if( ret == -1 )                        printf( "ret = -1n" );                        else                        [                                printf("ret = %dn", ret);                                printf( "%s received : %sn", argv[1], port_num );                        ]                        printf( "start write %sn", argv[1] );                        ret = write( fd, (void *)wr_num, 2 );                        sleep(5);                ]                close_com();                return 0;        ]]
很简单的程序,只是循环接收发送。dts中配置uart4如下:
&uart4 [        pinctrl-names = "default", "sleep";        pinctrl-0 = <&uart4_pins_default>;        pinctrl-1 = <&uart4_pins_sleep>;        status = "okay";];uart4_pins_default: pinmux_uart4_pins_default [                pinctrl-single,pins = <                        0x168 (PIN_INPUT_PULLUP | MUX_MODE1)        /* uart0_ctsn.uart4_rxd */                         0x16C (PIN_OUTPUT_PULLDOWN | MUX_MODE1)         /* uart0_rtsn.uart4_txd */                >;        ];        uart4_pins_sleep: pinmux_uart4_pins_sleep [                pinctrl-single,pins = <                        0x168 (PIN_INPUT_PULLDOWN | MUX_MODE7)                        0x16C (PIN_INPUT_PULLDOWN | MUX_MODE7)                >;        ];

硬件上,uart4的收发信号线 直接 接到 PC端 u***转串口(232)线,信号线上没有连接任何上下拉等。

回帖(10)

云达贞

2018-6-4 05:22:58
除了上边的dts中配置外,不知道还有没有哪里需要配置的?
各位还有什么比较好的测试串口的方法也希望能赐教一下下。
已经调了两天了,总觉得不是大问题,但是真的很无奈啊!
先行谢过各位的回复
举报

云达贞

2018-6-4 05:42:39
忘记说了,sdk是用的sdk08版本,文件系统用的sdk包中filesystem下的arago-base-tisdk-image-am335x-evm这个。
举报

云达贞

2018-6-4 05:50:21
日志信息如下:
root@am335x-evm:~# dmesg | grep tty[    0.000000] Kernel command line: console=ttyO0,115200n8 root=ubi0:rootfs rw ubi.mtd=NAND.file-system,2048 rootfstype=ubifs rootwait=1[    0.459543] 44e09000.serial: ttyO0 at MMIO 0x44e09000 (irq = 88, base_baud = 3000000) is a OMAP UART0[    1.134043] console [ttyO0] enabled[    1.144560] 48022000.serial: ttyO1 at MMIO 0x48022000 (irq = 89, base_baud = 3000000) is a OMAP UART1[    1.160910] 481a8000.serial: ttyO4 at MMIO 0x481a8000 (irq = 61, base_baud = 3000000) is a OMAP UART4[    1.207870] (hci_tty): inside hci_tty_init[    1.212637] (hci_tty): allocated 249, 0
举报

云达贞

2018-6-4 06:07:54
这是串口设备信息:
root@am335x-evm:/dev# ls -l ttyO*crw-------    1 root     tty       250,   0 Jan  1 00:15 ttyO0crw-rw----    1 root     dialout   250,   1 Jan  1  1970 ttyO1crw-rw----    1 root     dialout   250,   4 Jan  1 00:02 ttyO4
举报

更多回帖

发帖
×
20
完善资料,
赚取积分