物聯(lián)網(wǎng)筆記4

Error: dbg.M0015 on BLE Pioneer Kit
作者 codercjg29 六月 2016, 11:14 上午

想要調(diào)試PSoC_4_BLE_CapSense_Slider_LED工程時(shí),彈出Error: dbg.M0015 錯(cuò)誤。
現(xiàn)象:錯(cuò)誤信息為Debugger exited unexpectedly during run. Encountered error (Target disconnected See output window for more information.)
原因:為了降低功耗,關(guān)閉了SWD調(diào)試功能
解決辦法:
在文件PSoC_4_BLE_CapSense_Slider_LED.cydwr中system=>Programming\Debugging=>Debug Select把GPIO方式換成SWD方式重新編譯

分類: ble低功耗藍(lán)牙 | 評論

lwip tcp反復(fù)斷開和重連時(shí)出現(xiàn)的bug
作者 codercjg7 六月 2016, 5:17 下午

LWIP做TCP Client時(shí),綁定了端口號tcp_bind(pcb, IP_ADDR_ANY, TCP_PORT);
當(dāng)PC TCP Server主動斷開TCP連接時(shí),TCP Client會不斷重連。反復(fù)斷開和重連后發(fā)現(xiàn),連接上后一會又自動斷開了。
通過wireshark抓包發(fā)現(xiàn)是PC 主動斷開了連接。
后來通過命令行里netstat -an 查看端口連接狀態(tài),發(fā)現(xiàn)竟然有兩個(gè)ip連接該端口,一個(gè)狀態(tài)為SYN_RECEIVED, 另一個(gè)為ESTABLISHED。
實(shí)際上,客戶端只有一個(gè)IP。如圖端口號為56665所示:


后來tcp client去掉tcp_bind(pcb, IP_ADDR_ANY, TCP_PORT)不綁定固定端口號, 并在重新連接前取消之前的連接tcp_abandon(TcpPCB, 1);
這樣解決了這個(gè)bug。
/* try connect the server periodically when connection lost /
void Connect_Periodic_Handle(__IO uint32_t localTime)
{
static uint8_t tryTimes = 0;
if(!connected) {
if(tryTimes > 4) {
tcp_abandon(TcpPCB, 1); /
reset tcp client, fixup the bug (only send tcp SYN 6 times) of lwip /
mdelay(100);
Tcp_Client_Init();
tryTimes = 0;
return;
}
/
connect periodic process every 250 ms */
if (localTime – connectTimer >= CONNECT_TMR_INTERVAL) {
connectTimer = localTime;
tcp_connect(TcpPCB, &serveraddr, TCP_PORT, tcp_client_connected);
tryTimes++;
}
}
}
void Tcp_Client_Init(void)
{
struct tcp_pcb pcb;
/
Create a new TCP control block /
pcb = tcp_new();
TcpPCB = pcb;
/
Assign to the new pcb a local IP address and a port number /
/
tcp_bind(pcb, IP_ADDR_ANY, TCP_PORT); / / bug fix /
if(equipmentInfo.dhcp == 0 && equipmentInfo.netSetting.serverIP != 0xFFFFFFFF) {
serveraddr.addr = equipmentInfo.netSetting.serverIP;
} else { /
default ip /
IP4_ADDR(&serveraddr, 192, 168, 1, 200);
}
tcp_recv(pcb, tcp_client_recv);
/
Connect to the server: send the SYN */
tcp_connect(pcb, &serveraddr, TCP_PORT, tcp_client_connected);
tcp_err(pcb, tcp_error);
}

分類: lwip協(xié)議棧 | 評論

ATSAMB11-Xplained-Pro ble藍(lán)牙4.1開發(fā)板
作者 codercjg3 六月 2016, 3:47 下午

