I2CCOM verlorene Bytes Kategorie: I²C-Bus (von Guido O. - 14.10.2009 18:19) | ||
| ||
Ich benutze die CC2 zur Steuerung meines Hauses und bin derzeit dabei ein Toucpanel (HMI) mit in dieses System zu Integrieren. Das HMI wird mit der CC2 über RS232 verbunden. Das verwendete Kommuniaktaionsprotokoll ist Modbus RTU. In diesem Protokoll werden variable Datenblocks gesendet, die mit 2 CRC Bytes enden. Zur Kommunikation verwende ich das I2CCOM Modul von CC-Tools. Dessen Interruptausgang liegt auf P1H3. Nun mein Problem: Der Modbus Master (das HMI) sendet kontinuierlich Statuspakete die ich in der CC2 verarbeite. Es wird ein Interrupt ausgelöst und anschlie�end lese ich den Datenblock aus. Zur Unterscheidung, welcher Interrupt durch den FIFO erzeugt wurde hatte ich vor, dass IIR Register auszulesen. Sobald ich aber nach Auftreten des Interrupts das IIR Register auslese bekomme ich im Empfangspuffer genau ein Byte weniger zurück, wodurch ich CRC Fehler bekomme. Hier beispielhaft der Code: loop{ wait (ports.get(11)==0); receiveCnt=i2ccom.receive(1,received,types.MAX_RTU_MESSAGE_LENGTH+1,types.FRAME_SEPARATOR_TIME); } In diesem Fall erhalte ich z.B. 17 Byte für eine Modbus Frame. loop{ wait (ports.get(11)==0); iir = i2ccom.getIIR(1); receiveCnt=i2ccom.receive(1,received,types.MAX_RTU_MESSAGE_LENGTH+1,types.FRAME_SEPARATOR_TIME); } Verwende ich diesen Code bekomme ich für den gleichen Frame noch 16 Byte. Woduch in der weitern Verarbeitung CRC Fehler entstehen. Hat jemand eine Idee, was ich falsch mache? Viele Grü�e Guido | ||
Antwort schreiben Antworten: Re: I2CCOM verlorene Bytes (von Guido O. - 30.10.2009 18:57) |