Contact me: hankecnc@gmail.com

MESA 的 PktUART 驱动程序 #48

推推 grbl 3年前 (2023-01-29) 502次浏览

对话

MESA 的 PktUART 驱动程序 #48

签字人:Boris Skegin boris.skegin.de at gmail.com

PktUART aka Packet UART可以理解为一种缓冲的UART。
MESA 卡上的 Rx UART 只有 16 字节的 FIFO 深度,
而 PktUART 实例的 Rx 缓冲区的缓冲区大小为 1024 字节。

因此,最直接的用例是平均数据报大小大于 16 字节的 RS232/RS485 设备。

另一个用例/优势是不需要立即从缓冲区中读出帧/数据报,因为一次可以读取多个数据报/帧。这使得 PktUART 可以容忍与理想/假定线程周期时间的任何偏差。

包含的测试组件展示了 PktUART 驱动程序
与 RS232 设备(工业级陀螺仪)的基本功能。TTL 转换器用于将 RS232 信号转换为 UART。

与 P. Wallace 的一些讨论从https://forum.linuxcnc.org/forum/24-hal-components/30262-reading-uart-rx-count-register-on-mesa-5i25-6i25?limitstart=0#开始69272

MESA 的 PktUART 驱动程序 #48

嗨鲍里斯,感谢公关。

hostmot2-firmware repo 是否有一个匹配的分支来实现这个的 FPGA 端?

MESA 的 PktUART 驱动程序 #48
作者

我在 5i25 模式下使用 6i25,7i75 作为子板。

对于测试组件,只需要一个 PktUART 实例,实例步幅是“通常”的一个:
0x4,而不是 UART 的实例步幅 0x10。

那我该怎么办?上传TopPCIHostMot2.vhd5i25.ucf和引脚输出文件?
src/hal/drivers/mesa-hostmot2/firmware/5i25

MESA 的 PktUART 驱动程序 #48

我刚刚将我们的 hostmot2-firmware 推送到一个新的 github repo,请在那里做一个 PR: https ://github.com/LinuxCNC/hostmot2-firmware

另外,您能否大致描述一下此 PR 的作用、用例是什么以及为什么它是个好主意?帮助我们了解它的含义。

MESA 的 PktUART 驱动程序 #48
作者

更新了我的第一条评论。

我是否应该首先证明https://github.com/LinuxCNC/hostmot2-firmware中描述的构建过程可以为我的引脚文件复制?
因为我只是使用 Xilinx ISE 14.7 WebPack 制作了一个位文件……

 
}
 
