137|0

54

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【RainbowLink USB 协议转换器】485接口测试 [复制链接]

本帖最后由 oxlm_1 于 2025-1-6 00:25 编辑
       1号本来想验证485通信能力的,但是由于调试问题,一直没调通485接口,刚好周末有时间,就再一次验证485接口的功能。
       经过调试,发现我所使用的启明6m5的2号485接口存在功能不良的情况,刚好板卡的1号485接口功能完好,便切换到1号485接口做485通信功能验证。
       首先,还是老方法,先上接线图
       我使用的RS232接口做RTT的msh接口,1号485接口做测试接口,使用5V供电为启明6M5提供供电。
代码编写
#include <rtthread.h>
#include "hal_data.h"
#include <rtdevice.h>
#define CTS_PIN    BSP_IO_PORT_05_PIN_03 /* 485 Follow control pins */
#define SAMPLE_UART_NAME       "uart5"
static rt_device_t serial;
struct rx_msg
{
    rt_device_t dev;
    rt_size_t size;
};
struct rt_ringbuffer rb;
rt_uint8_t pool[1024];
static rt_uint8_t buffer[BSP_UART4_RX_BUFSIZE + 1];
static rt_err_t uart_input(rt_device_t dev, rt_size_t size)
{
    rt_uint32_t rx_length;
    rx_length = rt_device_read(dev, 0, buffer, size);
    if(rx_length)
    {
        rt_ringbuffer_put(&rb, buffer, rx_length);
    }
    return RT_EOK;
}
static void serial_thread_entry(void *parameter)
{
    rt_uint32_t rx_length;
    static rt_uint8_t rx_buffer[1024];
    while (1)
    {
        rx_length = rt_ringbuffer_data_len(&rb);
        if(rx_length)
        {
            rx_length = rt_ringbuffer_get(&rb, rx_buffer, rx_length);
            rt_kprintf("%s\n",rx_buffer);
            rt_memset(rx_buffer, 0x00, rx_length);
        }
        rt_thread_mdelay(1);
    }
}
static int uart_loop_sample(int argc, char *argv[])
{
    rt_err_t ret = RT_EOK;
    char uart_name[RT_NAME_MAX];
    char str[] = "hello RT-Thread!\r\n";
    if (argc == 2)
    {
        rt_strncpy(uart_name, argv[1], RT_NAME_MAX);
    }
    else
    {
        rt_strncpy(uart_name, SAMPLE_UART_NAME, RT_NAME_MAX);
    }
    serial = rt_device_find(uart_name);
    if (!serial)
    {
        rt_kprintf("find %s failed!\n", uart_name);
        return RT_ERROR;
    }
    rt_ringbuffer_init(&rb, pool, 1024);
    rt_device_set_rx_indicate(serial, uart_input);
    rt_device_open(serial, RT_DEVICE_FLAG_RX_NON_BLOCKING | RT_DEVICE_FLAG_TX_BLOCKING);
    rt_pin_write(CTS_PIN, PIN_HIGH);
    rt_device_write(serial, 0, str, (sizeof(str) - 1));
    rt_pin_write(CTS_PIN, PIN_LOW);
    rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 2048, 25, 10);
    if (thread != RT_NULL)
    {
        rt_thread_startup(thread);
    }
    else
    {
        ret = RT_ERROR;
    }
    return ret;
}
MSH_CMD_EXPORT(uart_loop_sample, uart device loop sample);

 

基础收发测试
       使用常用波特率115200做通信,查看通信的稳定性,从收发上看,115200收发很稳定。
进一步的收发测试
       突然发现我另一台电脑上的sscom可以跑到2M的速率,因此把代码配置成2M再一次测试(从打印上看,一如既往地稳定)。
终极测试
       遗憾的是,RA6M5的485支持的速率貌似到不了6M,甚至4M都到不了(查规格书发现,板子上所使用的串口转485芯片MAX3485可以到10Mbps,如果不是这芯片的问题的话,那就大概率是走线或者RA6M5本身的能力问题了,因为RA6M5规格书也没提及串口支持的速率上限),因此这部分的测试并没有测出RainbowLink的能力上限,毕竟坛子里已经有测出Rainbowlink 6M速率下,485还能稳定收发了。
       本来想使用6M以上的速率去测试,但是想想还是保险起见,先使用CH344Q上限的6M去测试。结果有些惨不忍睹,可以很明显的看到,启明6M5发出的数据,RainbowLink已经无法正确识别了。而RainbowLink发出的信号,启明6M5也出现了明显的误码了
       退而求其次,使用4M测试,还是惨不忍睹。
总结
       经过这么测试,我发现我并没有测出Rainbowlink的能力上限,但2M的速率,其实已经满足我的日常调试使用了,唯一的遗憾是供电不带开关,在调试时稍有不便。

此帖出自工控电子论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表