注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
oxlm_1的个人空间 https://home.eeworld.com.cn/space-uid-1076641.html [收藏] [复制] [分享] [RSS]
日志

【RainbowLink USB 协议转换器】485接口测试

已有 64 次阅读2025-1-6 00:24 |个人分类:测评记录

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的速率,其实已经满足我的日常调试使用了,唯一的遗憾是供电不带开关,在调试时稍有不便。

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章