I'm using the Maxim DS18s20 temperature sensor. It calculates CRC using a CRC8 algorithm that involves either table lookup or bit shifting. I haven't seen any example in C#. Any pointers?
2 replies to this topic
#1
Posted 30 January 2014 - 07:03 PM
#2
Posted 31 January 2014 - 04:44 AM
Biggest fault of Netduino? It runs by electricity.
#3
Posted 13 February 2014 - 12:15 AM
hi
i read some topic from this site. and combine its for me. And i found excel for crc calculating and i convert it to c#. Excel is not perfect but i fix it.
[font="'courier new', courier, monospace;"] /// <summary><para></para>[/font]
[font="'courier new', courier, monospace;"] /// http://www.maximinte...dex.mvp/id/4600[/font]
[font="'courier new', courier, monospace;"] /// </summary>[/font]
[font="'courier new', courier, monospace;"] /// <param name="pScratchpadBytes">8 byte Scratchpad value</param>[/font]
[font="'courier new', courier, monospace;"] /// <param name="pCRCByte">1 byte CRC (Cyclic Redundancy Check)</param>[/font]
[font="'courier new', courier, monospace;"] private static Boolean ScratchpadCRC(byte[] pScratchpadBytes, byte pCRCByte)[/font]
[font="'courier new', courier, monospace;"] {[/font]
[font="'courier new', courier, monospace;"] string xBinarySequence = "";[/font]
[font="'courier new', courier, monospace;"] for (int xIndex = 0; xIndex < 8; xIndex++)[/font]
[font="'courier new', courier, monospace;"] xBinarySequence += AsciiWhite.Core.DecimalToBinary(pScratchpadBytes[7 - xIndex]);[/font]
[font="'courier new', courier, monospace;"] var xReversedBinaryArray = new byte[64];[/font]
[font="'courier new', courier, monospace;"] for (int xIndex = 0; xIndex < 64; xIndex++)[/font]
[font="'courier new', courier, monospace;"] xReversedBinaryArray[63 - xIndex] = Convert.ToByte(xBinarySequence[xIndex].ToString());[/font]
[font="'courier new', courier, monospace;"] // Calculate CRC[/font]
[font="'courier new', courier, monospace;"] int tmpCRC = 0;[/font]
[font="'courier new', courier, monospace;"] int[] xCRCBits = new int[8];[/font]
[font="'courier new', courier, monospace;"] for (int xIndex = 0; xIndex < 64; xIndex++)[/font]
[font="'courier new', courier, monospace;"] {[/font]
[font="'courier new', courier, monospace;"] tmpCRC = xCRCBits[0] ^ xReversedBinaryArray[xIndex];[/font]
[font="'courier new', courier, monospace;"] xCRCBits[0] = xCRCBits[1];[/font]
[font="'courier new', courier, monospace;"] xCRCBits[1] = xCRCBits[2];[/font]
[font="'courier new', courier, monospace;"] xCRCBits[2] = xCRCBits[3] ^ tmpCRC;[/font]
[font="'courier new', courier, monospace;"] xCRCBits[3] = xCRCBits[4] ^ tmpCRC;[/font]
[font="'courier new', courier, monospace;"] xCRCBits[4] = xCRCBits[5];[/font]
[font="'courier new', courier, monospace;"] xCRCBits[5] = xCRCBits[6];[/font]
[font="'courier new', courier, monospace;"] xCRCBits[6] = xCRCBits[7];[/font]
[font="'courier new', courier, monospace;"] xCRCBits[7] = tmpCRC;[/font]
[font="'courier new', courier, monospace;"] }[/font]
[font="'courier new', courier, monospace;"] string tmpCRCBinary = "";[/font]
[font="'courier new', courier, monospace;"] for (int xIndex = 0; xIndex < 8; xIndex++)[/font]
[font="'courier new', courier, monospace;"] tmpCRCBinary += xCRCBits[7 - xIndex].ToString();[/font]
[font="'courier new', courier, monospace;"] int xDecimalCRC = AsciiWhite.Core.BinaryToDecimal(tmpCRCBinary);[/font]
[font="'courier new', courier, monospace;"] return (xDecimalCRC == pCRCByte);[/font]
[font="'courier new', courier, monospace;"] }[/font]
[font="'courier new', courier, monospace;"] /// <summary><para></para>[/font]
[font="'courier new', courier, monospace;"] /// http://www.maximinte...dex.mvp/id/4600[/font]
[font="'courier new', courier, monospace;"] /// </summary>[/font]
[font="'courier new', courier, monospace;"] /// <param name="pFamilyCode">1 byte FamilyCode (0x28)</param>[/font]
[font="'courier new', courier, monospace;"] /// <param name="pROMBytes">6 byte UniqueID</param>[/font]
[font="'courier new', courier, monospace;"] /// <param name="pCRCByte">1 byte CRC (Cyclic Redundancy Check)</param>[/font]
[font="'courier new', courier, monospace;"] private static Boolean ROMCRC(byte pFamilyCode, byte[] pROMBytes, byte pCRCByte)[/font]
[font="'courier new', courier, monospace;"] {[/font]
[font="'courier new', courier, monospace;"] string xBinarySequence = "";[/font]
[font="'courier new', courier, monospace;"] for (int xIndex = 0; xIndex < 6; xIndex++)[/font]
[font="'courier new', courier, monospace;"] xBinarySequence += AsciiWhite.Core.DecimalToBinary(pROMBytes[5 - xIndex]);[/font]
[font="'courier new', courier, monospace;"] xBinarySequence += AsciiWhite.Core.DecimalToBinary(pFamilyCode);[/font]
[font="'courier new', courier, monospace;"] var xReversedBinaryArray = new byte[56];[/font]
[font="'courier new', courier, monospace;"] for (int xIndex = 0; xIndex < 56; xIndex++)[/font]
[font="'courier new', courier, monospace;"] xReversedBinaryArray[55 - xIndex] = Convert.ToByte(xBinarySequence[xIndex].ToString());[/font]
[font="'courier new', courier, monospace;"] // Calculate CRC[/font]
[font="'courier new', courier, monospace;"] int tmpCRC = 0;[/font]
[font="'courier new', courier, monospace;"] int[] xCRCBits = new int[8];[/font]
[font="'courier new', courier, monospace;"] for (int xIndex = 0; xIndex < 56; xIndex++)[/font]
[font="'courier new', courier, monospace;"] {[/font]
[font="'courier new', courier, monospace;"] tmpCRC = xCRCBits[0] ^ xReversedBinaryArray[xIndex];[/font]
[font="'courier new', courier, monospace;"] xCRCBits[0] = xCRCBits[1];[/font]
[font="'courier new', courier, monospace;"] xCRCBits[1] = xCRCBits[2];[/font]
[font="'courier new', courier, monospace;"] xCRCBits[2] = xCRCBits[3] ^ tmpCRC;[/font]
[font="'courier new', courier, monospace;"] xCRCBits[3] = xCRCBits[4] ^ tmpCRC;[/font]
[font="'courier new', courier, monospace;"] xCRCBits[4] = xCRCBits[5];[/font]
[font="'courier new', courier, monospace;"] xCRCBits[5] = xCRCBits[6];[/font]
[font="'courier new', courier, monospace;"] xCRCBits[6] = xCRCBits[7];[/font]
[font="'courier new', courier, monospace;"] xCRCBits[7] = tmpCRC;[/font]
[font="'courier new', courier, monospace;"] }[/font]
[font="'courier new', courier, monospace;"] string tmpCRCBinary = "";[/font]
[font="'courier new', courier, monospace;"] for (int xIndex = 0; xIndex < 8; xIndex++)[/font]
[font="'courier new', courier, monospace;"] tmpCRCBinary += xCRCBits[7 - xIndex].ToString();[/font]
[font="'courier new', courier, monospace;"] int xDecimalCRC = AsciiWhite.Core.BinaryToDecimal(tmpCRCBinary);[/font]
[font="'courier new', courier, monospace;"] return (xDecimalCRC == pCRCByte);[/font]
[font="'courier new', courier, monospace;"] }[/font]
Attached Files
0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users