TI中文支持网
TI专业的中文技术问题搜集分享网站

AM335x上PRU如何做高速通信?

我用的是BeagleBone Black的中国版,CPU是AM3358,想做的就是实现与FPGA的高速通信,之前是用串口和USB通信,但是串口速度较慢,而USB常常有不稳定的情况,所以想尝试用PRU代替上述通信的方式,最好的效果就是PRU出来的是类似串口的rx和tx,速率达到10M以上,最近也在看相关文档,但是感觉没什么思路,希望有高人可以指点一番,多谢~~~

Steven Liu1:

我们是有PRU做高速串口的例程的,看了你的描述,貌似这个可以满足你的预期。建议你可以评估一下,参考:

http://processors.wiki.ti.com/index.php/Soft-UART_Implementation_on_AM335X_PRU_-_Software_Users_Guide

user4088306:

回复 Steven Liu1:

我也看了这个文档,说是最高的波特率只能设置到115200?难道我可以设置成任意我想要的波特率?

user4088306:

回复 Steven Liu1:

而且这个OpenEmbedded Recipes的组件不能下载了,不知道您这边可能提供另外的下载地址?

Steven Liu1:

回复 user4088306:

印象中,这个不止115200,AM335x的datasheet上1.1节有写:

– Peripherals Inside the PRU-ICSS

One UART Port with Flow Control Pins,Supports Up to 12 Mbps

在我看到实际的case中,是有客户使用1M做产品的。

user4088306:

回复 Steven Liu1:

您好,我现在照着那篇wiki做了一遍,碰到一些问题。首先那个内核直接编译出来后在我的BBB上不能运行,config用的就是kernei自带的arch/arm/configs/am335x_evm_defconfig,然后我就将kernel/drivers/tty/serial/am335x_pru_suart直接移植到我编译能用的3.8.13的kernel上,根据提示的错误一步步拷贝一些必要的文件。编译的内核是否可用还需要进一步的测试,但我对那边wiki上的内容还有一点疑问:

1.SUART驱动中的波特率如果使用非标准的,除了修改波特率的宏定义外,是否需要修改其它内容?

2.SUART使用哪些引脚?是根据自己的需要在device tree中配置吗?

3.如何让PRU自动运行编译好的/lib/firmware下的PRU_SUART_Emulation.bin?

Steven Liu1:

回复 user4088306:

看到你提到了device tree,你是不是用的SDK7.0?

PRU-UART目前仅在3.2版本的kernel上实现了,这个是SDK6.0以及之前的版本。SDK7.0使用的kernel版本是3.12,这两个是有差别的。

注意一下里面的note:

Note: The Linux Driver is implemented on the 3.2.0 kernel.Currently there no plans to port this driver to other kernel versions.

user4088306:

回复 Steven Liu1:

您好,首先感谢您的回复。我没有用您说的SDK6.0和SDK7.0,目前用的内核是BBB自带的,版本是3.8.13,device tree的概念应该在3.x之后就有了吧?还有那篇wiki上3.2.0的内核编译完后在我的BBB上是无法运行的,在内核解压缩后就直接奔溃的,不知道是什么原因,所以我才尝试将SUART的驱动移植到我的3.8.13的内核上。不知道这样会不会有什么不妥?

Steven Liu1:

回复 user4088306:

TI官方发布的SDK版本中,只有3.2版本和3.12版本,你可以了解一下:http://software-dl.ti.com/sitara_linux/esd/AM335xSDK/latest/index_FDS.html

关于移植的问题:看我刚刚给你发的note啊,里面的意思就是这个PRU-UART是在3.2版本上验证过的,目前没有移植到其他版本上的计划,所以就没有这种支持。言下之意不是说你不能做这种移植,只是做移植的话遇到问题,没人支持,自己搞起来会比较耗时间吧。

另外,我仔细看了一下,里面PRU-UART里面的guide,发现里面是使用arago编译器的,这个是我们SDK5.7和之前版本使用的编译器,6.0后改为Linaro了,所以这套东西使用的版本应该是5.7或之前的。但是SDK5.7这个版本中还不支持BBB,BBB到6.0版本才支持的,我估计这是你跑不了的原因。(http://processors.wiki.ti.com/index.php/Sitara_SDK_Release_Notes)

user4088306:

回复 Steven Liu1:

额,那您的意思是PRU-UART的demo很难在我的BBB上实现了?不知道除了这篇wiki外,可还有其它demo可供参考的?

感谢您的回复~~~

Steven Liu1:

回复 user4088306:

应该就是这篇wiki了,里面的资源其实蛮多的,都是链接。

我个人的见解啊,如果你很想在BBB上实现的话,把文档现有的PRU patch等移植到SDK6.0上面会相对可行,因为从SDK5.X的版本移植到SDK6.0上的来时候,架构方面变动不大(编译器变了)。如果移植到SDK7.0上,这个工作量相对于移植到SDK6.0上来说,还是大了不少的(采用了device tree,编译器也变成linaro的了)。因为我也没实际操作过,所以不好预估要花多少时间;如果你是想快速上手的话,不妨考虑换个beaglebone(BB),这个老版本的SDK是可以支持的。

赞(0)
未经允许不得转载:TI中文支持网 » AM335x上PRU如何做高速通信?
分享到: 更多 (0)