Wenn ich das richtig gesehen habe, willst du an UART2 SNAP verwenden, das mach ich auch und es funktioniert bei mir.
Hier meine SNAP sende/empfangsroutine:
Code:
   ' Send packet including the preamble and SYNC byte
   Printbin #2 , Preamble ; Sbyte ; Hdb2 ; Hdb1 ; Dab1 ; Sab1
   Printbin #2 , Db8 ; Db7 ; Db6 ; Db5 ; Db4 ; Db3 ; Db2 ; Db1
   Printbin #2 , Crc2 ; Crc1

Do
   Received = Waitkey(#2)
   If Received = 0 Then
      Slave = ""
      Exit Function
   End If
   If Received = Sbyte_x Then
      Inputbin #2 , Hdb2 , Hdb1 , Dab1 , Sab1 , Db8 , Db7 , Db6 , Db5 , Db4 , Db3 , Db2 , Db1 , Crc2 , Crc1       ' Get packet in binary mode
      Goto Packet
   Else
      Preamble = Received
   End If
Loop
Damit das Programm nicht ewig wartet, falls ein slave nicht da ist setzte ich einen timout.
Code:
$timeout = 2000000
Bei deiner Konfiguration von den UARTs bin ich mir nicht sicher.... Für mich wäre logisch zuerst die config zu machen und anschliesend den Port zu öffnen.
Bei mir schaut das so aus:
Code:
$baud1 = 9600
   Config Com2 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0       ' MUST MATCH THE SLAVE

   Config Print1 = Portd.4 , Mode = Set                     ' use portb.1 for the direction
   Rs485dir Alias Portd.4

   Config Rs485dir = Output
   Rs485dir = 0                                             ' go to receive mode
   Open "com2:" For Binary As #2
Das ganze ist OHNE Buffer. Die Sachen für RS485 muss man in deinem Fall natürlich weglassen. Wobei ich dir für ein System mit mehreren Slaves RS-485 natürlich nur empfehlen kann.

Achja, beim Slave sollte zwischen Empfangen und Senden eine gewisse Zeit gewartet werden. (z.B. Umschalten der Richtung bei RS-485) Schaden kanns nicht. Ich habe vor dem Senden (Slave) eine Wartezeit von 50ms.

Hier noch die Slave Empfangsroutine MIT Buffer.

Code:
Do
   Idle
   While _rs_head_ptr0 <> _rs_tail_ptr0                     'check the status of the RS232 register
      Received = Inkey()
      If Received = Sbyte Then
         Inputbin Hdb2 , Hdb1 , Dab1 , Sab1 , Db8 , Db7 , Db6 , Db5 , Db4 , Db3 , Db2 , Db1 , Crc2 , Crc1       ' Get packet in binary mode
         Gosub Packet
      Else
         Preamble = Received
      End If
   Wend
Loop
Gruß Stefan