LINUX.ORG.RU

Сообщения shem

 

Проблема с I2C на BBB c Debian

Форум — General

Добрый день. Использую Beaglebone Black, где установлен Debian 9.3. Проблема состоит в том, что не получается читать данные по I2C. Выполнение различных команд в терминале даёт такой результат:


debian@beaglebone:~/temp$ i2cdetect -l
i2c-1	i2c       	OMAP I2C adapter                	I2C adapter
i2c-2	i2c       	OMAP I2C adapter                	I2C adapter
i2c-0	i2c       	OMAP I2C adapter                	I2C adapter



debian@beaglebone:~/temp$ i2cdetect -r 2
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-2 using read byte commands.
I will probe address range 0x03-0x77.
Continue? [Y/n] y
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- UU UU UU UU -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --      


debian@beaglebone:~/temp$ ls -l /sys/bus/i2c/devices/i2c-*
lrwxrwxrwx 1 root root 0 Jan 28 15:47 /sys/bus/i2c/devices/i2c-0 -> ../../../devices/platform/ocp/44e0b000.i2c/i2c-0
lrwxrwxrwx 1 root root 0 Jan 28 15:47 /sys/bus/i2c/devices/i2c-1 -> ../../../devices/platform/ocp/4802a000.i2c/i2c-1
lrwxrwxrwx 1 root root 0 Jan 28 15:47 /sys/bus/i2c/devices/i2c-2 -> ../../../devices/platform/ocp/4819c000.i2c/i2c-2

Использую i2c-2. К Beaglebone по I2C подключен микроконтроллер, который в режиме мастера постоянно шлёт данные. Для чтения на стороне Beaglebone использую следующий код, собираемый из-под Qt:


#include <QCoreApplication>

#include <iostream>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <linux/i2c-dev.h>

using namespace std;

int i2c_desc = 0;
int i2c_ioc = 0;
char num = 0;
char file[11] = "/dev/i2c-X";

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    cout << "Enter the I2C-device number: ";
    cin >> num;

    file[9] = num;
    cout << "I2C file: " << file << endl;

    if ((i2c_desc = open(file, O_RDWR)) < 0)
            cout << "Error opening the I2C file" << endl;
    else
    {
        cout << "I2C file is open" << endl;

        if ((i2c_ioc = ioctl(i2c_desc, I2C_SLAVE, 0x42)) < 0)
            cout << "Error setting parameters" << endl;
        else
            cout << "Settings are set" << endl;
    }

    unsigned char buf[8] = ".......";

    while(true)
    {
        int res = read(i2c_desc, buf, 8);

        if(res >= 0)
            cout << "I2C data: " << buf << endl;
        else
            cout << "Error: " << strerror(errno) << endl;
    }

    return a.exec();
}


Но при исполнении программы получаю ошибки «Resource temporarily unavailable», изредка разбавляемые «Device or resource busy». Как я понимаю, проблема либо где-то в системе, либо в том, что я как-то неправильно читаю из I2C.

Может, у кого есть мысли о том, почему так происходит?

 , ,

shem
()

Ошибка при сборке ядра под ARM

Форум — Linux-install

Добрый день. Впервые собираю ядро Linux (Debian под ARM, для BeagleBone Black), и сборка вылетает с ошибками:

ERROR: "usb_bus_type" [drivers/misc/devovmgr.ko] undefined!
ERROR: "usb_match_device" [drivers/misc/devovmgr.ko] undefined!
scripts/Makefile.modpost:91: ошибка выполнения рецепта для цели «__modpost»
make[1]: *** [__modpost] Ошибка 1
Makefile:1140: ошибка выполнения рецепта для цели «modules»
make: *** [modules] Ошибка 2

Как можно исправить это? Спасибо

 ,

shem
()

Поднять GPIO в U-Boot

Форум — General

Доброго времени суток. Столкнулся со следующей проблемой. Имеется модуль BlueShark (с OMAP3530), на который установлен Ångström Linux и U-Boot. На BlueShark имеется несколько GPIO. При попытке управлять GPIO (например, 107-ым) следующей последовательностью команд терминала:

echo 107 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio107/direction
echo 1 > /sys/class/gpio/gpio107/value,

часть GPIO работает нормально, часть вообще не реагирует. Удалось выяснить, что работают только те GPIO, которые ранее были инициализированы в U-Boot. То есть, для работы GPIO их нужно сначала поднять где-то в U-Boot. Соответственно, вопрос: где и как настроить GPIO в U-Boot? Может, сталкивался кто? Спасибо.

 ,

shem
()

RSS подписка на новые темы