最近测试串口的时候发现一个问题很疑惑,我用的是Linux系统,使用app将串口收发端短接的方式进行测试,测试时收发数据显示很正常,但是我在app中打开硬件流控,用同样的方法,将收发引脚短接测试,同样能收到数据,问题就在于硬件没有接硬件流控引脚,而且没有配置串口流控引脚的pinmux,按理说不能收到数据。我在app中打开硬件流控时用的获取属性设置属性的函数中都检查过返回值,返回值没有错误。
硬件工程师说是软件问题,但是软件看起来也没有问题,麻烦您帮忙看看产生这个问题的原因,谢谢。
tony2:
驱动中是否实现了硬件流控制?如果只是个返回值那么肯定不能用了。
xinxin zhou:
回复 tony2:
驱动中确实实现了硬件流控,而且用户态的app设置流控的函数返回值都是零,也就是返回值都是返回正确的,按理说没有硬件连接,流控设置返回值应该是错误的 但是结果不然,等待解惑中
leo chen:
回复 xinxin zhou:
流控应该也是靠管脚的高低电平来判断的吧
也许当时的管脚状态符合要求,所以返回正确,可以测量一下流控的管脚电平
xinxin zhou:
回复 leo chen:
硬件流控确实靠管脚的高低电平来判断,但是我的这个根本就没有接硬件流控引脚,只是在应用层打开了硬件流控,结果没报错而且还能收发数据。
Jian Zhou:
回复 xinxin zhou:
请问你用的是那个串口?如果是UART1,Linux上的流控脚pinmux配错了,你参考一下:
Incorrect:
From the board-file arch/arm/mach-omap2/board-am335xevm.c:
static struct pinmux_config uart1_wl12xx_pin_mux[] = {
{"uart1_ctsn.uart1_ctsn", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"uart1_rtsn.uart1_rtsn", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT},
{"uart1_rxd.uart1_rxd", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"uart1_txd.uart1_txd", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL},
{NULL, 0},
Correct:
static struct pinmux_config uart1_wl12xx_pin_mux[] = {
{"uart1_ctsn.uart1_ctsn", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT},
{"uart1_rtsn.uart1_rtsn", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"uart1_rxd.uart1_rxd", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"uart1_txd.uart1_txd", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL},
{NULL, 0},
TI中文支持网