adafruit / adafruit/Adafruit_CircuitPython_BluefruitSPI

ATI command works ok but errors when debug is used - gives Error (id:0xa180)

Open
#8 3 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Python
Stars
4
Forks
8
PR merge metrics
No merged PRs in 30d

Description

On a `Feather M0 Bluetooth LE` running 3.1.1 and all libraries from `adafruit-circuitpython-bundle-3.x-mpy-20181208.zip`, this code works:

```
Adafruit CircuitPython 3.1.1 on 2018-11-02; Adafruit Feather M0 Adalogger with samd21g18
>>>
>>> import board
>>> import busio
>>> from digitalio import DigitalInOut, Direction
>>> from adafruit_bluefruitspi import BluefruitSPI
>>> spi_bus = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
>>> cs = DigitalInOut(board.D8)
>>> irq = DigitalInOut(board.D7)
>>> rst = DigitalInOut(board.D4)
>>> bluefruit = BluefruitSPI(spi_bus, cs, irq, rst, debug=False)
>>> bluefruit.init()
>>> bluefruit.command_check_OK(b'AT+FACTORYRESET', delay=1)
>>> bluefruit.command_check_OK(b'ATI')
b'BLESPIFRIEND\r\nnRF51822 QFACA10\r\n0102030405060708\r\n0.8.0\r\n0.8.0\r\nSep 25 2017\r\nS110 8.0.0, 0.2\r\n'
```

But if debug is on then a strange error pops out:

```
>>> import board
>>> import busio
>>> from digitalio import DigitalInOut, Direction
>>> from adafruit_bluefruitspi import BluefruitSPI
>>> spi_bus = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
>>> cs = DigitalInOut(board.D8)
>>> irq = DigitalInOut(board.D7)
>>> rst = DigitalInOut(board.D4)
>>> bluefruit = BluefruitSPI(spi_bus, cs, irq, rst, debug=True)
>>> bluefruit.init()
Writing: ['0x10', '0xef', '0xbe', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0']
>>> bluefruit.command_check_OK(b'AT+FACTORYRESET', delay=1)
Writing: ['0x10', '0x0', '0xa', '0x10', '0x41', '0x54', '0x2b', '0x46', '0x41', '0x43', '0x54', '0x4f', '0x52', '0x59', '0x52', '0x45', '0x53', '0x45', '0x54', '0xa']
Reading: ['0x20', '0x0', '0xa', '0x4', '0x4f', '0x4b', '0xd', '0xa', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff']
b'OK\r\n'
>>> bluefruit.command_check_OK(b'ATI')
Writing: ['0x10', '0x0', '0xa', '0x4', '0x41', '0x54', '0x49', '0xa', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0']
Reading: ['0x20', '0x0', '0xa', '0x90', '0x42', '0x4c', '0x45', '0x53', '0x50', '0x49', '0x46', '0x52', '0x49', '0x45', '0x4e', '0x44', '0xd', '0xa', '0x6e', '0x52']
Reading: ['0x20', '0x0', '0xa', '0x90', '0x46', '0x35', '0x31', '0x38', '0x32', '0x32', '0x20', '0x51', '0x46', '0x41', '0x43', '0x41', '0x31', '0x30', '0xd', '0xa']
Reading: ['0x20', '0x0', '0xa', '0x90', '0xzz', '0xzz', '0xzz', '0xzz', '0xzz', '0xzz', '0xzz', '0xzz', '0xzz', '0xzz', '0xzz', '0xzz', '0xzz', '0xzz', '0xzz', '0xzz']
Reading: ['0x20', '0x0', '0xa', '0x90', '0xd', '0xa', '0x30', '0x2e', '0x38', '0x2e', '0x30', '0xd', '0xa', '0x30', '0x2e', '0x38', '0x2e', '0x30', '0xd', '0xa']
Reading: ['0x20', '0x0', '0xa', '0x90', '0x53', '0x65', '0x70', '0x20', '0x32', '0x35', '0x20', '0x32', '0x30', '0x31', '0x37', '0xd', '0xa', '0x53', '0x31', '0x31']
Reading: ['0x20', '0x0', '0xa', '0x90', '0x30', '0x20', '0x38', '0x2e', '0x30', '0x2e', '0x30', '0x2c', '0x20', '0x30', '0x2e', '0x32', '0xd', '0xa', '0x4f', '0x4b']
Reading: ['0x80', '0xa1', '0x80', '0x0', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff']
b'BLESPIFRIEND\r\nnRF51822 QFACA10\r\n0102030405060708\r\n0.8.0\r\n0.8.0\r\nSep 25 2017\r\nS110 8.0.0, 0.2\r\nOK'
Traceback (most recent call last):
File "", line 1, in
File "adafruit_bluefruitspi.py", line 253, in command_check_OK
File "adafruit_bluefruitspi.py", line 248, in command
File "adafruit_bluefruitspi.py", line 248, in command
RuntimeError: AT command failure: RuntimeError('Error (id:0xa180)',)
```

Appears to do this every time and is completely reproducible for me - the serial connection is running at standard 115200.

A glance at the code shows that there's a sleep xor print in `_cmd()` based on debug mode. Perhaps there's a timing issue here? For someone more familiar with protocol and peripheral the Reading output will probably give away what's going on here.

I've also observed a buffering issue with `read_packet()` but I'll probably put a forum post in for that RSN. I was turning on debug to try and get more info for that.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start in adafruit_bluefruitspi.py, especially _cmd(), command(), command_check_OK(), and read_packet(), and reproduce the supplied ATI command with debug=False and debug=True on the Feather M0 setup. Trace the debug-mode packet timing and verify that command_check_OK(b'ATI') completes without RuntimeError while preserving the reported response.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
embedded-iot
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.