oxlm_1 发表于 2025-1-6 00:24

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

<div class='showpostmsg'> 本帖最后由 oxlm_1 于 2025-1-6 00:25 编辑

<div>&nbsp; &nbsp; &nbsp; &nbsp;1号本来想验证485通信能力的,但是由于调试问题,一直没调通485接口,刚好周末有时间,就再一次验证485接口的功能。</div>

<div>&nbsp; &nbsp; &nbsp; &nbsp;经过调试,发现我所使用的启明6m5的2号485接口存在功能不良的情况,刚好板卡的1号485接口功能完好,便切换到1号485接口做485通信功能验证。</div>

<div>&nbsp; &nbsp; &nbsp; &nbsp;首先,还是老方法,先上接线图</div>

<div style="text-align: center;"></div>

<div>&nbsp; &nbsp; &nbsp; &nbsp;我使用的RS232接口做RTT的msh接口,1号485接口做测试接口,使用5V供电为启明6M5提供供电。</div>

<div><strong>代码编写</strong></div>

<div>
<pre>
<code class="language-cpp">#include &lt;rtthread.h&gt;
#include "hal_data.h"
#include &lt;rtdevice.h&gt;
#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;
static rt_uint8_t buffer;
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(&amp;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;
    while (1)
    {
        rx_length = rt_ringbuffer_data_len(&amp;rb);
        if(rx_length)
        {
            rx_length = rt_ringbuffer_get(&amp;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;
    char str[] = "hello RT-Thread!\r\n";
    if (argc == 2)
    {
        rt_strncpy(uart_name, argv, 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(&amp;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);</code></pre>

<p>&nbsp;</p>
</div>

<div><strong>基础收发测试</strong></div>

<div>&nbsp; &nbsp; &nbsp; &nbsp;使用常用波特率115200做通信,查看通信的稳定性,从收发上看,115200收发很稳定。</div>

<div style="text-align: center;"></div>

<div><strong>进一步的收发测试</strong></div>

<div>&nbsp; &nbsp; &nbsp; &nbsp;突然发现我另一台电脑上的sscom可以跑到2M的速率,因此把代码配置成2M再一次测试(从打印上看,一如既往地稳定)。</div>

<div style="text-align: center;"></div>

<div><strong>终极测试</strong></div>

<div>&nbsp; &nbsp; &nbsp; &nbsp;遗憾的是,RA6M5的485支持的速率貌似到不了6M,甚至4M都到不了(查规格书发现,板子上所使用的串口转485芯片MAX3485可以到10Mbps,如果不是这芯片的问题的话,那就大概率是走线或者RA6M5本身的能力问题了,因为RA6M5规格书也没提及串口支持的速率上限),因此这部分的测试并没有测出RainbowLink的能力上限,毕竟坛子里已经有测出Rainbowlink 6M速率下,485还能稳定收发了。</div>

<div>&nbsp; &nbsp; &nbsp; &nbsp;本来想使用6M以上的速率去测试,但是想想还是保险起见,先使用CH344Q上限的6M去测试。结果有些惨不忍睹,可以很明显的看到,启明6M5发出的数据,RainbowLink已经无法正确识别了。而RainbowLink发出的信号,启明6M5也出现了明显的误码了</div>

<div style="text-align: center;"></div>

<div>&nbsp; &nbsp; &nbsp; &nbsp;退而求其次,使用4M测试,还是惨不忍睹。</div>

<div style="text-align: center;"></div>

<div><strong>总结</strong></div>

<div>&nbsp; &nbsp; &nbsp; &nbsp;经过这么测试,我发现我并没有测出Rainbowlink的能力上限,但2M的速率,其实已经满足我的日常调试使用了,唯一的遗憾是供电不带开关,在调试时稍有不便。</div>

<p><!--importdoc--></p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>
页: [1]
查看完整版本: 【RainbowLink USB 协议转换器】485接口测试