CRC CCITT berechnen

Hallo zusammen,
für die Kommunikation in Richtung Wechselrichter benötige ich eine CRC Berechnung. Leider schlägt das fehl :frowning:

Der Frame auf dem RS485 Bus hat folgendes Format:
02 3a 00 20 20 20 20 20 c9 59, wobei die letzten beiden Bytes (c9 59) die CRC Checksumme über die vorderen 8 Bytes bilden.

Ich habe versucht einen Perl Code in PHP zu übernehmen. Der Perl Code der CRC Funktion sieht so aus:

sub crc {
	my $str = shift;
	my $crc = 0xffff;
	foreach my $chr (unpack 'C*', $str) {
		for (my $i = 0, my $data =int 0xff & $chr; $i < 8; $i++, $data >>= 1) {
			$crc = ($crc & 0x0001) ^ ($data & 0x0001) ? ($crc >> 1) ^ 0x8408 : $crc >> 1;
		}
	}
	return 0xffff & ~$crc;
}

Folgenden PHP Code habe ich daraus gebastelt:

function crc_ccitt ($str){
   $crc = 0xffff;
   $str = unpack("C*",$str);
   $F=0;
	foreach ($str as $chr){
 //   for (my $i = 0, my $data =int 0xff & $chr; $i < 8; $i++, $data >>= 1) {
	 for ($i = 0, $data =$chr&0xff; $i < 8; $i++, $data >>= 1) {
			$crc = ($crc & 0x0001) ^ ($data & 0x0001) ? ($crc >> 1) ^ 0x8408 : $crc >> 1;
		}
	}
	return 0xffff & ~$crc;
}

Nach stundenlangem Trial & Error komme ich nicht weiter.
Kann mir jemand sagen, wie ich mittels PHP aus dem String:
02 3a 00 20 20 20 20 20 die Checksumme c9 59 bekomme?

Besten Dank und Gruß,
Kai


EDIT:
Thema hat sich erledigt, die Antwort findet sich im Script von elektroniktommy in folgendem Thread: