首页 > 其他分享 >CH592 蓝牙透传模块

CH592 蓝牙透传模块

时间:2024-05-09 22:44:40浏览次数:24  
标签:CH592 蓝牙 透传 ble 串口 BLE MTU define

设备架构

img

串口透传协议说明

模块通过串口和用户MCU相连,建立用户MCU 和 BLE 设备之间的双向通讯。
用户可以通过串口,使用指定的AT指令对串口波特率、BLE连接间隔,以及不同的发包间隔,模块将会有不同的数据吞吐能力。
串口默认配置为 115200bps。
模块的串口Rx一次最大可输入3K字节。
模块会根据蓝牙协议协商情况进行分包或者发送完整包。
BLE设备之间的通信,必须在对应的服务通道进行。当模块收到主机或从机发来的无线包后,会先从INT口输出低电平信号再从模块串口Tx端输出数据。
以“TTM:”开头且以“\r\n\0”结尾的字符串会被当成AT指令进行解析并执行,并返回执行结果(“TTM:OK\r\n\0”或者 “TTM:REP\r\n\0”等).不符合AT 指令规则的串口数据包,将被视为透传数据。

透传数据通道

透传数据通道【服务 UUID: 0xFFF0】

特征值UUID 可执行操作 字节数: 备注
FFF1 Notify 跟随MTU长度 从模块串口Rx输入的数据将会在此通道产生通知发给主机
FFF2 Write 跟随MTU长度 写入的数据将会从串口的 Tx输出。

BLE 数据转串口输出,主机端通过 “FFF2” 通道写操作后,数据将会从串口Tx 输出。串口输入转BLE数据输出,如果打开了“FFF1”通道的通知使能开关,串口Rx收到透传的数据
将会通过notify事件发送到

如何验证串口透传协议成功

  1. 蓝牙模块默认为从机模式
  2. 等待设备启动完成,使用AT指令 TTM:ADV-START 启动从机的广播功能。
  3. 在手机上连接蓝牙模块。
  4. 通过串口 发送 透传数据, 手机上面的 0xFFF1 通道能接收到 串口透传的数据
  5. 通过手机上 0xFFF2 通道 write 消息,在串口上能够打印出来。
  6. 使用 TTM:ADV-OFF 关闭广播功能, 手机上将不会扫描到 该蓝牙的信息。

ble_uart 说明文档

CH592 简单的串口透传:
特性:
1, 使用两个128bit uuid,
2, 两个uuid 分别是write without respone,和 notify 方式,分别对应串口收和发,可以在工程文件ble_uart_service/ble_uart_service.c中修改
3, 可以兼容 N* 家的 ble uart 的工程,
4, 支持MTU在20-247 中任意设置,自适适应当前的mtu
5, 默认在CH592上调试,串口使用的UART3,TXD3@PA5,RXD3@PA4,其他的串口需要修改代码
透传UART3口
img
6, ble 名称为"chCH592le_uart" 已经修改成 qf_ble_uart
7, 默认开启串口notify 成功回写,不需要需要可以去掉代码,在ble service 的回掉函数,BLE_UART_EVT_BLE_DATA_RECIEVED 事件中 屏蔽即可
8, 默认开启串口调试,使用串口1,PA9_TXD 115200.
DEBUG打印UART1口
img

一些参数修改:

见工程的config.h文件

1 修改mtu 长度,最大为251此时对应mtu是247,但是实际mtu是多少,要看central端连接时候协商的值
2 修改每个连接 最多传输多少个包数量
3,全局宏定义建议在mounriver stdio工程的properties>C/C++ General> Path and Symbols 的Symbols 标签下设置

代码分析

问题

extern const unit_8 VER_LIB[];应该在库里面

TMOS 常见的接口

bool tmos_memcmp(const void *src1, const void *src2, unit32_t len);
void tmos_memset( void * pDst, uint8_t Value, uint32_t len )
注册事件回调函数
tmosTasklD TMOS_ProcessEventRegister( pTaskEventHandIerFn eventCb )

厂商提供的BLE库(参考)

常见的数据结构

typedef struct tag_ble_clock_config {...} bleClockConfig_t; /*ble clock control config struct */
typedef struct tag_ble_pa_control_config {...} blePaControlConfig_t;
typedef struct {...} tmos_event_hdr_t;
#define VER_FILE  "CH59x_BLE_LIB_V1.2" // 版本号
struct tag_ble_config { 
    uint32_t MEMAddr;               // library memory start address  BLE蓝牙库的开始地址
                                    // MEM_BUF[BLE_MEMHEAP_SIZE / 4] 
                                    // -- MEM_BUF[1536]

