QSerialPort 1-Wire через UART.

 
0
 
C++
ava
smartchecker | 12.05.2014, 00:52
Кто-нибудь знает есть ли реализация протокола 1-Wire на QSerialPort?
Или как реализовать этот протокол?
Конкретно интересует как реализовать приём/передачу с задержками.

Вот appnote, в котором рассказываются детали реализации.
Using a UART to Implement a 1-Wire Bus Master
Ответы (3)
ava
bsa | 12.05.2014, 11:39 #
smartchecker, боюсь, тебе придется самом решать эту задачу. Тут надо тупо игнорировать входящие данные, равные исходящим (или тупо по количеству).
ava
smartchecker | 14.05.2014, 22:08 #
Допустим, делаю так:

QOneWire::QOneWire(QSerialPort *serial, QObject *parent) :
    QObject(parent)
{
    this->serial = serial;

    connect(serial, SIGNAL(readyRead()), this, SLOT(readData()));
}

void QOneWire::resetBus() {
    QByteArray data;

    serial->setBaudRate(QSerialPort::Baud9600);
    serial->setDataBits(QSerialPort::Data8);
    serial->setParity(QSerialPort::NoParity);
    serial->setStopBits(QSerialPort::OneStop);
    serial->setFlowControl(QSerialPort::NoFlowControl);

    data.append(0xF0); // Reset
    serial->write(data);

    serial->waitForBytesWritten(480);
    serial->flush();
}

void QOneWire::readData()
{
    QByteArray data;
    data = serial->readAll();
    qDebug() << "recv data:" << data.toHex();
}


Как бы мне в слот передавать команду, ибо на разные команды разные действия?

Команды могут быть такие:
0x33 — Read ROM. После этой команды могут быть приняты 64 бита адреса устройства. Команда работает, только если устройство на шине одно.
0x55 — Match ROM. После команды требуется передать адрес. Устройство, чей адрес совпал с переданным, продолжает отвечать на команды, остальные молчат.
0xF0 — Search ROM. Позволяет узнать адреса всех устройств на шине. Алгоритм поиска довольно сложный, желающие могут ознакомиться здесь
0xCC — Skip ROM. Выбирает все устройства на шине.
Дополнение от ploop: часто используется, если на шине есть одно единственное устройство, и передавать адрес нет смысла.
0xA5 — Resume. Выбирает устройство, выбранное в прошлый раз. Полезно при многократных обращениях к одному устройству.
ava
bsa | 15.05.2014, 10:30 #
smartchecker, обычно, в таких случаях делают протоколы такими, чтобы можно было легко распознать что пришло: команду или ответ.
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить