Присоединяйтесь!
Авторизация
remote    SPI    lua   

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

21 September 2015 - Автор nwnclv

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

Всем, наверняка, известна утилита 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  ���������������.

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

21 September 2015
nwnclv
автор статьи

Комментариев: 0

Ваш комментарий будет первым

Отправить комментарий

Авторизуйтесь для отправки комментария

Присоединяйтесь
Новые сообщения

Новые комментарии к блогам
  • Чёт дорого

    Raspberry Pi 400
  • Как её программировать?

    Raspberry Pi Pico
  • Зря Wi-Fi не вколхозили, как они с esp32 конкурировать собрались, который и по характеристикам...

    Raspberry Pi Pico
  • "будет вылетать из материнкой платы без дополнительного прижима" Для умных - там есть...

    Raspberry Pi Compute Module 4 (CM4)
  • Это интересно. По цене как китайские клоны ардуин, а возможности и мощность намного больше....

    Raspberry Pi Pico
  • Пиши по-русски, ты в национальном домене, а не на коме.

    GPIO для чайников (часть 1)
  • Смотри ссылку в конце статьи "Руководство по программированию Pico на C/С++"

    Raspberry Pi Pico
  • Слабовато конечно, но на замену всяким ардуинам вполне себе пойдёт

    Raspberry Pi Pico
  • Как раз очевидно, что не знающие вообще никакого языка или знающие их плохо, будут искать не...

    GPIO для чайников (часть 1)