SPI-4: данные мусора с угловым поворотным датчиком (AEAT 9922) и Raspberry Pi 3b+

Я пытаюсь получить данные через SPI от углового датчика AEAT9922 (оценочная плата HEDS-9922EV), используя Raspberry Pi 3b+. Позже мы перейдем на jetson nano или xavier nx. С данным кодом мы получаем мусорные данные, которые я не могу интерпретировать. Я думаю, что мы неправильно интерпретируем таблицу данных или вообще неправильно понимаем SPI Communication.

Изменить: для угловых данных всегда возвращается: 00000000 10000000 00000000 00000000

Ссылка на даташит: здесь

Настраивать:

          def __init__(self, bus, device):
        self.spi = spidev.SpiDev()
        self.spi.open(bus, device)
        self.spi.max_speed_hz = 5_000_000
        self.spi.mode = 1

Метод для угла:

          def read_angle(self):
        # SPI4 read command for position data (address 0x3F)
        address = 0x3F
        read_flag = 0x4000  # Bit 14
        read_cmd = address | read_flag
        read_cmd |= self.compute_parity(read_cmd) << 15

        # Split the 16-bit command into two 8-bit chunks
        cmd_msb = (read_cmd >> 8) & 0xFF  # Most significant byte
        cmd_lsb = read_cmd & 0xFF  # Least significant byte

        # Send the command and receive the response
        resp = self.spi.xfer2([cmd_msb, cmd_lsb, 0, 0])  # sending 4 bytes in total for receiving 18 bits

        # Combine the two bytes into a single 32-bit value
        angle = (resp[0] << 24) + (resp[1] << 16) + (resp[2] << 8) + resp[3]  # assuming big-endian byte order

        # Extract the parity bit
        parity = (angle >> 31) & 0x01

        # Extract the error flag
        ef = (angle >> 30) & 0x01
        if ef:
            print("Warning: Error flag set in angle reading.")

        # Extract the position data
        data = (angle >> 12) & 0x3FFFF  # assuming 18-bit position

        # Check the parity bit
        if parity != self.compute_parity(data):
            raise Exception("Parity error in SPI response")

        return data

Наконец, два скриншота из таблицы данных с (надеюсь) самой важной информацией.

[Позиция прочитана: (https://i.stack.imgur.com/xnN6y.png)]

[Кадр команды и данных: (https://i.stack.imgur.com/3Y55z.png)]

Что мы пробовали:

  1. Тестирование связи SPI с помощью spidev_test -> Работает.
  2. Измерение осциллографом, если сигналы подаются правильно -> работает.
  3. Адаптация сценария, данная является последней итерацией. Мы попробовали это всего с 2 байтами. Датчик должен работать в 16-битном режиме, но, как указано в таблице данных, возвращает только 8 бит.

0 ответов

Другие вопросы по тегам