产测通信说明文档
📎 原始文档:https://www.kdocs.cn/l/ceGYdjhwDc3B 产测通信说明文档
demo
【金山文档】 697N_700N_DMDP_LDOIN_UART_小牛测控_test
697N_700N_DMDP_LDOIN_UART_小牛测控_test.rar
【金山文档 | WPS云文档】 可视化小牛产测demo.rar
可视化小牛产测demo.rar
使用说明
除新增附件文件外,还需要进行如下修改
- 串口通信方式选择: 修改test.c
#define LDOIN 0 //用LDOIN的单线串口通信,波特率9600
#define USBIO 1 //用DM DP通信,波特率115200
#define UART_SOURCE USBIO
- 测试接口选择小牛测控(TEST_MODE_0) test_api.c
#define TEST_MODE TEST_MODE_0
- 初始化 仅普通SDK需要按照下图修改

- 使用LDOIN单线通信时还需要修改如下 公版SDK不开智能充电仓的情况下,充电口是维持电压时,耳机会很快关机。
所以在耳机开机后,如果通信线是有电压的(超过400ms(根据ldo5v_keep_filter计算)的高电平),耳机就会关机。
为了在这种情况下能够测试,需要加大关机的延时时间如下图,在延时时间到达之前仪器一定要发命令过来给耳机,否则耳机就会关机。具体延时时间加大到多少需要和仪器那边联调,还要兼顾耳机功能。
如果通信线在没通信时没有电压,或者开了智能充电仓,就不用改这个延时时间。
从LDOIN的串口中断获取数据,发现是测试数据就不用跑SDK的数据处理流程了
非可视化:
可视化:
添加一个自定义的串口命令,不能跟SDK的有冲突
非可视化:
可视化:
在SDK流程中添加自定义串口命令的处理函数
非可视化:
case CMD_USER_MODULE:
// os_time_dly(1);
if(check_goto_bt_mode(chargestore_dev->packet,chargestore_dev->size)){
if (app) {
if (strcmp(app->name,APP_NAME_BT)) {
if(!app_var.goto_poweroff_flag) {
app_var.play_poweron_tone = 0;
task_switch_to_bt();
}
} else {
if((!__this->connect_status) && __this->bt_init_ok) {
__this->connect_status = 1;
#if TCFG_USER_TWS_ENABLE
if (0 ==__this->keep_tws_conn_flag) {
log_info("\n\nbt_page_scan_for_test\n\n");
bt_bredr_enter_dut_mode(1,0);
}
#endif
}
}
}
if(__this->bt_init_ok){
ldoin_uart_data_deal(chargestore_dev->packet,chargestore_dev->size);
}
}
else{
ldoin_uart_data_deal(chargestore_dev->packet,chargestore_dev->size);
}
break;

case CMD_USER_MODULE:
__this->testbox_status = 1;
chargestore_event_to_user(buf+1, DEVICE_EVENT_CHARGE_STORE, buf[0],len-1);
break;
可视化:
case CMD_USER_MODULE:
// os_time_dly(1);
if(check_goto_bt_mode(testbox_dev->packet,testbox_dev->size)){
if (!app_in_mode(APP_MODE_BT)) {
if(!app_var.goto_poweroff_flag) {
app_var.play_poweron_tone = 0;
app_send_message(APP_MSG_GOTO_MODE, APP_MODE_BT);
}
} else {
if((!__this->connect_status) && __this->bt_init_ok) {
__this->connect_status = 1;
#if TCFG_USER_TWS_ENABLE
if (0 ==__this->keep_tws_conn_flag) {
log_info("\n\nbt_page_scan_for_test\n\n");
bt_bredr_enter_dut_mode(1,0);
}
#endif
}
}
if(__this->bt_init_ok){
ldoin_uart_data_deal(testbox_dev->packet,testbox_dev->size);
}
}
else{
ldoin_uart_data_deal(testbox_dev->packet,testbox_dev->size);
}
break;

case CMD_USER_MODULE:
__this->testbox_status = 1;
testbox_event_to_user(buf+1, buf[0], len-1);
break;
测试流程需要用到LDOIN的串口发数据,在初始化LDOIN的串口时,把LDOIN串口的接口传给测试流程,修改如下
非可视化:
可视化:
- 音频测试模式命令(不带任何算法) 功能:将耳机的mic收到的声音从耳机喇叭输出
测试mic0:
TX
| HEAD | LEN | CMD | DATA |
|---|---|---|---|
| 01E0FC | 0x02 | 0x99 | 01 |
RX
| HEAD | LEN | CMD | DATA |
|---|---|---|---|
| 01E0FC | 0x02 | 0x99 | 01 |
测试mic1:
TX
| HEAD | LEN | CMD | DATA |
|---|---|---|---|
| 01E0FC | 0x02 | 0x99 | 02 |
RX
| HEAD | LEN | CMD | DATA |
|---|---|---|---|
| 01E0FC | 0x02 | 0x99 | 02 |
退出测试:
TX
| HEAD | LEN | CMD | DATA |
|---|---|---|---|
| 01E0FC | 0x02 | 0x99 | 00 |
RX
| HEAD | LEN | CMD | DATA |
|---|---|---|---|
| 01E0FC | 0x02 | 0x99 | 00 |
如何适配其他设备的协议
在rx_data_analyze函数中解析协议,然后再根据协议执行做好的接口,用uart_bus->write发送串口数据。