User Tools

Site Tools


projects:rfid

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
projects:rfid [2013/03/17 23:17]
mkucia
projects:rfid [2013/03/18 10:21] (current)
mkucia
Line 1: Line 1:
 +====== RFID booster pack ======
  
 +{{:​projects:​rfid_rockets.png?​nolink |}}
 +The aim of this project is to design and build a breakout board for TI RFID transceiver chip TRF7970a compatible with Stellaris Launchpad.
 +
 +\\
 +\\
 +TRF7970a supports following radio standards:
 +
 +|  ISO14443A/​B ​ ||||  ISO15693 \\ ISO18000-3 \\ (Mode 1)  |  FeliCa ​ |  NFC  |
 +|  106 [kbps] ​ |  212 [kbps] ​ |  424 [kbps] ​ |  848 [kbps] ​ | ::: |  213 [kbps] \\ 424 [kbps] ​ |  Type 1-4  |
 +
 +Additional project considerations:​
 +  * Simple layout
 +  * Low cost (2 layer board)
 +  * Focus on parallel interface and ISO 15693
 +
 +
 +<WRAP center important >
 +This is a research project without deadline. I have created the board to explore RFID technology, NOT develop a full product. Do not use for commercial applications. Please visit GitHub for most recent software. ​
 +
 +Currently supported technology: ​
 +  * ISO15693 single slot anticollision and block read.
 +</​WRAP>​
 +
 +{{:​projects:​rfid_image.jpg?​nolink|}}
 +===== Schematics =====
 +
 +  * {{:​projects:​nfc_boosterpack.zip|}}
 +  * {{:​projects:​rfid_booster_pack.pdf|Board layout PDF}}
 +  * {{:​projects:​frid_booster_pack_-_schematic.pdf|Schematic PDF}}
 +===== Hardware =====
 +
 +  * Operating voltage 3.3 [V] (Remember to set __Chip Status Control Register__)
 +  * Device was designed for use with Launchpad'​s emulator serial connection. Please do not use DEVICE USB. Pin PD7 is used to sense DEVICE USB bus voltage. If you need to use DEVICE USB please remove resistor R15.
 +  * Clock output is unused as Stellaris Launchpad does have it's own clocking source.
 +  * TRF7970a EN2 is permanently pulled high (sleep mode)
 +
 +==== RFID Booster pinout ====
 +
 +<WRAP column 45%>
 +^ Left header ^^^^
 +^  Desc  ^   Pin A  ^  Pin B   ​^ ​ Desc  ^ 
 +| 3V3 VCC|  1  |  1  | |
 +| ASK/​OOK| ​ 2  |  2  | GND |
 +| |  3  |  3  | |
 +| |  4  |  4  | |
 +| IRQ |  5  |  5  | |
 +| |  6  |  6  | |
 +| |  7  |  7  | |
 +| Led1 |  8  |  8  | |
 +| Led2 |  9  |  9  | |
 +| |  10  |  10  | |
 +</​WRAP>​
 +
 +
 +<WRAP column 45%>
 +^  Right header ^^^^
 +^  Desc  ^   Pin A  ^  Pin B   ​^ ​ Desc  ^ 
 +| EN1 |  1  |  1  | GND |
 +| T1|  2  |  2  | MOD |
 +| T2|  3  |  3  | DATA_CLK |
 +| T3|  4  |  4  | |
 +| T4|  5  |  5  | |
 +| T5|  6  |  6  | |
 +| T6|  7  |  7  | |
 +| T7|  8  |  8  | |
 +| T8|  9  |  9  | |
 +| |  10  |  10  | |
 +</​WRAP>​
 +
 +<WRAP center important >
 +Please take note that naming is a bit misleading. T8 is the least significant bit and T1 most significant bit.
 +</​WRAP>​
 +
 +
 +
 +==== Pin MUX ====
 +
 +^ BP Pin ^ MCU Pin ^ LP Pin | **Parallel** | **SPI SS** | **SPI** ^ LP Pin 2 ^
 +| ASK/OOK | PB5 | A2 |  -  |  -  |  -  | 
 +| IRQ | PE4 | A5 |  Interrupt request ​ |||
 +| LED1 | PA5 | A8 |  User LED 1  |||
 +| LED2 | PA6 | A9 |  User LED 2  |||
 +| EN1 | PF2 | D1 |  Chip enable ​ |||
 +| MOD | PB2 | B2 |  -  |  -  |  -  |
 +| DATA<​sub>​CLK</​sub>​ | PE0 | A3 |  CLK  |||   C3 (PD0)  |
 +| T1 | PF3 | D2 |  I/O 7  |  MOSI   ​|| ​ C6 (PD3)  |
 +| T2 | PB3 | D3 |  I/O 6  |  MISO   || C5 (PD2)  |
 +| T3 | PC4 | D4 |  I/O 5  |  -  |  -  |
 +| T4 | PC5 | D5 |  I/O 4  |  SS  |  -   ​| ​ C4 (PD1)  |
 +| T5 | PC6 | D6 |  I/O 3  |  -  |  -  | 
 +| T6 | PC7 | D7 |  I/O 2  |  V<​sub>​DD</​sub> ​ |  V<​sub>​DD</​sub> ​ |
 +| T7 | PD6 | D8 |  I/O 1  |  V<​sub>​DD</​sub> ​ |  V<​sub>​SS</​sub> ​ |
 +| T8 | PD7 | D9 |  I/O 0  |  V<​sub>​SS</​sub> ​ |  V<​sub>​SS</​sub> ​ |
 +|=======|=======|=======|=======|=======|=======|=======|
 +
 +Additionally:​
 +^ MCU Pin ^ Function ^
 +| PA0 | UART RX |
 +| PA1 | UART TX |
 +
 +Current revision of the board requires SPI and interface select pins to be connected externally. Code uses SSI1 peripheral for SPI control.
 +
 +BP - boosterpack;​ LP - launchpad
 +
 +===== Software =====
 +All necessary software is located in the MCU. The PC communicates with the kit trough USB UART.
 +
 +<​html>​
 +<?xml version="​1.0"​ encoding="​UTF-8"​ standalone="​no"?>​ <!-- Created with Inkscape (http://​www.inkscape.org/​) --> ​ <​svg ​   xmlns:​dc="​http://​purl.org/​dc/​elements/​1.1/" ​   xmlns:​cc="​http://​creativecommons.org/​ns#" ​   xmlns:​rdf="​http://​www.w3.org/​1999/​02/​22-rdf-syntax-ns#" ​   xmlns:​svg="​http://​www.w3.org/​2000/​svg" ​   xmlns="​http://​www.w3.org/​2000/​svg" ​   version="​1.1" ​   width="​506.43219" ​   height="​127.37884" ​   id="​svg2"> ​  <​defs ​     id="​defs4"​ />   <​metadata ​     id="​metadata7"> ​    <​rdf:​RDF> ​      <​cc:​Work ​         rdf:​about=""> ​        <​dc:​format>​image/​svg+xml</​dc:​format> ​        <​dc:​type ​           rdf:​resource="​http://​purl.org/​dc/​dcmitype/​StillImage"​ />         <​dc:​title></​dc:​title> ​      </​cc:​Work> ​    </​rdf:​RDF> ​  </​metadata> ​  <​g ​     transform="​translate(-98.0741,​-220.09631)" ​     id="​layer3"> ​    <​path ​       d="m 174.6361,​254.96106 423.98018,​0.49999 0.0146,​-29.48407 -494.68172,​-0.26133 0.24999,​57.75453 L 174.88611,​283.68651 Z" ​       id="​path4032" ​       style="​fill:#​5fb3ff;​fill-opacity:​0.18274111;​stroke:​none"​ />     <​rect ​       width="​494.87436" ​       height="​28.95397" ​       x="​103.82411" ​       y="​312.77115" ​       id="​rect4038" ​       style="​fill:#​71e25f;​fill-opacity:​0.18274111;​stroke:​none"​ />     <​rect ​       width="​494.88919" ​       height="​27.90951" ​       x="​103.82414" ​       y="​283.86218" ​       id="​rect4040" ​       style="​fill:#​e28f5f;​fill-opacity:​0.18274111;​stroke:​none"​ />     <​rect ​       width="​423.73016" ​       height="​28.22546" ​       x="​174.88611" ​       y="​255.46104" ​       id="​rect4042" ​       style="​fill:#​e2d05f;​fill-opacity:​0.19289341;​stroke:​none"​ />   </​g> ​  <​g ​     transform="​translate(-98.0741,​-220.09631)" ​     id="​layer1"> ​    <​path ​       d="m 174.76111,​283.81717 -70.93697,​0.045 m -1e-5,​28.90901 3e-5,​-86.92487 494.93176,0 -0.0574,​115.87888 m 2.3e-4,​-57.87622 -423.93764,​-0.0318 0,-28.98678 423.98018,​0.49999 m -0.0428,​86.39477 -494.87439,​-4e-5 0,-28.95393 494.88922,​-0.9995" ​       id="​path3976" ​       style="​fill:​none;​stroke:#​4d4d4d;​stroke-width:​1.5;​stroke-linecap:​butt;​stroke-linejoin:​miter;​stroke-miterlimit:​9.19999981;​stroke-opacity:​1;​stroke-dasharray:​none"​ />   </​g> ​  <​g ​     transform="​translate(-98.0741,​-220.09631)" ​     id="​layer2" ​     style="​display:​inline"> ​    <​text ​       x="​559.69672" ​       y="​332.47516" ​       id="​text3848" ​       xml:​space="​preserve" ​       style="​font-size:​15px;​font-style:​normal;​font-weight:​normal;​line-height:​125%;​letter-spacing:​0px;​word-spacing:​0px;​fill:#​000000;​fill-opacity:​1;​stroke:​none;​font-family:​Verdana;​-inkscape-font-specification:​Verdana"><​tspan ​         x="​559.69672" ​         y="​332.47516" ​         id="​tspan3850">​HAL</​tspan></​text> ​    <​text ​       x="​492.07953" ​       y="​302.44348" ​       id="​text3852" ​       xml:​space="​preserve" ​       style="​font-size:​15px;​font-style:​normal;​font-weight:​normal;​line-height:​125%;​letter-spacing:​0px;​word-spacing:​0px;​fill:#​000000;​fill-opacity:​1;​stroke:​none;​font-family:​Verdana;​-inkscape-font-specification:​Verdana"><​tspan ​         x="​492.07953" ​         y="​302.44348" ​         id="​tspan3854">​Chip Support</​tspan></​text> ​    <​text ​       x="​425.81" ​       y="​273.74121" ​       id="​text3856" ​       xml:​space="​preserve" ​       style="​font-size:​15px;​font-style:​normal;​font-weight:​normal;​line-height:​125%;​letter-spacing:​0px;​word-spacing:​0px;​fill:#​000000;​fill-opacity:​1;​stroke:​none;​font-family:​Verdana;​-inkscape-font-specification:​Verdana"><​tspan ​         x="​425.81" ​         y="​273.74121" ​         id="​tspan3858">​RF Standards Support</​tspan></​text> ​    <​text ​       x="​484.10345" ​       y="​246.4928" ​       id="​text3860" ​       xml:​space="​preserve" ​       style="​font-size:​15px;​font-style:​normal;​font-weight:​normal;​line-height:​125%;​letter-spacing:​0px;​word-spacing:​0px;​fill:#​000000;​fill-opacity:​1;​stroke:​none;​font-family:​Verdana;​-inkscape-font-specification:​Verdana"><​tspan ​         x="​484.10345" ​         y="​246.4928" ​         id="​tspan3862">​User Interface</​tspan></​text> ​    <​g ​       transform="​translate(-4,​0)" ​       id="​g4014"> ​      <​text ​         x="​187.2554" ​         y="​274.6785" ​         id="​text3880" ​         xml:​space="​preserve" ​         style="​font-size:​15px;​font-style:​normal;​font-weight:​normal;​line-height:​125%;​letter-spacing:​0px;​word-spacing:​0px;​fill:#​000000;​fill-opacity:​1;​stroke:​none;​font-family:​Verdana;​-inkscape-font-specification:​Verdana"><​tspan ​           x="​187.2554" ​           y="​274.6785" ​           id="​tspan3882">​ISO15693</​tspan></​text> ​      <​rect ​         width="​84.5" ​         height="​21" ​         ry="​5" ​         x="​183.00711" ​         y="​258.72562" ​         id="​rect3994" ​         style="​fill:​none;​stroke:#​4d4d4d;​stroke-width:​1.5;​stroke-linecap:​round;​stroke-linejoin:​round;​stroke-miterlimit:​9.19999981;​stroke-opacity:​1;​stroke-dasharray:​none"​ />     </​g> ​    <​g ​       transform="​translate(-2,​-0.55282593)" ​       id="​g4019"> ​      <​text ​         x="​273.11551" ​         y="​275.23132" ​         id="​text3884" ​         xml:​space="​preserve" ​         style="​font-size:​15px;​font-style:​normal;​font-weight:​normal;​line-height:​125%;​letter-spacing:​0px;​word-spacing:​0px;​fill:#​000000;​fill-opacity:​1;​stroke:​none;​font-family:​Verdana;​-inkscape-font-specification:​Verdana"><​tspan ​           x="​273.11551" ​           y="​275.23132" ​           id="​tspan3886">​NFC</​tspan></​text> ​      <​rect ​         width="​39" ​         height="​21" ​         ry="​5" ​         x="​269.20877" ​         y="​259.27844" ​         id="​rect3996" ​         style="​fill:​none;​stroke:#​4d4d4d;​stroke-width:​1.5;​stroke-linecap:​round;​stroke-linejoin:​round;​stroke-miterlimit:​9.19999981;​stroke-opacity:​1;​stroke-dasharray:​none"​ />     </​g> ​    <​g ​       transform="​translate(-4.7625631,​0.36343384)" ​       id="​g4024"> ​      <​text ​         x="​319.11963" ​         y="​274.8508" ​         id="​text3888" ​         xml:​space="​preserve" ​         style="​font-size:​15px;​font-style:​normal;​font-weight:​normal;​line-height:​125%;​letter-spacing:​0px;​word-spacing:​0px;​fill:#​000000;​fill-opacity:​1;​stroke:​none;​font-family:​Verdana;​-inkscape-font-specification:​Verdana"><​tspan ​           x="​319.11963" ​           y="​274.8508" ​           id="​tspan3890">​...</​tspan></​text> ​      <​rect ​         width="​25" ​         height="​21" ​         ry="​5" ​         x="​314.79712" ​         y="​258.36218" ​         id="​rect3998" ​         style="​fill:​none;​stroke:#​4d4d4d;​stroke-width:​1.5;​stroke-linecap:​round;​stroke-linejoin:​round;​stroke-miterlimit:​9.19999981;​stroke-opacity:​1;​stroke-dasharray:​none"​ />     </​g> ​    <​g ​       transform="​translate(12.676777,​1.6161165)" ​       id="​g4004"> ​      <​text ​         x="​116.11966" ​         y="​331.26276" ​         id="​text3872" ​         xml:​space="​preserve" ​         style="​font-size:​15px;​font-style:​normal;​font-weight:​normal;​line-height:​125%;​letter-spacing:​0px;​word-spacing:​0px;​fill:#​000000;​fill-opacity:​1;​stroke:​none;​font-family:​Verdana;​-inkscape-font-specification:​Verdana"><​tspan ​           x="​116.11966" ​           y="​331.26276" ​           id="​tspan3874">​Serial</​tspan></​text> ​      <​rect ​         width="​84.5" ​         height="​21" ​         ry="​5" ​         x="​95.084259" ​         y="​315.17804" ​         id="​rect4000" ​         style="​fill:​none;​stroke:#​4d4d4d;​stroke-width:​1.5;​stroke-linecap:​round;​stroke-linejoin:​round;​stroke-miterlimit:​9.19999981;​stroke-opacity:​1;​stroke-dasharray:​none"​ />     </​g> ​    <​g ​       transform="​translate(-14.030329,​0.61611652)" ​       id="​g4009"> ​      <​text ​         x="​225.74295" ​         y="​332.26276" ​         id="​text3876" ​         xml:​space="​preserve" ​         style="​font-size:​15px;​font-style:​normal;​font-weight:​normal;​line-height:​125%;​letter-spacing:​0px;​word-spacing:​0px;​fill:#​000000;​fill-opacity:​1;​stroke:​none;​font-family:​Verdana;​-inkscape-font-specification:​Verdana"><​tspan ​           x="​225.74295" ​           y="​332.26276" ​           id="​tspan3878">​Parallel</​tspan></​text> ​      <​rect ​         width="​84.5" ​         height="​21" ​         ry="​5" ​         x="​210.5889" ​         y="​316.17804" ​         id="​rect4002" ​         style="​fill:​none;​stroke:#​4d4d4d;​stroke-width:​1.5;​stroke-linecap:​round;​stroke-linejoin:​round;​stroke-miterlimit:​9.19999981;​stroke-opacity:​1;​stroke-dasharray:​none"​ />     </​g> ​  </​g>​ </​svg> ​
 +</​html>​
 +
 +Software stack consists of 4 layers:
 +  * Hardware abstraction layer
 +  * Chip support layer 
 +  * RF protocol layer 
 +  * User layer
 +
 + * Project [[https://​github.com/​MaciejKucia/​BP_RFID|github repository]]
 +
 +===== Booster pack in action =====
 +
 +The sample application is a simple playback control device. Stellaris Launchpad acts as HID USB device sending "​Consumer"​ commands (see USB documentation) to host.
 +Resistor R15 was removed therefore device can be powered without debug USB connection. ​
 +
 +Three different tags have different values written in memory. Device is looking for tags in range around every second. If it finds tag, memory content readout is performed. ​
 +One byte defines tag function (play pause, next track, previous track). If tag remains in the field for more than one read cycle, it is ignored. To use tag function second time in a row just move tag out of range, so device can detect "no tag" condition. After that tag will not be ignored.
 +
 +This will also work with Linux and Android!
 +
 +{{http://​www.youtube.com/​v/​dAkR1WXPeXE?​.swf?​}}
 +
 +  * {{:​projects:​rfid_control_example.zip|Zipped CCS project}}
 +
 +===== Next board revision notes =====
 +
 +  * SPI only? SS switch?
 +  * SPI Buffer for tristate line?
 +  * EN2 pull down for poweroff
 +  * Fully compatible with small Launchpad
 +  * Bigger antenna to fit components "​inside"​
 +
 +
 +===== References =====
 +  * [[http://​processors.wiki.ti.com/​index.php/​BYOB|TI processors.wiki Build Your Own Boosterpack]]
 +  * [[http://​processors.wiki.ti.com/​index.php/​BoosterPack_Design_Guide|TI processors.wiki BoosterPack Design Guide]]
 +  * [[http://​www.ti.com/​product/​trf7970a|TI TRF7970a products page]]
 +  * [[http://​www.ti.com/​lit/​an/​sloa135/​sloa135.pdf|Antenna Matching for the TRF7960 RFID Reader]]
 +  * [[http://​www.ti.com/​lit/​ug/​slou297/​slou297.pdf|TRF7960TB HF RFID Reader Module User's Guide]]
 +  * [[http://​www.ti.com/​lit/​ug/​slou321a/​slou321a.pdf|TRF7970A Evaluation Module (EVM)]]
 +
 +  * [[http://​www.ti.com/​lit/​an/​sloa159/​sloa159.pdf|TRF7970A Firmware Design Hints]]
 +  * [[http://​www.ti.com/​lit/​an/​sloa157/​sloa157.pdf|TRF7970A Reference Firmware Description]]
 +
 +  * [[http://​www.ti.com/​litv/​zip/​sloc250|TI TRF7970A C Code Samples]]
 +  * [[http://​www.ti.com/​lit/​an/​sloa138/​sloa138.pdf|Implementation of the ISO15693 Protocol in the TI TRF796x]]
 +==== NFC ====
 +  * http://​apps4android.org/​nfc-specifications/​NFCForum-TS-Type-4-Tag_2.0.pdf
 +  * http://​apps4android.org/​nfc-specifications/​NFCForum-TS-Type-3-Tag_1.1.pdf
 +  * http://​www.ecma-international.org/​publications/​standards/​Ecma-340.htm
 +  * http://​www.adafruit.com/​datasheets/​Introduction_to_NFC_v1_0_en.pdf
 +  * http://​www.developer.nokia.com/​Community/​Wiki/​Understanding_NFC_Data_Exchange_Format_(NDEF)_messages
 +  * http://​www.nfc-forum.org/​specs/​spec_list/#​tagtypes
 +==== ISO 15693 ====
 +  * [[http://​www.ti.com/​lit/​an/​sloa141/​sloa141.pdf|TRF7960 Evaluation Module ISO 15693 Host Commands]]
 +  * [[http://​www.waazaa.org/​download/​fcd-15693-3.pdf|Identification cards — Contactless integrated circuit(s) cards - Vicinity cards — Part 3: Anti-collision and transmission protocol]]
 +  * [[http://​www.ti.com/​lit/​ug/​scbu004b/​scbu004b.pdf|Tag-it™ HF-I Plus Transponder Inlays Reference Guide]]
 +  * [[http://​www.ti.com/​lit/​ds/​symlink/​rf-hdt-dvbe.pdf|13.56-MHz ENCAPSULATED STANDARD TRANSPONDER]]
 +==== ISO 14443 ====
 +
 +  * http://​wg8.de/​wg8n1496_17n3613_Ballot_FCD14443-3.pdf
 +  * http://​www.waazaa.org/​download/​fcd-14443-4.pdf
 +==== Other====
 +
 +  * http://​static.googleusercontent.com/​external_content/​untrusted_dlcp/​www.google.com/​pl//​events/​io/​2011/​static/​presofiles/​how_to_nfc.pdf
 +
 +=== Sample project references ===
 +
 +  * http://​forum.stellarisiti.com/​topic/​453-launchpad-usb-example-and-documentation-additionslabs/​
 +  * [[http://​www.usb.org/​developers/​devclass_docs/​Hut1_11.pdf|Universal Serial Bus (USB) HID Usage Tables]]
 +  * [[http://​msdn.microsoft.com/​en-us/​library/​windows/​hardware/​gg463446.aspx| MSDN Enhanced Keyboards and Windows]]
projects/rfid.txt · Last modified: 2013/03/18 10:21 by mkucia