Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hardware-Handshake (RTS) do not work #2710

Open
Bernd-Wissler-KBR opened this issue Sep 28, 2023 · 0 comments
Open

Hardware-Handshake (RTS) do not work #2710

Bernd-Wissler-KBR opened this issue Sep 28, 2023 · 0 comments

Comments

@Bernd-Wissler-KBR
Copy link

Bernd-Wissler-KBR commented Sep 28, 2023

SerialPort Version

12.0.0

Node Version

v20.7.0

Electron Version

No response

Platform

Linux pkcm4test 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr 3 17:24:16 BST 2023 aarch64 GNU/Linux
=> Raspberry CM4

Architecture

ARM V8

Hardware or chipset of serialport

Raspberry CM4

What steps will reproduce the bug?

const { SerialPort  } = require('serialport')

const port = new SerialPort({ 
	path: '/dev/ttyAMA1', 
	baudRate: 38400, 
	autoOpen: true,
	parity: 'even',
	dataBits: 8,
	stopBits: 1,
	rtscts:true
})

port.open(function (err) {
	if (err) {
		return console.log('Error opening port: ', err.message)
	}
	console.log('Port opened! Starting timer')

	setInterval(()=>{
		console.log('Send HELLO')
		port.write("HELLO",function(err){
			if (err) {
				return console.log('Error on write: ', err.message)
			}			
			port.drain(function(){
				console.log('- port data written')
			})
		});
		
	},1000)
})

What happens?

The data is sent, but the RTS signal is not switched!
We tested it with an Oszilloscope!

The RTS signal could be switched back and forth with the manual command: port.set({rts:true/false}).
But we can't implement this with nodeJS because the timing would then become unacceptably bad

What should have happened?

I've already seen in the documentation that you probably haven't tested this board (V8) but it should probably work, but maybe you could still give me a tip on how to get it done.

Thank you and best regards to your Team

Additional information

With the following python script the RTS hardware handshake worked as desired!

import serial
import serial.rs485
import time

print("Test UART-Interface")
time.sleep(1)
print("Select Port: \n 0: /dev/ttyAMA0 \n 1: /dev/ttyAMA1 \n 2: /dev/ttyAMA2 \n 3: /dev/ttyAMA3 \n 4: /dev/ttyAMA4 \n 5: /dev/ttyAMA5")
iPortUserInput = int(input("Number: "))

if iPortUserInput == 0:
    Port = "/dev/ttyAMA0"
elif iPortUserInput == 1:
    Port = "/dev/ttyAMA1"
elif iPortUserInput == 2:
    Port = "/dev/ttyAMA2"
elif iPortUserInput == 3:
    Port = "/dev/ttyAMA3"
elif iPortUserInput == 4:
    Port = "/dev/ttyAMA4"
elif iPortUserInput == 5:
    Port = "/dev/ttyAMA5"
else:
    quit()

# Open UART
uart = serial.Serial(
    port=Port,
    baudrate=38400,
    bytesize=serial.EIGHTBITS,
    parity=serial.PARITY_EVEN,
    stopbits=serial.STOPBITS_ONE,
    rtscts=True,
    write_timeout=5,
    timeout=1
)
uart.rs485_mode = serial.rs485.RS485Settings(
    rts_level_for_tx=True,
    rts_level_for_rx=False,
    loopback=False,
    delay_before_tx=0.0,
    delay_before_rx=0.0
)
#
# Pint UART Status
print(uart)
time.sleep(3)
#
# Init Counter
iCounter = 0
#
# Test-data
a_byTxData = bytearray([1, 2, 5, 11, 22, 33, 44, 55, 99, 121, 122, 123, 128, 129, 190, 191, 192, 200, 205, 210, 215, 222, 234, 250, 254])
#
# 100 times send loop
while iCounter < 100:
    iCounter = iCounter + 1
    print(iCounter)
    uart.write(a_byTxData)
    # print status
    print(uart.write)
    time.sleep(1)
#
# Close
uart.close()

No response

@Bernd-Wissler-KBR Bernd-Wissler-KBR changed the title Hardware-Handshake (RTS) do not work on Raspberry CM4 Hardware-Handshake (RTS) do not work Oct 25, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

1 participant