深入了解rtl8723ds

发布时间:2023-05-23

一、简介

rtl8723ds是一款可通过SDIO接口连接到主处理器的单芯片,它是Realtek公司为移动端应用提供的高性能、低功耗无线局域网(WLAN)和蓝牙解决方案。rtl8723ds支持IEEE 802.11n和Bluetooth 4.0的同时能够保持较低的功耗,它与现有的基于ARM Cortex A9、Cortex A7、Cortex A5和MIPS等不同处理器兼容。 rtl8723ds在实现了802.11n的同时还兼容802.11a/b/g,支持最高数据传输速率高达150Mbps,在蓝牙方面也兼容2.1/3.0/4.0版本。同时,rtl8723ds可以通过多种操作模式来控制其功耗,支持静态功耗很低的电源管理模式,以满足严格的移动设备电源消耗限制。

二、物理层

rtl8723ds在物理层使用了全新的高性能收发机解决方案,其收发机可以处理多种无线协议。rtl8723ds支持的频率带分为2.4GHz和5GHz两种,2.4GHz频段的调制方式是OFDM,5GHz频段的调制方式则是OFDM和双边带调制。rtl8723ds使用带宽为20MHz的频段,同时通过40MHz和80MHz的频宽进行通信。 为了实现可靠稳定的通信,rtl8723ds实现了前向纠错技术和光谱扩频技术。前向纠错技术是通过发送冗余位来重建丢失或损坏的位,来提高通信质量的一种技术。光谱扩频技术则是通过添加特定信号,将需要传输的信息扩大至更宽的频率带,以降低传输信号易受干扰的风险。

三、MAC层

rtl8723ds应用的是多种MAC层协议,包括802.11a/b/g/n协议,同时还支持蓝牙2.1、3.0和4.0的协议。MAC层是一个可靠地管理无线数据流动的单元,作为数据总线的重要一部分,其主要任务是负责控制数据流并负责错误管理和恢复。 rtl8723ds使用了多种功能模块来实现质量和稳定性更高的无线数据传输,其中包括链路适配层(LLL)、数据链路层(DLL)和交换层(EL)。LLL用于协助管理链路留存和后退机制。DLL则用于管理帧的传输和接收,并装载和卸载以获得数据帧。EL则用于处理与物理设备相关的事务,例如:控制功率和频率,处理接收到的数据等等。

    /* 以IEEE 802.11协议为例实现AP模式的示例代码 */ 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <sys/socket.h> 
#include <arpa/inet.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
#include <pthread.h>
static struct { int sock; struct sockaddr_in6 addr; } srv; 
static const char *srv_ipv6 = "::"; //用于监听的IPv6地址 
static const int srv_port = 4000; //用于监听的端口号 
static const int srv_max_conn = 256; //最大连接数 
static int init_socket() {
    int ret;
    srv.sock = socket(AF_INET6, SOCK_STREAM, 0);
    if (srv.sock == -1) {
        perror("socket");
        return -1;
    }
    memset(&srv.addr, 0, sizeof(srv.addr));
    srv.addr.sin6_family = AF_INET6;
    srv.addr.sin6_port = htons(srv_port);
    ret = inet_pton(AF_INET6, srv_ipv6, &srv.addr.sin6_addr);
    if (ret != 1) {
        errno = EINVAL;
        goto out;
    }
    ret = bind(srv.sock, (struct sockaddr*)&srv.addr, sizeof(srv.addr));
    if (ret == -1) {
        perror("bind");
        goto out;
    }
    ret = listen(srv.sock, srv_max_conn);
    if (ret == -1) {
        perror("listen");
        goto out;
    }
    return 0;
out:
    close(srv.sock);
    return -1;
}
static void stop_signal(int sig) {
    signal(sig, SIG_IGN);
    close(srv.sock);
    exit(0);
}
static void setup_signal() {
    signal(SIGINT, stop_signal);
    signal(SIGTERM, stop_signal);
    signal(SIGQUIT, stop_signal);
    signal(SIGHUP, SIG_IGN);
}
static void work_loop() {
    while(1) {
        int conn;
        conn = accept(srv.sock, NULL, NULL);
        if (conn == -1) {
            perror("accept");
            break;
        }
        printf("New connection\n");
    }
}
int main(int argc, char **argv) {
    int ret;
    setup_signal();
    ret = init_socket();
    if (ret == -1) {
        fprintf(stderr, "Unable to setup TCP socket\n");
        return EXIT_FAILURE;
    }
    printf("TCP server listening on [%s]:%d, max_conn %d\n", srv_ipv6, srv_port, srv_max_conn);
    work_loop();
    close(srv.sock);
    return EXIT_SUCCESS;
}

四、应用层

rtl8723ds可广泛应用于各种移动设备中,包括平板电脑、智能手机和各种便携设备,可以实现低功耗、高性能的无线网络连接和蓝牙传输。在应用层上,rtl8723ds使用了各种无线通信协议来实现各种不同的应用场景。 rtl8723ds可以使用点对点模式进行通信,这种模式使用蓝牙技术,在两个设备之间建立点对点的无线通信链路。同时,rtl8723ds也支持接入点和客户端之间的通信,这种通信模式通过Wi-Fi技术实现网络中多个设备之间的通信。 另外,在测试和调试过程中,rtl8723ds还支持Raw Mode模式,这种模式可以让我们直接在网络层传输数据包。Raw Mode模式适用于调试端到端的一些协议,同时还可以实现在没有网络层支持时的数据传输。

五、结尾

rtl8723ds是一款高性能、低功耗的无线网络和蓝牙方案,其在物理层、MAC层和应用层均实现了多种不同的技术来提高无线通信质量和效率。实际应用中,rtl8723ds可以根据各种不同的应用场景来进行定制化开发,以实现更加精准的无线传输效果。