微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > SimpleProfile_SetParameter跟不上

SimpleProfile_SetParameter跟不上

时间:10-02 整理:3721RD 点击:

[敘述]

血壓計 --> MCU uart --> SimpleProfile_SetParameter() --> Phone

NPI uart接收到來自血壓的data後,透過SimpleProfile_SetParameter()傳到Phone

uart約每14ms 接收1筆16bytes data

[問題]

發現上述方式會"偶發性"造成2640在接收、傳輸中突然像shutdown(估且稱作shutdown)一樣停止動作。

非一定在第n筆data發生,但一定在傳輸過程中。

[測試]

1、[Pass]懷疑血壓計端有問題

      試過當2640 shutdown時量測血壓計仍有吐data,但2640 uart已不接收

2、[Pass]懷疑2640 uart, 因此排除BLE send to Phone

      只要uart 收到data後不跑SimpleProfile_SetParameter就不會發生shutdown事件

3、[???]懷疑2640 SimpleProfile_SetParameter()處理速度跟不上uart接收data的速度

      測試1、在uart接收後delay 1x ~ 3xms,發現delay時間愈接近3xms,愈不會發生shutdown現象

                   血壓計 --> MCU uart --> delay 20~30ms --> SimpleProfile_SetParameter() --> Phone

      測試2、當量測開始時,假設uart會接收1000筆data(不delay),我讓前200筆data透過SimpleProfile_SetParameter()送到手機,

                   第201筆之後data不跑SimpleProfile_SetParameter(),目的是排除BLE連線問題可能,結果不會有shutdown現像

[結論]

綜合上述測試,看來問題很像是SimpleProfile_SetParameter()來不及處理uart 進來的data,導致shutdown,

請問是否有其它建議,或該如何解決??

謝謝

一般来说,串口手法速率大于蓝牙转发速率,所以会出现串口没问题但蓝牙传输衔接不上的问题。

CC2640的throughput请看这边: https://github.com/ti-simplelink/ble_examples/blob/master/docs/throughput_example.md

謝謝你的幫忙,是走notification,昨天試著將SimpleProfile_SetParameter()搬到其它地方測試,

發現即使不delay也不會shutdown,又推翻之前的認知。

看來如下(目前)做法是不可行的,但不知為何??

static void TLpacketParser()

{

      len = TLgetRxBufLen();
      .....

      TLread(RxBuf, len);

      SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR6, len, RxBuf); <=== 看來不能直接send to phone 

}

我也遇到了这个问题   UART收到数据多了  蓝牙在给主机发送数据的时候   出现丢包的情况  而且是固定包  

感觉串口收的太快了   蓝牙发送的速度跟不上   但是串口收到的数据是完整的   

我也是加TASK_SLEEP才能完整发送数据  但是数据很慢  用NOTIFY方式 

现在在改用INDICATE方式发送  但是改为INDICATE后程序直接飞了  正在找原因ING,。。。

Hi Yulei

你之後都要改INDICATE方式嗎?

我有試著改len送到BLE結果不會當,並移掉sleep…方式如下

TLpacketParser()

{

      uint16_t len = TLgetRxBufLen();

      if (len >= APP_TL_BUFF_SIZE)

      {

            len = APP_TL_BUFF_SIZE //16

      }

      TLread(appRxBuf, len);

      len = 10; <==== appRxBuf接進來的len會是16,我只送10到BLE卻不會當

      SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR6, len, &appRxBuf);

}

----------------------------------------------------------

您說的:"UART收到数据多了  蓝牙在给主机发送数据的时候   出现丢包的情况"

我也懷疑過…但如將SimpleProfile_SetParameter移到taskFxn()的loop傳送給定16bytes data,而Rx仍然接收data,

這樣卻不會當…無法說明"uart收多ble會丟包"

後續有何進展再煩請互相share吧

你好:

我想用INDICATE方式是因为NOTIFY没有RESPONSE        无法检测主机是否收到导致丢包

但是目前程序不正常  还在找原因

您所说的SimpleProfile_SetParameter放在LOOP里面   一直发送数据  主机就不会丢包吗?

难道是因为SimpleProfile_SetParameter放的位置不对?我之前是串口收到数据后   直接发送给主机

Hi Yulei

是的,放taskFxn() loop裡,當Rx接data到停止的時間裡,loop裡都會透過SimpleProfile_SetParameter()發送給固定data(buf[16] = {0x11....})

如前文,我也是串口uart一收到數據就直接發送

------------------------------------

但我也測試過…如將uart收到的data在taskFxn() loop透過SimpleProfile_SetParameter()發送,卻會當,

這也是我不解之處(您可以試試)。

目前我會著重在len = 10;就正常的地方,感覺像是某個buf或length沒有控管好

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top