This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Linux
我们有一个基于 AM335x 入门套件的定制板。 我们的板正在成功引导。 以太网也运行正常。 现在、我们要测试我的处理器和 FPGA (Xilinx Artix)之间的 UART 接口。 我的 UART1连接到 FPGA 侧。
当我将数据写入连接到 FPGA 的 UART 时、FPGA 端什么都没有。 我在 Vivado 看到了这一点。
从 FPGA 发送数据时出现同样的问题。 处理器端未接收到任何内容。 我在 Qt 上观察到的这一点。
我在下面发布我的代码。 请 检查此项并建议我如何进一步完成此 UART 测试。 我们使用 RS232协议进行通信。
引脚多路复用:
uart0_pins:pinmux_uart0_pins{
pinctrl-single、pins =<
AM33XX_IOPAD (0x970、PIN_INPUT_PULLUP | MUX_MODE0) /* uart0_Rxd.uart0_RXD *
AM33XX_IOPAD (0x974、PIN_OUTPUT 下拉| MUX_MODE0) /* uart0_TXD.uart0_TXD *
>;
};
uart1_pins:pinmux_uart1_pins{
pinctrl-single、pins =<
AM33XX_IOPAD (0x978、PIN_INPUT | MUX_MODE0) /* uart1_CTSN.uart1_CTSN *
AM33XX_IOPAD (0x97C、PIN_OUTPUT 下拉| MUX_MODE0) /* uart1_rtsn.uart1_rtsn *
AM33XX_IOPAD (0x980、PIN_INPUT_PULLUP | MUX_MODE0) /* uart1_Rxd.uart1_RxD *
AM33XX_IOPAD (0x984、PIN_OUTPUT 下拉| MUX_MODE0) /* uart1_TXD.uart1_TXD *
>;
};
uart0{(&U)
pinctrl-names ="default";
pinctrl-0 =<&uart0_PINs>;
状态="正常";
};
uart1{(&U)
pinctrl-names ="default";
pinctrl-0 =<uart1_PINs>;
状态="正常";
};
Linux 版本:TI-processor-SDK-Linux-AM335x-EVM-05.00.15。
C 代码:
#include #include #include #include #include #include #include #include #include int g_UARTFile; int setParameters (int speed、int parity) { // DCB p; struct termios tty; memset (&tty、0、sizeof tty); if (tcgetattr (g_UARTFile、&tty)!= 0) { fprintf (stderr、"setParameters error %d from tcgetattr\n"errno); 返回-1; } cfsetospeed (&tty、速度); cfsetispeed (&tty、speed); tty.c_cflag =(tty.c_cflag 和~CSIZE)| CS8; // 8位字符 //针对速度不匹配的测试禁用 IGNBRK;否则接收中断 //作为\000字符 tty.c_iflag &=~IGNBRK; //禁用中断处理 tty.c_lflag = 0; //无信令字符、无回波、 //无规范处理 tty.c_oflag = 0; //无重映射,无延迟 tty.c_cc[Vmin]= 0; //读取不会阻止 tty.c_cc[VTIME]= 5; // 0.5秒读取超时 tty.c_iflag &=~(IXON | IXOFF | IXANY);//关闭 XON/XOFF 控制器 tty.c_cflag |=(CLOCAL | CREAD);//忽略调制解调器控件, //启用读取 tty.c_cflag &=~(PARENB | PARODD); //关闭奇偶校验 tty.c_cflag |=奇偶校验; tty.c_cflag &=~CSTOPB; tty.c_cflag &=~CRTSCTS; if (tcsetattr (g_UARTFile、TCSANOW、&tty)!= 0) { fprintf (stderr、"tcsetattr 中的 setParameters error %d、\n\n"、errno); 返回-1; } 其他 printf ("成功设置参数\n"); //return 0; } void set_blocking (int 应该_block) { struct termios tty; memset (&tty、0、sizeof tty); if (tcgetattr (g_UARTFile、&tty)!= 0) { fprintf (stderr、"set_blocking error %d from tggetattr\n"errno); 返回; } tty.c_cc[Vmin]=应该_BLOCK? 1:0; tty.c_cc[VTIME]= 5; // 0.5秒读取超时 if (tcsetattr (g_UARTFile、TCSANOW、&tty)!= 0) fprintf (stderr、"set_blocking error %d setting term attributes\n\n"、errno); } void UartOpen() { G_UARTFile = open ("/dev/ttyS1、O_RDWR | O_NOCTTY | O_SYNC); if (g_UARTFile < 0){ Perror ("UART 打开被拒绝\n"); 退出(1); } printf ("UART 打开成功\n\n"); setParameters (9600、1); SET_BLOCKING (0); printf ("UART 已成功连接!!!!! \n\n"); } void writeData(){ unsigned char temp ='AA'; 字符 A = 1; int Spot = 0、n_written = 0; unsigned char cmd[]="initialize\n"; while (1){ int Spot = 0、n_written = 0; n_write=写入(g_UARTFile、&a、sizeof (a))); Spot += n_written; /*int n_written = 0、Spot = 0; 执行{ n_write=写入(g_UARTFile、&cmd[spot、1); Spot += n_written; }while (cmd[spot-1]!='\n'&& n_written >0); if (spot >0)*/ printf ("已成功写入%d 个字符。\n\n"、Spot); } } 空 ReadData(){ 字符响应[1024]、buf; int Spot = 0、n; memset (响应、'\0'、sizeof 响应); 执行{ N =读取(g_UARTFile、&buf、1); sprintf (&response [spot、"%c"、buf); Spot += n; }while (buf!='\r\n>0); if (n<0) printf ("读取错误\n\n"); 否则、如果(n=0) printf ("读取任何内容!\n\n"); 否则 printf ("响应%s\n"\n、响应); } int main (int argc、char * argv[]) { UartOpen(); // writeData(); ReadData(); }
您好、Vamsi、
我建议您从用户空间验证 UART1引脚多路复用器。 您可以使用 devmem2工具读取控制模块寄存器值、并检查这些值是否符合预期。
接下来、您可以检查 AM335x UART1引脚上是否存在预期信号。 您可以连接示波器并探测引脚。 确保 FPGA 在这些引脚上生成预期的数据/信号。
另请检查以下指针:
software-dl.ti.com/.../Foundational_Components_Kernel_Drivers.html
processors.wiki.ti.com/.../AM335x-PSP_04.06.00.11_Features_and_Performance_Guide
此致、
帕维尔
非常感谢 Pavel、
我将对其进行检查并告知您状态。