_fixer_
Пункты: 516
Регистрация: 01.10.2012
Пол: Мужчина
На пины SODIMM не выведено ни одного пина с функцией RTS ни для одного из USART. Неужели программно придётся делать?
Mark
Пункты: 3792
Регистрация: 08.02.2015
Здравствуйте !
Возникла необходимость использовать RS485 поверх uart. Как я понимаю лини ~RE-DE соединяются на линия RTS. Но линия RTS на SODIMM не выведена. Почитав
доку стало ясно, что можно использовать GPIO.
Код usart2: serial@f8020000 {
compatible = "atmel,at91sam9260-usart";
reg = <0xf8020000 0x100>;
interrupts = <14 IRQ_TYPE_LEVEL_HIGH 5>;
dmas = <&dma1 2 AT91_DMA_CFG_PER_ID(7)>,
<&dma1 2 (AT91_DMA_CFG_PER_ID(8) | AT91_DMA_CFG_FIFOCFG_ASAP)>;
dma-names = "tx", "rx";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_usart2>;
clocks = <&usart2_clk>;
clock-names = "usart";
rts-gpios = <&pioD 19 GPIO_ACTIVE_LOW>;
cts-gpios = <&pioD 22 GPIO_ACTIVE_LOW>;
rs485-rx-during-tx;
linux,rs485-enabled-at-boot-time;
status = "okay";
};
Если отправить данные через echo "test" > /dev/ttyS3 то на линии постоянно высокий уровень.
В тестовом приложении линия RTS также в высоком уровне. Есть подозрение, что что-то делаю не так.
Код //setup COM port
serial.setBaudRate(QSerialPort::Baud115200);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::NoFlowControl);
bool open = serial.open(QSerialPort::WriteOnly);
if(open == true) printf("Open OK\n");
qDebug() << serial.error();
qDebug() << serial.setRequestToSend(true);
serial.write("Hello\n");
serial.waitForBytesWritten(3000);
qDebug() << serial.setRequestToSend(false);
пробовал еще так:
Код //setup COM port
serial.setBaudRate(QSerialPort::Baud115200);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::HardwareControl);
bool open = serial.open(QSerialPort::WriteOnly);
if(open == true) printf("Open OK\n");
qDebug() << serial.error();
serial.write("Hello\n");
serial.waitForBytesWritten(3000);
qDebug() << serial.bytesToWrite();
Подскажите как правильно указать ногу GPIO что это RTS ?
Спасибо.
sasamy
Пункты: 83552
Регистрация: 14.08.2009
Ноги которые используете как RTS/CTS переключены на GPIO ? Сделайте по аналогии arch/arm/boot/dts/at91-sama5d3_sk_800x480.dts (название DTS зависит от того какой конфиг вы используете)
Цитата
pinctrl@fffff200 {
board {
pinctrl_mmc1_cd: mmc1_cd {
atmel,pins =
<AT91_PIOD 14 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;
};
pinctrl_usba_vbus: usba_vbus {
atmel,pins =
<AT91_PIOB 16 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>;
};
pinctrl_pck0_as_audio_mck: pck0_as_audio_mck {
atmel,pins =
<AT91_PIOD 30 AT91_PERIPH_B AT91_PINCTRL_NONE>;
};
};
};
Mark
Пункты: 3792
Регистрация: 08.02.2015
Цитата Ноги которые используете как RTS/CTS переключены на GPIO ? Сделайте по аналогии arch/arm/boot/dts/at91-sama5d3_sk_800x480.dts (название DTS зависит от того какой конфиг вы используете)
Цитата
pinctrl@fffff200 {
board {
pinctrl_mmc1_cd: mmc1_cd {
atmel,pins =
<AT91_PIOD 14 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;
};
pinctrl_usba_vbus: usba_vbus {
atmel,pins =
<AT91_PIOB 16 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>;
};
pinctrl_pck0_as_audio_mck: pck0_as_audio_mck {
atmel,pins =
<AT91_PIOD 30 AT91_PERIPH_B AT91_PINCTRL_NONE>;
};
};
};
Спасибо, разобрался )
Нужно было включить мультиплексинг ножек и прописать их.
Код usart2: serial@f8020000 {
compatible = "atmel,at91sam9260-usart";
reg = <0xf8020000 0x100>;
interrupts = <14 IRQ_TYPE_LEVEL_HIGH 5>;
dmas = <&dma1 2 AT91_DMA_CFG_PER_ID(7)>,
<&dma1 2 (AT91_DMA_CFG_PER_ID(8) | AT91_DMA_CFG_FIFOCFG_ASAP)>;
dma-names = "tx", "rx";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_usart2>, <&pinctrl_usart2_rts_cts>;
clocks = <&usart2_clk>;
clock-names = "usart";
rts-gpios = <&pioB 3 0>;
status = "okay";
};
Код pinctrl@fffff200 {
[...]
usart2 {
pinctrl_usart2: usart2-0 {
atmel,pins =
<AT91_PIOE 25 AT91_PERIPH_B AT91_PINCTRL_NONE
AT91_PIOE 26 AT91_PERIPH_B AT91_PINCTRL_PULL_UP>;
};
pinctrl_usart2_rts_cts: usart2_rts_cts-0 {
atmel,pins =
<AT91_PIOB 2 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH
AT91_PIOB 3 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>;
};
};
[...]
};