    uint16_t MEMLen;                // library memory size    库的内存大小
                                    // -- 1024 * 6
    uint32_t SNVAddr;               // SNV flash start address( if NULL,bonding information will not be saved )                         ? SNV flash 开始地址
    uint16_t SNVBlock;              // SNV flash block size ( default 256 )  ??
    uint8_t SNVNum;                 // SNV flash block number ( default 1 )  ??
    uint8_t BufNumber;              // Maximum number of sent and received packages cached by the controller( default 5 )         controller 缓存的 最大的发送和接收包的数量 默认为 5
                                    //  -- 5
                                    // Must be greater than the number of connections.
    uint16_t BufMaxLen;             // Maximum length (in octets) of the data portion of each HCI data packet( default 27 )            8进制格式的 HCI data 的 数据部分的 最大长度  默认 27
                                    //  -- 27 
                                    // SC enable,must be greater than 69  SC使能时,必须大于69
                                    // ATT_MTU = BufMaxLen-4,Range[23,ATT_MAX_MTU_SIZE]
                                    // ATT_MTU = 
    uint8_t TxNumEvent;             // Maximum number of TX data in a connection event ( default 1 ) -- 1
    uint8_t RxNumEvent;             // Maximum number of RX data in a connection event ( default equal to BufNumber )
    uint8_t TxPower;                // Transmit power level( default LL_TX_POWEER_0_DBM(0dBm) )
    uint8_t ConnectNumber;          // Connect number,lower two bits are peripheral number,followed by central number
    uint8_t WindowWidening;         // Wait rf start window(us)
    uint8_t WaitWindow;             // Wait event arrive window in one system clock
    uint8_t MacAddr[6];             // MAC address,little-endian
    pfnSrandCB srandCB;             // Register a program that generate a random seed
    pfnIdleCB idleCB;               // Register a program that set idle
    pfnTempSampleCB tsCB;           // Register a program that read the current temperature,determine whether calibration is need
    pfnLSICalibrationCB rcCB;       // Register a program that LSI clock calibration
    pfnLibStatusErrorCB staCB;      // Register a program that library status callback
    pfnFlashReadCB readFlashCB;     // Register a program that read flash
    pfnFlashWriteCB writeFlashCB;   // Register a program that write flash
} bleConfig_t 

TX POWER 定义

ERR_LIB_INIT lib初始化错误定义

#define ERR_LLE_IRQ_HANDLE              0x01  // 中断错误?
#define ERR_MEM_ALLOCATE_SIZE           0x02  // 内存分配的大小错误
#define ERR_SET_MAC_ADDR                0x03  //  MAC地址设置错误
#define ERR_GAP_ROLE_CONFIG             0x04  //   GAP_ROLE 配置错误
#define ERR_CONNECT_NUMBER_CONFIG       0x05  //   连接数量错误
#define ERR_SNV_ADDR_CONFIG             0x06  //  SNV 地址错误
#define ERR_CLOCK_SELECT_CONFIG         0x07   // 时钟选择错误

BLE_STATUS_VALUES BLE 默认的状态值

#define bleInvalidTaskID                INVALID_TASK  //!< Task ID isn't setup properly
#define bleEecKeyRequestRejected        0x06   //!< key missing
#define bleNotReady                     0x10   //!< Not ready to perform task
#define bleAlreadyInRequestedMode       0x11   //!< Already performing that task
#define bleIncorrectMode                0x12   //!< Not setup properly to perform that task
#define bleMemAllocError                0x13   //!< Memory allocation error occurred
#define bleNotConnected                 0x14   //!< Can't perform function when not in a connection
#define bleNoResources                  0x15   //!< There are no resource available
#define blePending                      0x16   //!< Waiting
#define bleTimeout                      0x17   //!< Timed out performing function
#define bleInvalidRange                 0x18   //!< A parameter is out of range
#define bleLinkEncrypted                0x19   //!< The link is already encrypted // link被加密了
#define bleProcedureComplete            0x1A   //!< The Procedure is completed
#define bleInvalidMtuSize               0x1B   //!< SDU size is larger than peer MTU. SDU size的大小比 MTU大

LINKDB

// Special case connection handles
#define INVALID_CONNHANDLE              0xFFFF // Invalid connection handle, used for no connection handle
#define LOOPBACK_CONNHANDLE             0xFFFE // Loopback connection handle, used to loopback a message
// Link state flags
#define LINK_NOT_CONNECTED              0x00   // Link isn't connected
#define LINK_CONNECTED                  0x01   // Link is connected
#define LINK_AUTHENTICATED              0x02   // Link is authenticated
#define LINK_BOUND                      0x04   // Link is bonded
#define LINK_ENCRYPTED                  0x10   // Link is encrypted
// Link Database Status callback changeTypes
#define LINKDB_STATUS_UPDATE_NEW        0      // New connection created
#define LINKDB_STATUS_UPDATE_REMOVED    1      // Connection was removed
#define LINKDB_STATUS_UPDATE_STATEFLAGS 2      // Connection state flag changed

GATT UUID

定义了很多功能的UUID 详细参考 CH59xBLE_LIB.h

MESSAGE ID

ATT MTU SIZE

/************************************ATT***************************************/
#define ATT_MTU_SIZE                    23   //!< Minimum ATT MTU size
#define ATT_MAX_MTU_SIZE                512  //!< Maximum ATT MTU size