EXTRA_SETUP(){ // names 参数在 ‘prefix’ 中传递。你只需要知道这一点。
成员

这让我很难过。让我们将改进 comp 的方式作为一个目标,使这种 hack 变得不必要,并注意当有更好的方法可用时,mesa_pktgyro_test 的这种行为可能会改变。基本上,修复 halcompile 以便例如字符串数组 loadrt 参数是合适的。

作者

你是说这一行https://github.com/LinuxCNC/linuxcnc/pull/48/files#r57522689
EXTRA_SETUP(){ // the names parameters are passed in 'prefix'.吗?

这同样适用于我尝试遵循的模式的 mesa_uart 组件/驱动程序。

成员

是的,那条线和紧随其后的几行。

我想我明白评论是在抱怨文档没有提到“前缀”是 EXTRA_SETUP 的隐式参数。如果是这样,更好的选择是改进文档,而不是散布文档不完整的评论!

我不明白为什么要禁止实例前缀的第一个字符是“m”。你能告诉我更多吗?听起来这是一种防止使用 count= 的粗暴方法,最终也会阻止合法使用。

作者

由于这些行至少有 3 年历史并且源自src/hal/drivers/mesa_uart.comp
我认为这是防止使用count=.

合作者

2016 年 3 月 27 日 14:26,Jeff Epler notifications@github.com写道:

我想我明白评论是在抱怨文档没有
提到“前缀”是 EXTRA_SETUP 的隐式参数。如果是这样,
更好的选择是改进文档,而不是散布
文档不完整的评论!

这是我的错,Boris 刚刚从我原来的 UART
驱动程序中复制了它。

atp

成员

安迪,你能打开一个问题来解释为什么这是必要的吗?如果确实需要,我们可以修改 halcompile,使其在这种情况下不会创建 count= 模块参数。我只是还不知道/不了解这种需求。

合作者

2016 年 3 月 27 日 15:35,Jeff Epler notifications@github.com写道:

安迪,你能打开一个问题来解释为什么这是必要的吗

这是必要的,因为 HAL 与 Mesa UARTS 交互的方式。

在我编写模块时,我想不出一种方法让 hm2
驱动程序知道任何人想对
UART 或 BSPI hostmot2 模块中的任意串行数据做什么。

因此,您使用它们的方式是编写自定义 HAL 组件,
您可以在其中创建引脚并在串行数据和引脚数据之间进行转换。

.comp 需要获取指向 hm2->uart 数据结构的指针才能
与 hostmot2 函数交互。(即,一个 HAL 模块需要直接
访问另一个 HAL 模块的数据)为此,每个 uart 实例都被
赋予一个唯一的名称,其中包括它所在的 FPGA 卡的名称。
然后有一个从 hm2 导出的函数,它爬行通过 hm2_uart
实例尝试将这些实例与 names=
参数进行名称匹配。

名称类似于 hm2_5i25.0.uart.00。如果您使用 count,则
名称类似于 mycustomcomponent.0,因此不会匹配
任何 uart 实例。

我想可以删除字母“m”的测试,
如果 hm2_pktuart_find 函数返回错误,则会触发相同的错误消息

如果我再次做同样的事情,我会尝试像 SSI
编码器组件那样做。但是在我写 hm2_uart 的时候,我没有
可以重用的智能串行代码(智能串行代码使得有必要解决
“pin-names.types and counts only known at load time”的问题。)

atp

合作者

2016 年 3 月 27 日 14:26,Jeff Epler notifications@github.com写道:

我不明白为什么
要禁止实例前缀的第一个字符是“m”。你能告诉我更多吗?听起来
这是一种防止使用 count= 的粗暴方法,最终也会阻止
合法使用。

进一步思考,该测试与其说是“笨手笨脚”,不如说是“粗制滥造”。“names=”的有效条目必须是由 此处
的代码创建的实际实例名称: https ://github.com/sirop/machinekit/blob/PktUART_LinuxCNC/src/hal/drivers/mesa-hostmot2/pktuart.c# L111 这些将始终采用“hm2_<board_name>.NN.pktuart.NN”形式,因此如果 名称==“mesa_pktuart.NN”,您就知道已使用 count= 格式。 不是 “hm2_…..” 形式的 names= 永远不会工作,因为 没有名称匹配。

我可以推荐采用此拉取请求吗?代码对我来说看起来不错,它只能用
包含
pktUART 函数的 Mesa 位文件来执行,目前还没有。

atp

MESA 的 PktUART 驱动程序 #48
成员

我的审查比“彻底”更“快速”,但我没有发现代码有任何大问题。正如您在本期上面看到的那样,我确实附上了一些注释。特别感谢您为新 API 提供手册页文档!

我不认为我们需要在将它添加到 linuxcnc 和将支持代码添加到 hostmot2-firmware 之间获得特定的顺序,但最好是最后两者都有。

MESA 的 PktUART 驱动程序 #48
成员

@sirop感谢您解决我的评论意见。我对修改后的版本很满意。
@SebKuzminsky我们是把它放在 2.7 还是 master 中?

MESA 的 PktUART 驱动程序 #48
成员

我刚刚注意到您分支上的提交不符合我们的政策。您必须在提交消息中提供签名行,以证明您是根据我们的许可 GPLv2+ 提交补丁的。有关详细信息, http: //linuxcnc.org/docs/2.7/html/code/contributing-to-linuxcnc.html#_signed_off_by_policy

如果您需要帮助(我的方法涉及使用“git rebase”),请告诉我,我会引导您完成。

完成此操作后,我看不出有任何其他因素阻止我们在我们的主分支中接受它。

感谢您抽出宝贵时间!

MESA 的 PktUART 驱动程序 #48
作者

是的,我想知道是否有一种优雅的方法可以为我的每个提交添加一个 signed-off-by 行。

MESA 的 PktUART 驱动程序 #48
成员

我使用这样的东西:

git rebase -i --exec="git commit --amend -CHEAD -s" origin/master

假定您调用 linuxcnc.org 的 master 分支 origin/master。

在你下次推送到 sirop:PktUART_LinuxCNC 时,你将不得不使用“git push -f”,因为你已经用“git rebase”重写了历史。

MESA 的 PktUART 驱动程序 #48
作者

好的,是的git rebase -i HEAD~3 --exec="git commit --amend -CHEAD -s" PktUART_LinuxCNC
与 git 2.6.2 。

MESA 的 PktUART 驱动程序 #48 cradek 合并提交8e21a89 到 LinuxCNC :大师 2016 年 5 月 10 日
免费注册 在 GitHub 上加入此对话。已有帐户? 登录评论
标签
还没有
项目

还没有

发展

成功合并此拉取请求可能会关闭这些问题。

还没有

5人参加
MESA 的 PktUART 驱动程序 #48MESA 的 PktUART 驱动程序 #48MESA 的 PktUART 驱动程序 #48MESA 的 PktUART 驱动程序 #48MESA 的 PktUART 驱动程序 #48

喜欢 (0)