Hi,

It looks like the attachements were dropped somewhere... You can download them on my seafile instance : https://seafile.codingfield.com/d/64d53a6ca6b44ae6b5d7/

It seems to fail during the discovery of the characteristics on the device. From what I understand, it happens during the discovery of Generic Access Profile and Generic Attributes Profile, which are handled by nimble.
I may be wrong, I'm a beginner with BLE and nimble!
Maybe the captures will make more sens to you?

Yeah, it's very strange that it works when the code is supposed to run slower... It makes me think of a timing or memory issue, but I couldn't find it...

Thanks,
JF

Le 14/06/2020 20:46, Łukasz Rymanowski a écrit :
Hi,

Thanks for the report, however looks like attachments are missing.

First of all you need to understand what read fails i.e check handle and
make sure that your application responds correctly.
It is very suspicious that read works with -Og, but still I would focus on
that failing read first.

Thanks
Lukasz


On Sun, Jun 14, 2020, 20:25 <j...@codingfield.com> wrote:

Hello,

I'm working on a firmware for the Pinetime, a smartwatch based on the
NRF52832. The code is written in C/C++ and uses FreeRTOS.
I've recently switched from the Nordic Softdevice to NimBLE as BLE
stack. I used the freertos port from the 'porting' folder of the source
code of nimble.

I did many test using my PC on Linux : it can connect and communicate
with the NRF52 without issue.
However, things are not that easy when I try to connect using Android
phone (I tried with a Huawei Psomething and my old Nexus5) : the
connection fails most of the time.

I did a lot of debugging, logging, sniffing,.. and I still cannot
understand why it's not working as expected. Here are some of my
observations:

  - When Android successfully connects, I receive the following GAP
events : BLE_GAP_EVENT_CONNECT and then BLE_GAP_EVENT_CONN_UPDATE 2
times. The first update sets the connection interval to 6, the second
one to 40.
- When it fails, I receive only the BLE_GAP_EVENT_CONNECT event and the
1st BLE_GAP_EVENT_CONN_UPDATE.
- Using the sniffer, I noticed that the last packet is a read request from the phone. It looks like the NRF52 never respond to this last read. - It fails in the discovery steps (when the android phone discover all the services, characteristics and attributes) but not always at the same
place.
- I noticed that the tasks (ll task and host task are not in deadlock
BUT it looks like the radio ISR (ble_phy_isr() in ble_phy.c) is not
called anymore.
  - When I build the very same code in DEBUG (-Og instead of -O3), it
works perfectly!

You'll find in attachements 2 captures I did with Wireshark and the NRF
Sniffer (running on a NRF52-DK), one failed and one successful attempt
to connect.

I'm running out of idea to debug this further. Is there a configuration
issue (there are so many parameters in syscfg.h)? What could I try?
Where should I search ? Do you need more info to understand the issue?

Could you help me fix this issue?

Thanks,

JF

Reply via email to