工具/软件:Linux
供参考我已在标记中设置了我的帖子的格式、它以单间距字体显示效果最佳。
我有 一个- Variscite VAR-SOM-AM33 SoM 和开发板(VAR-AM33CustomBoard) ,我尝试让 UART3与 - SparkFun FTDI Basic Breakout - 3.3V TTL UART 转 USB 适配器(http://sfe.io/p9873) **困惑部件摘要:**我还在基于定制 SoM 载板的工作 在这个 Variscite 开发板上、我知道当我剪切迹线并连接 SparkFun UART/USB 时、UART0工作得非常完美。 因此、UART0的配置方式与 UART3的配置方式明显不同。 软件 ==== 我在很多项目上都使用了这个完全 FTDI USB 适配器、它一直运行得很好。 下面是我尝试在开发板上启用 UART3的情况: TI 基于 Web 的适用于 AM335x 的 PinMux 配置(http://dev.ti.com/pinmux) ------------ -仅带 RXD 和 TXD 的 UART3 - UART 引脚 - C15为 RXD、无拉电阻(顺便说一下与 UART0不同) C18是 TXD,下拉(就像 UART0一样) Yocto Kernel Serial Driver Selection (Yocto 内核串行驱动程序选择)------------------------------------------------------- 在``默认内核串行8250堆栈的庞大规模后、我最终偶然发现了 Δ Σ OMAP-serial.c Δ Σ 驱动器。 我想看看它是否能解决我的问题、或者至少要减少代码量(作为一个.c 文件)。 因此我配置了内核(make menuconfig)以禁用8250并启用 Device Drivers->Char Drivers->Serial Drivers 中的 CONFIG_SERIAL_OMAP。 Yocto 内核设备树配置 ------------------------------------------------------- TI Pinmux 生成了此代码、我将其添加到 Yocto 环境的内核器件树中: myuart3_PINS_DEFAULT:myuart3_PINS_DEFAULT{ pinctrl-single、pins =< 0x160 (PIN_INPUT | MUX_MODE1)/*(C15) spi0_CS1.uart3_RXD * 0x164 (PIN_OUTPUT 下拉| MUX_MODE1)/*(C18) eCAP0_IN_PWM0_OUT.uart3_TXD */ >; `;**我注意到**在编辑` kernel-source/arch/arm/boot/dts/var-som-am33.dts`时,有一个名为`spi1_pins_default`的 SPI 设备,它使用`0x164引脚,因此我也删除了它的条目(未显示在 git diff 中)。 默认情况下不使用 SPI1、但我只是偏执了。 以下是我的器件树源的`git diff`: diff --git a/arch/arm/boot/dts/var-som-am33.dts b/arch/arm/boot/dts/var-som-am33.dts 索引0fdb4e3..05fbd0a 100644 ---- a/arch/arm/boot/dts/var-som-am33.dts ++ b/arch/arm/boot/dts/var-som-am33.dts @@-263,6+263,13 @@ >; }; + myuart3_PINS_DEFAULT:myuart3_PINS_DEFAULT{ + pinctrl-single、pins =< + 0x160 (PIN_INPUT | MUX_MODE1)/*(C15) spi0_CS1.uart3_RXD * + 0x164 (PIN_OUTPUT 下拉| MUX_MODE1)/*(C18) eCAP0_IN_PWM0_OUT.uart3_TXD */ + >; + }; + @@-533,11 +522,8 @@ }; uart3{(&U) - /* - pinctrl-names ="default"、"sleep"; - pinctrl-0 =<&uart3_PINS_DEFAULT>; - pinctrl-1 =<&uart3_PINS_SLEEP>; - * + pinctrl-names ="default"; + pinctrl-0 =<&myuart3_PINS_DEFAULT>; 状态="正常"; }; 最后使用 bitbake 重建内核/设备树: yocto_varsomam33/tisdk/build $ machine=varsomam33 bitbake -C 编译 linux-ti-variscite 验证设备树设置------------------------------------------------------- 内核和设备树构建完成后、引导它们(在我的情况下是通过 TFTP/NFS 内核服务器)、并检查我们的设备树设置是否符合我们的预期: root@varsomam33:~# find /sys/firmware/devicetree -name "*myuart*" /sys/firmware/devicetree/base/ocp/l4_wkup@44c00000/CM@210000/引脚多路复用@800/myuart3_PINS_DEFAULT root@varsomam33:~# od -x /sys/firmware/devicetree/base/ocp/l4_wkup@44c00000/SCM@210000/ pinmux@800/myuart3_pins_default/pinctrl-single、pins 0000000 0000 6001 0000 2900 0000 6401 0000 0100 0000020 如果我们以字节序修复输出值(我的总线框工具不支持"od -t x1")、我们可以看到: 引脚 |值 ---- |---- 0x0160 | 0x0029 0x0164 | 0x0001 、此操作使用`include/dt-bindings/pinctrL/am33xx.h`中的定义进行精确验证 #define PULL_DISABLE (1 << 3) #define INPUT_EN (1 << 5) #define PIN_OUTPUT 下拉0 #define MUX_MODE1 硬件 === 连接: 载板 | SparkFun USB -------------- |--- J18引脚9 (UART3_RXD)| TXO J18引脚10 (UART3_TXD)| RXI J15引脚4 (接地) | GND 测试 ==== 我使用了一个用 C 语言编写的非常简单的198线路串行终端程序(github.com/.../minitrem)。 我已经在各种嵌入式 Linux 和桌面 Linux 器件上使用了它多年了。 它不使用第123行所示的流量控制: newsertiio.c_cflag = fed_Baud | CS8 | CLOCAL | CREAD; 接下来、我将使用 SparkFun 器 件(本例中为/dev/ttyUSB1)和嵌入式端(/dev/ttyO3)在我的台式 Linux 机器上打开串行终端。 我在每个终端会话中键入字符。 请注意 、从嵌入式会话键入时、桌面上会接收到"A"字符、但从桌面会话键入时、在嵌入式端不会接收到字符。 嵌入式串行终端 --- -我在嵌入式终端上键入三个"A"字符。 -我不接收从桌面终端键入的任何字符 输出: root@varsomam33:~./minitrem -d/dev/ttyO3 *********** 远程控制台:Ctrl-]退出***** 台式串行终端 --- -请注意,我在桌面上收到了三个"A"字符。 -我在此终端中键入"t"、但它不会显示在嵌入式终端上。 输出: #./minitrem -d/dev/ttyUSB1 *********** 远程控制台:Ctrl-]退出***** AAA 检查 UART 状态 --- **注意:我们已在 UART3上传送了一些字符,但尚未收到任何** root@varsomam33:~# cat /proc/tty/driver/OMAP-SERIAL serinfo:1.0驱动程序修订版: 0:UART:OMAP UART0 MMIO:0x44E09000 IRQ:155 TX:3080 Rx:8 RTS|CTS|DTR|DSR 1:UART:OMAP UART1 MMIO:0x48022000 IRQ:156 TX:0 Rx:0 DSR|CD|RI 2:UART:OMAP UART2 MMIO:0x48024000 IRQ:157 TX:0 Rx:0 CTS|DSR 3:UART:OMAP UART3 MMIO:0x481A6000 IRQ:158 TX:3 Rx:0 CTS|DSR 4:UART:OMAP UART4 MMIO:0x481A8000 IRQ:159 TX:0 Rx:0 CTS|DSR 5:UART:OMAP UART5 MMIO:0x481AA000 IRQ:160 TX:0 Rx:0 CTS|DSR Saleae 逻辑分析仪屏幕截图 ========================================== UART3 TX 在0和3.3V 之间看起来很好 --- UART3 RX 只能从3.3V 降至2.5V --- 总结: 到目前为止我的测试结果中的真值表。 请注意、当我说它不起作用时、它会出现上述问题(2.5V 至3.3V 摆幅)。 电路板 | UART |配置|结果 ------------------------ Variscite | UART0 | RS232 DCE |工作 Variscite | UART1 | RS232 DTE |工作 Variscite | UART3 | TTL/UART |无工作(此帖子对此进行了说明) 定制 | UART0 | TTL/UART |工作 定制 | UART1 | RS232 DTE |工作 定制 | UART1 | TTL/UART |无工作(使用本帖子中描述的相同过程) 我觉得这与调制解调器控制线(流控制)有关、并且我的配置设置未被采用(如`/proc/tty/driver/OMAP-SERIAL`) 任何帮助都值得赞赏、谢谢!