ATT Methods

ATT Error Codes

PDU

GATT Attribute Access Permission Bit Fields

GATT Charateristic Properties Bit Fields

GAP ROLE 主从角色的定义

GAPBOND 匹配码的定义

标签:CH592,蓝牙,透传,ble,串口,BLE,MTU,define
From: https://www.cnblogs.com/qifei-liu/p/18181747

相关文章

  • 一种车载蓝牙显示终端(QCC3040 QCC5125 OLED RX 显示蓝牙歌曲名)
    作为车载多媒体一种延伸,车载蓝牙终端通常作为手机与车机中转站,可以作为点烟器扩展产品。 通过播放暂停音乐、接打挂断电话、媒体音量加减、上下一曲功能来进行人机交互。 产品通常还有3.5mm输入接口。  通过车载IDB-CIDB-MIDB-Wireless等多媒体协议解析出车载媒体控......
  • arduino uno+LCD12864(ST7735S)+蓝牙模块实现贪吃蛇
    1.前言:1.1本实验实现的贪吃蛇能穿越边界,结束游戏的唯一条件是贪吃蛇到达指定长度1.2本实验所用LCD可能不是LCD12864,LCD12864所用库为u8glib,笔者在词库中并没有找到型号为ST77355的初始化函数,而是在ucglib中找到,其方法为Ucglib_ST7735_18x128x160_SWSPIucg(/*sclk=*/13,/*data......
  • 富芮坤蓝牙学习
    SDK下载地址:https://gitee.com/freqchip/FR801xH-SDK开发版使用FRECHIPDEV1.2项目目录:E:\ziliao\FREQCHIP\FR801xH-SDK-master\FR801xH-SDK-master\examples\dev1.0\ble_simple_peripheral1.服务及及特性添加,添加之后可以通过蓝牙调试助手查看到蓝牙服务UUID,蓝牙描述服务UUID,蓝......
  • CH592 CH582 CH573 蓝牙运行时调整RTC
    前言:CH592芯片在使用蓝牙外部32K精度比较高(根据选择的外部32.768K晶体,精度一般在20ppm以内)。直接使用内部32K不校准误差约为百分之二,校准后可以做到0.1%-0.3%精度。使用外部32K需要消耗一颗晶振的物料,同时芯片的相应GPIO会被占用。如果对于32K的误差要求不是很高,可以直接选择使......
  • 电脑连不上蓝牙,蓝牙图标消失
    本来想xbox蓝牙连接蓝牙玩下wrc10的,发现蓝牙功能异常可能是前几天更新英特尔®Arc™和锐炬®Xe显卡-Windows和bios导致蓝牙驱动异常,也可能是更新的面向Windows®10和Windows11的英特尔®无线Bluetooth®驱动程序导致的电脑蓝牙图标没了,电脑连不上蓝牙,蓝牙图标点一......
  • CH573 CH582 CH592 仿真功能
    操作步骤:1.通过USB或者UART1开启两线调试接口:2.将USB拔下,LINKE用四根线与板子连接(vccgndswdioswdck),再将LINKE的usb端接电脑,3.打开工程,点击下载:一:二:三:四: ......
  • 『智能方案研发』脉搏蓝牙血氧仪方案设计
    蓝牙血氧仪是一种用于测量人体血氧饱和度和脉率的设备,广泛应用于医疗、健康管理、户外运动等领域。蓝牙血氧仪以其小巧易携带、便于测量、准确直观等特点受到广泛关注。并且该医疗设备可连接米家APP,将用户测量的血氧数据上传至米家APP端,通过定时测量,APP会提醒用户在血氧低或者......
  • Android Studio 蓝牙 示例代码(转)
    原文:https://blog.csdn.net/qq_40511184/article/details/122698077因为androidstudio升级,下面代码中的startactivityresult函数有变化,不能使用,需要更换为publicActivityResultLauncher<Intent>register;ActivityResultLauncher<Intent>startBlueTooth=registerForActi......
  • 推荐蓝牙对讲机内部PA+SW组合电路-CB5337+CBS8112
    CB5337是完整的2.4GHz802.11axWLANRF前端模块(FEM)。包含一个2.4GHz单刀双投(SPDT)发射/接收(T/R)开关,一个2.4GHz低噪声放大器(LNA),以及一个应用于大功率802.11ax2.4GHz功率放大器(PA),非标最高可提供33dbm发射增益和14dbm接收增益;CB5337提供了完整的2.4GHzWLAN射频解决方案,从......
  • 蓝牙打印开发代码示例(日拱一卒,有点进步,UUID仍报错)
     packagecom.lingrui.btprint;importandroid.Manifest;importandroid.app.AlertDialog;importandroid.bluetooth.BluetoothAdapter;importandroid.bluetooth.BluetoothDevice;importandroid.bluetooth.BluetoothSocket;importandroid.content.DialogInterface......