公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

我正在开发一个需要使用 KitProg UART 桥使用 115k2 8O1(8 个数据位加上奇数奇偶校验)进行通信的应用程序。 我用这种方式在 Windows (10) 中配置端口,但是发送的是 8N1,即没有奇偶校验的 8 个数据位。 我试图将其中 TESTBOARD_150PC_OUT 分类是 KitProg 限制还是 W10 限制。 我使用了不同的配置,我使用的是 TrippPSOC4_HVPA_LITE_KIT USB 转串行接口,遇到了同样的问题。 我使用运行 Windows XP 的内置串行端口的计算机尝试了第三种配置,它运行正常。 因此,我尝试在三个可能的问题之间进行 TESTBOARD_150PC_OUT 排序: W10 与 W XP 内部串行与 USB 串行 不同品牌的 USB 串行 有人对此有任何经验吗? 从来没有设备在说," 对不起我无法使用这些参数 ". 它只是默默地忽略了它应该生成奇偶校验位的事实。

进一步检查表明其他 USB 串行适配器可以执行 8O1 操作。 W10 可以做 8O1。 一些终端程序存在问题,例如 CRT 在键入时使用合适的端口执行 8O1,但在发送二进制文件时恢复为 8N1。 大多数终端程序无法发送字节 > 127。 Hterm 是可靠的。

但是即使使用 Hterm,我也无法让 KitProg 发送 8O1。 它总是降低奇偶校验位,使其达到 8N1。 这令人惊讶,因为我认为它使用的是 SCB,而 SCB 能够运行 8O1。 因此,这一定是程序问题。 希望这个问题能得到解决。

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/PSoC-4/KitProg-Serial-with-parity/td-p/667849

0 点赞
1 解答
Translation_Bot
Community Manager
Community Manager
Community Manager

@Wilton

这是 KitProg3 UART 通信属性的限制。

有一种说法表明并非支持所有的 UART 通信属性组合,用户应参阅 KitProg3 用户指南以获取更多信息,可以从此处获得:Infineon-KitProg3_User_Guide-UserManua...

Gautami_12_0-1704264829710.png

热烈的问候,
Gautami J

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/PSoC-4/KitProg-Serial-with-parity/m-p/669968

在原帖中查看解决方案

0 点赞
5 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

根据你的描述,我假设你使用的是与某些原型类型 EVB 分离的 KitProg,

如CY8CKIT-043。

由于我现在没有独立的 KitProg,我使用 CY8CKIT-043 尝试了以下测试。

000-BlockDiagram.JPG

我为 CY8CKIT-043 内部的 PSoC™ 4 设计了一个 UART 测试程序,并配置了如下 UART

001-UART_config.JPG

在电脑上,我使用了 Tera Term 并将串行端口配置为

002-TeraTerm-config1.JPG

经过测试,该程序似乎运行良好。

003-TeraTerm-log1.JPG

此时

(1) KitProg 和 PSoC4 之间的 UART 是 115200 8O1

(2) KitProg 和 PC 之间的 USB CDC(应该是)115200 8O1

所以我希望至少我们可以说 KitProg 的 UART 支持 8O1

然后我进行了以下测试

(3) 将 Tera Term 配置设置为 115200 8E1

004-TeraTerm-config2.JPG

(4) 令我惊讶的是 Tera Term 日志是

005-TeraTerm-log2.JPG

(5) 此外,我将 Tera Term 配置为 115200 8N1

006-TeraTerm-config3.JPG

Tera Term 日志是

007-TeraTerm-log3.JPG

在本次测试中, PSoC™ 4 的 UART 为 115200 8O1

但是通过 USB CDC,Tera Term 在 8O1、8E1、8N1 上运行良好

然后我用 9600 8N1 的 Tera Term 序列号进行了另一项测试

008-TeraTerm-config4.JPG

而且 Tera Term 日志已损坏

009-TeraTerm-log4.JPG

所以看来 PSoC™ 5LP的USB CDC正在处理派对类型,

但它不能转换波特率。

 

在上述所有测试中, PSoC™ 5LP(在 KitProg 中)的固件未被触及。

因此,在担任 CDC (USBUART) 时,USBFS 组件负责派对转换

(或未报告当事方错误)。

我查看了 USBUART(USBFS/CDC)的数据表,但找不到更改奇偶校验(也没有波特率)的参数。

 

到目前为止,我认为你看到的问题是 USB CDC 的行为,

而且 KitProg 的 UART 端口使用硬编码的 UART 设置 (115200 8O1) 通信正常

 

摩托 

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/PSoC-4/KitProg-Serial-with-parity/m-p/667989

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

你好 Moto,

