Skip to content
  • Категории
  • Главная
  • Документация
  • Последние
  • Пользователи
Collapse
  1. Главная
  2. Аппаратные модули
  3. Общие вопросы по GPIO, I2C, UART, SPI, 1-Wire, DSI, CSI, I2S
  4. Удаленное управление. SPI. spidev-test

Удаленное управление. SPI. spidev-test

Запланировано Прикреплена Закрыта Перенесена Общие вопросы по GPIO, I2C, UART, SPI, 1-Wire, DSI, CSI, I2S
1 Сообщения 1 Posters 107 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • piP Не в сети
    piP Не в сети
    pi
    написал в отредактировано
    #1

    Всем привет, кто тут есть.

    Всем, наверняка, известна утилита spidev_test, которой обычно проверяют правильность работы SPI на малине или других железках с линуксами. Скачать ее можно, например, тут.

    После скачивания и удачной сборки, можно включить SPI на raspberry (через raspi-config) и замкнуть 2 пина SPI_MOSI и SPI_SOMI (Master Out Slave In и Slave Out Master In) и выполнить то, что собралось в предыдущем шаге.

    Тут есть подробнее

    Должно получиться что-то типа

    ./spidev_test -D /dev/spidev0.0
    spi mode: 0
    bits per word: 8
    max speed: 500000 Hz (500 KHz)
    
    FF FF FF FF FF FF
    40 00 00 00 00 95
    FF FF FF FF FF FF
    FF FF FF FF FF FF
    FF FF FF FF FF FF
    DE AD BE EF BA AD
    F0 0D
    

    Это же самое можно сделать на ferro_remote.

    Для начала открою spi

    spi = fr.client.spi -- alias
    local dev = assert(spi.open(0, 1)) -- откроем устройство 
    Теперь нужно передать в устройство какие-то данные. Я возьму кусок, прям из spidev_test
    
    local inbuf = "\xFF\xFF\xFF\xFF\xFF\xFF\x40\x00"..
                  "\x00\x00\x00\x95\xFF\xFF\xFF\xFF"..
                  "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"..
                  "\xFF\xFF\xFF\xFF\xFF\xFF\xF0\x0D"
    

    И далее просто сделаю вызов transfer из таблицы dev

    local res = dev:transfer( inbuf )
    

    В res придет уже то, что вернула железка. Если все правильно настроено, то результат должен быть ровно тем же, что и у spidev_test. Для этого добавил функцию hex_dump, которая возьмет строку и выведет ее в красивый вид на консоль.

    Итого получилось:

    spi = fr.client.spi
    
    function hex_dump(buf)
        for i=1,math.ceil(#buf/16) * 16 do
            if (i-1) % 16 == 0 then 
                io.write(string.format('%08X  ', i-1)) 
            end
            io.write( i > #buf and '   ' or string.format('%02X ', buf:byte(i)) )
            if i %  8 == 0 then 
                io.write(' ') 
            end
            if i % 16 == 0 then 
                io.write( buf:sub(i-16+1, i):gsub('%c','.'), '\n' ) 
            end
        end
    end
    
    function main( ) 
        local inbuf = "\xFF\xFF\xFF\xFF\xFF\xFF\x40\x00"..
                      "\x00\x00\x00\x95\xFF\xFF\xFF\xFF"..
                      "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"..
                      "\xFF\xFF\xFF\xFF\xFF\xFF\xF0\x0D"
        local dev = assert(spi.open(0, 1))
        local res = dev:transfer( inbuf )
        print( "Input: " )
        hex_dump( inbuf )
        print( "Result:" )
        hex_dump( res )
    end
    

    Это весь код.

    Теперь подключимся к агенту, который запущен на малине и посмотрим. Пины разомкнуты:

    $ ./lua_client -s 192.168.3.1:12345 -e spidev-test.lua 
    Input: 
    00000000  FF FF FF FF FF FF 40 00  00 00 00 95 FF FF FF FF  ������@....�����
    00000010  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF F0 0D  ���������������.
    Result:
    00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
    00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
    

    А теперь замкнуты:

    $ ./lua_client -s 192.168.3.1:12345 -e spidev-test.lua 
    Input: 
    00000000  FF FF FF FF FF FF 40 00  00 00 00 95 FF FF FF FF  ������@....�����
    00000010  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF F0 0D  ���������������.
    Result:
    00000000  FF FF FF FF FF FF 40 00  00 00 00 95 FF FF FF FF  ������@....�����
    00000010  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF F0 0D  ���������������.
    

    Все как и должно быть.

    1 ответ Последний ответ
    0

    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Login or register to search.
    • Первое сообщение
      Последнее сообщение
    0
    • Категории
    • Главная
    • Документация
    • Последние
    • Пользователи