Follow-Up question on Electrical Engineering StackexchangeBluetooth Low Energy - l'aggiornamento di un valore caratteristico ripetutamente
Voglio scrivere il valore di una caratteristica Bluetooth Low Energy ripetutamente in un breve lasso di tempo (come un possibile caso d'uso, immaginare un mouse).
- La caratteristica con un UUID 128 bit è 20 byte lungo. Pertanto, può essere scritto in una singola transazione Low Energy.
- Le scritture si verificano a una frequenza di 50 Hz, che è uguale a una scrittura una volta ogni 20 ms.
- Pertanto, 20 * 50 * 8 = 8 kbit/s vengono scritti.
- Sto utilizzando il comando /Scrittura senza risposta per scrivere la caratteristica. Pertanto, nessun riconoscimento si verifica sul livello dell'attributo.
- Nessun altro dispositivo Bluetooth o Bluetooth Low Energy è collegato. Nulla viene eseguito su WLAN. Nessun'altra caratteristica viene letta o scritta durante i test.
Testare il programma inviando pacchetti contenenti numeri di sequenza da un iPhone 4S. Il numero di sequenza viene incrementato di uno dopo ogni pacchetto inviato.
Sul lato ricevente, viene utilizzata una scheda di sviluppo programmabile, che incorpora un chip BLE CSR1000, che riceve i pacchetti e stampa i numeri di sequenza ricevuti sulla connessione seriale.
I miei problemi sono i seguenti:
Dopo qualche tempo, i pacchetti iniziare a ricevere caduto. I primi ~ 100 pacchetti funzionano bene a 50 Hz. Da quel momento in poi, i pacchetti inizieranno a cadere.
0x00 - 0x46 received 0x47, 0x48 missing 0x49, 0x4a, 0x4b, 0x4c received 0x4d missing 0x4e, 0x4f, 0x50, 0x51 received 0x52 missing 0x53, 0x54, 0x55, 0x56 received 0x57 missing ...
Molto spesso, un pacchetto di quattro pacchetti viene trasmesso correttamente (raramente, solo 2 pacchetti). Quindi, mancano 1-7 pacchetti.
Quando si riduce la dimensione del valore caratteristico, il problema persiste.
Quando scrivo a 100 Hz anziché a 50 Hz, l'immagine è la stessa, solo che le gocce iniziano a verificarsi dopo circa 35 pacchetti e che 5-7 pacchetti vengono rilasciati tra la trasmissione riuscita di quattro pacchetti.
Con i pacchetti persi, la velocità di trasmissione risultante è di circa 5 kbit/s, indipendentemente dalla frequenza delle scritture. Questo è chiaramente al di sotto del ~ 305 kbit/s che dovrebbe essere tecnicamente possibile tramite Bluetooth Low Energy.
Il problema si verifica anche nella direzione opposta, quando invio pacchetti dalla scheda di sviluppo all'iPhone 4S. Ancora una volta, 5 kbit/s è il massimo che ottengo. Il meccanismo di notifica viene utilizzato per questo scenario. Di nuovo, nessun riconoscimento si verifica sul livello dell'attributo.
Quando provo a inviare entrambe le direzioni contemporaneamente, le cose iniziano a saltare fino al punto in cui devo reimpostare sia la scheda di sviluppo che l'iPhone 4S.
Domande:
Sia questo un problema del chip Bluetooth Low Energy, che viene utilizzato sulla scheda di sviluppo?
Se sì, perché il problema si verifica anche nella direzione opposta, dove l'iPhone funge da ricevitore?
Esistono schede di sviluppo sul mercato che supportano l'accesso ad alta frequenza alle caratteristiche?
Quale potrebbe essere l'origine del problema?
Si prega inoltre di fare riferimento a parti della Spec. Bluetooth/diapositive/articoli di presentazione oltre alle ipotesi.
Esistono mouse Bluetooth Low Energy sul mercato. I mouse hanno frequenze di polling tipiche di 125 Hz e devono inviare almeno due valori di 16 byte più un overhead HID aggiuntivo per tick. Pertanto, dovrebbe essere disponibile una soluzione per il mio problema.
Aggiornamento
Il LE Connection Complete evento è descritto in Bluetooth Specification Version 4.0 Vol 2 Parte E Sezione 7.7.65.1. Ricevo i seguenti valori per i vari parametri di connessione:
Parameter Value Description
--------------------------------------------------
Conn_Interval 0x0054 Time = 105 ms
Conn_Latency 0x0000 Time = 0 ms
Supervision_Timeout 0x00fc Time = 2520 ms
Master_Clock_Accuracy 0x05 50 ppm
Quale scheda chip/scheda LE si sta utilizzando? –
Quali parametri hai impostato per la connessione: stai utilizzando l'impostazione predefinita? –
Come vedi i tempi di connessione? – chwi