感谢您抽出时间来检查这个。 KitProg 确实来自 cy8kit-043。 它是分离的,因为我使用的是带有COOLDIM_PRG_BOARD PSoC™4 的自定义 。不幸的是,我不确定你运行的测试是否能证明什么,因为如果忽略奇偶校验错误,它将告知奇偶校验是否正确。 最终测试是将 UART Tx 线(在 KitProg 上) MULTICH_CONNECT_PCB 示波器,并查看 TESTBOARD_150PC_OUT发送了多少位。 一种简单的方法是键入小写的 m 和大写的 M。一个设置了奇偶校验位,另一个没有,因为它们在单个数据位上有所不同。 它正在通信的应用程序(设计上)要求正确的奇偶校验,并将忽略以错误的奇偶校验接收到的任何字符。 8O1 总共有 11 位。 0 表示起始位,8 个数据位,奇偶校验位,1 表示停止位。 如果只发送一个字符,则停止位将继续 (1),直到发送下一个字符,但是如果发送了多个字符,它将只持续一位时间(略小于 10 us),然后是新的起始位。

这个项目还有其他复杂的细节,但是当我无法在PC(连接到KitProg)和目标之间进行通信时,我不得不 TESTBOARD_150PC_OUT 示波器并开始调试。 我花了一整天时间测试各种计算机、操作系统、串行端口、USB 串行适配器等。 我的一些观察结果已添加到原始帖子中。 但有一件事是一致的,那就是我永远无法获得 KitProg 的 8 个数据位和一个奇偶校验位 TESTBOARD_150PC_OUT ,因此目标永远不会回复。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/PSoC-4/KitProg-Serial-with-parity/m-p/667997

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

由于我刚回到办公室,我可以使用示波器。

所以我做了以下测试,黄色信号是 KitProg P12 [7]

和红色(?)信号是连接到 P12 [6] 的回路支持信号

但是由于我过几分钟还要开会

我把分析交给你 😉

(1) 115200 8N1 m

115200_8N1_m.png

(2) 115200 8N1 M

115200_8N1_upperM.png

(3) 115200 8O1 m

115200_8O1_m.png

(4) 115200 8O1 M

115200_8O1_upperM.png

(5) 115200 8E1 m

115200_8E1_m.png

(6) 115200 8E1 M

115200_8E1_upperM.png

 

摩托

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/PSoC-4/KitProg-Serial-with-parity/m-p/668067

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

再次感谢 Moto,

你的示波器镜头与我的观察结果完全吻合。 首先要注意的是,所有六个角色的持续时间都相同。 8N1 是正确的。 有一个起始位、8 个数据位和一个停止位(有点令人困惑,因为串行通信中的停止位会一直持续到其他事情发生,但只有一个比特时间是重要的)。 这总共是 10 位时间(计算停止位的一位时间)。

但是 8O1 和 8E1 应该再长一点。 它们有一个起始位、一个奇偶校验位和一个停止位,总共有 11 个。 如果奇偶校验位恰好是 1,则它们看起来与 8N1 相同,因为它融入了永无止境的停止位。 但是,如果奇偶校验位为 0,则停止位要等到奇偶校验位之后才开始,因此整个过程看起来要长一点(尽管两者实际上都长了一位)。

下面我编辑了每个角色的一张图片,以显示8O1应该是什么样子。 在第一种情况下(小写字母 m)中,有 5 个数据位是高的,因此奇偶校验位会很低,这很明显停止位会在一位之后出现。 对于大写字母 M,有 4 个数据位为高位,因此奇数的奇偶校验为 1。 它看起来和没有奇偶校验一样,但是如果有其他角色跟进,它要等到黄色结束时才能开始。

因此,我希望开发团队中的某个人可以查看此问题并发布修复程序。 这有点复杂,因为 Windows 将参数提供给 EVAL_BDPS_DRIVER,通过 USB 将它们发送到 PSoC™ 5,然后 5 必须知道如何正确使用它们。 因此,问题可能出在 Windows EVAL_BDPS_DRIVER 或 PSoC™ 5 代码(或两者)中的任何位置。

 

Wilton_0-1703786119854.png

附言:我刚刚找到了 KitProg 2.3 版的副本,但看起来不太好。 有更改波特率的代码,但没有提及奇偶校验。 我不知道 USB EVAL_BDPS_DRIVER 是否将奇偶校验信息传递给 PSoC™ 5。 如果是这样,则忽略它。 据推测,无奇偶校验和 1 停止位是在模块实例化中设置的,在代码中根本没有改变。 如果这些信息通过USB传递,那么利用这些信息将是一项相当简单的工作,我希望英飞凌有人明白为这项工作分配一两个小时的编程时间是明智的。 如果 Windows EVAL_BDPS_DRIVER 未提供该信息,则可能需要更大的工作量。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/PSoC-4/KitProg-Serial-with-parity/m-p/668405

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@Wilton

这是 KitProg3 UART 通信属性的限制。

有一种说法表明并非支持所有的 UART 通信属性组合,用户应参阅 KitProg3 用户指南以获取更多信息,可以从此处获得:Infineon-KitProg3_User_Guide-UserManua...

Gautami_12_0-1704264829710.png

热烈的问候,
Gautami J

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/PSoC-4/KitProg-Serial-with-parity/m-p/669968

0 点赞