ATMEL 的smab11支持低功耗藍(lán)牙ble4.1,既可作central,又可做peripheral。
官網(wǎng)說支持MDK編程,我試了下bug一大堆,動不動就跑飛,后來只好用官方的ATMEL studio。
板子比較新,用的人少,網(wǎng)上相關(guān)討論很少。主要通過官方開發(fā)板文檔和例子源碼,熟悉ble藍(lán)牙程序編程模型。
最快的方法就是在板子上和手機(jī)上跑例子,看效果,然后根據(jù)需要修改代碼,實(shí)現(xiàn)自己的功能。
這個(gè)過程會發(fā)現(xiàn)許多問題。
串行發(fā)送和接收數(shù)據(jù)的例子:CUSTOM_SERIAL_CHAT_SAMB11_XPLAINED_PRO1
血壓計(jì)例子:BLOOD_PRESSURE_SAMB11_XPLAINED_PRO1
通過測試發(fā)現(xiàn)上行速率最大為7kb/s,下行速率最大為1kb/s。連接間隔對傳輸速率影響很大,通信距離能達(dá)到20米,但速率會因?yàn)榫嚯x變遠(yuǎn)而減小

  1. at_ble_api.h中
    Characteristic權(quán)限設(shè)置:

define AT_BLE_CHAR_BROADCST (1 << 0)

define AT_BLE_CHAR_READ (1 << 1)

define AT_BLE_CHAR_WRITE_WITHOUT_RESPONSE (1 << 2)

define AT_BLE_CHAR_WRITE (1 << 3)

define AT_BLE_CHAR_NOTIFY (1 << 4)

define AT_BLE_CHAR_INDICATE (1 << 5)

define AT_BLE_CHAR_SIGNED_WRITE (1 << 6)

define AT_BLE_CHAR_RELIABLE_WRITE (1 << 7)

define AT_BLE_CHAR_WRITEABLE_AUX

當(dāng)設(shè)為AT_BLE_CHAR_NOTIFY和AT_BLE_CHAR_WRITE_WITHOUT_RESPONSE 速度最快,因?yàn)椴恍枰獧?quán)限驗(yàn)證。

  1. ble_manager.h中修改連接間隔

define GAP_CONN_INTERVAL_MIN (8)// 6//(20) //Connection interval min 20ms

/** maximum connection interval */
// <o> GAP Maximum Connection Interval in msec <0-1000:50>
// <i> Defines Maximum interval for GAP Connection.
// <i> Default: 40
// <id> gap_conn_interval_max

define GAP_CONN_INTERVAL_MAX (15)//10 //(40) //Connection interval max 40ms

/** connection slave latency */
// <o> GAP Slave Latency <0-4>
// <i> Defines Slave Latency for GAP Connection.
// <i> Default: 0
// <id> gap_conn_slave_latency

define GAP_CONN_SLAVE_LATENCY (0)

/** minimum length of local info parameters when using connection establishment proc */

define GAP_CE_LEN_MIN (0)

/** maximum length of local info parameters when using connection establishment proc */

define GAP_CE_LEN_MAX (0)

/** supervision time-out */
// <o> GAT Super Vison Timeout in msec <0-3000:50>
// <i> Defines SuperVision Timeout for GAP Connection.
// <i> Default: 0x1f4
// <id> gap_supervision_timout

define GAP_SUPERVISION_TIMOUT (0x1f4) // 500 for supervision time-out

當(dāng)GAP_CONN_INTERVAL_MAX很小時(shí),發(fā)送數(shù)據(jù)過快可能會導(dǎo)致程序跑飛,因?yàn)閰f(xié)議棧不開源,沒法調(diào)試,只能把這個(gè)間隔減小

3.自帶的adc例子源碼有問題,當(dāng)和ble藍(lán)牙協(xié)議棧整合時(shí)
函數(shù)adc_init()中 AON_GP_REGS0->RF_PMU_REGS_1.reg = reg_value;
這一句會改寫藍(lán)牙相關(guān)的內(nèi)容,導(dǎo)致藍(lán)牙通信不正常,應(yīng)該改為AON_GP_REGS0->RF_PMU_REGS_1.reg = AON_GP_REGS0->RF_PMU_REGS_1.reg | reg_value;

這個(gè)板子其實(shí)挺坑的,沒有編程手冊,沒有寄存器手冊,沒有協(xié)議棧源碼,不好調(diào)試啊。

分類: ble低功耗藍(lán)牙 | 評論

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容