diff --git a/README.md b/README.md index 68270ba..4213c23 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,26 @@ # Volvo CEM pin cracker via OBD +This is a fork of original Volvo CEM pin cracker via OBD https://github.com/vtl/volvo-cem-cracker -A research project grown out of curiosity. Cracks 6 bytes of pin code via High Speed CAN-bus in under 20 minutes. +Please visit the link above to view details of the original project. -## Supported platforms: +## The difference +This implementation has some minor features, which could be useful to someone: +1. 'Abort' button to exit from the cracking process with ECUs exiting from programming mode. Pressing the 'Abort' button on the brute-force stage leads to displaying the last tried brute-force value. +2. Allows to run brute-forcing starting any value. +3. i2c LCD support. Allows you to disconnect the cracker from the PC and see the progress and result on the LCD, the current step is on the top line, while the progress of the running step, intermediate and final results are displayed on the bottom line. -* P1: - * 2004 - 2011 S40 - * 2004 - 2011 V50 - * 2008 - 2013 C30 - * 2006 - 2013 C70 -* P2: - * 2005 - 2006 S80 - * 2005 - 2007 V70 - * 2005 - 2007 XC70 - * 2005 - 2009 S60 - * 2003 - 2014 XC90 +LCD support in current implementation does not assume fully autonomous operation without connection to PC. Viewing the operation log on PC is still an important part required for understanding what the hell is going on. But in many cases for example long brute-forcing of 4 remaining bytes LCD is useful not to keep a PC in the car. -Earlier P2 1999-2004 can be supported as well, CEM donation is welcome. +Circuit diagram is shown below. -Find us at Matthew's Volvo Site for support: https://www.matthewsvolvosite.com/forums/viewtopic.php?f=10&t=85611 - -Big thanks to an unidentified hacker from western Germany for hints! - -![Image](doc/schematic.png) - -![Image](doc/pin.png) - -Cracking CEM pin in about 10 minutes (video): - -[![Image](http://img.youtube.com/vi/w8GS_1SFgeg/0.jpg)](http://www.youtube.com/watch?v=w8GS_1SFgeg "Cracking CEM pin in about 10 minutes") +Let's look at this implementation as a managed solution, the required tuning can be done by variables' values changing at the top of source-code. All descriptions below assume that the HW part is OK. ## Possible issues and fixes Depending on your CEM model, you may face some issues with PIN decoding. Here are some examples and recommendations. -### CEM 30786889 -#### Unable to decode 3rd byte. -Cracker decodes first 2 bytes, but the third byte is always different so PIN cannot be decoded. For example: +#### Unable to decode 3rd byte +Cracker decodes the first 2 bytes, but the third byte is always different so PIN cannot be decoded. For example: ``` Attempt 1: 21:54:30.212 -> Candidate PIN 32 78 79 -- -- -- : brute forcing bytes 3 to 5 (3 bytes), will take up to 646 seconds @@ -51,27 +35,43 @@ Attempt 4: 14:26:13.327 -> Candidate PIN 32 78 41 -- -- -- : brute forcing bytes 3 to 5 (3 bytes), will take up to 646 seconds ``` -There are two possible solutions that may help: -1. Use brute force for rest of bytes - it may take 18-20 hours. To do it, change the following tunable parameter value to 2: +There are possible solutions that may help: + +1. Use brute-force for the rest of bytes - it may take up to 18-20 hours. To do it, change the following tunable parameter value to 2 in line #31: ``` -#define CALC_BYTES 3 /* how many PIN bytes to calculate (1 to 4), the rest is brute-forced */ +#define CALC_BYTES 2 /* how many PIN bytes to calculate (1 to 4), the rest is brute-forced. Default value is 3 */ ``` - -2. Another solution that may help - comment out the following line: +2. And to avoid time waste, indicate the number of known bytes and hardcode the first bytes that you already know in lines #32 and #33: ``` -set_arm_clock (180000000); +#define KNOWN_BYTES 2 /* how many PIN bytes we know and skip it from calculation. Default value is 0 */ +int kpin[6] = { 0x32, 0x78, 0x00, 0x00, 0x00, 0x00 }; /* replace 0x00 by values for known PIN bytes. Default values are 0x00 */ ``` +3. Another solution that may help - change the value from 'true' to 'false' in the line #29: +``` +#define CPU_CLOCK false /* true - to limit CPU by 180 MHz, false - to unlimit CPU frequency. Default value is true */ +``` +4. To run brute-force starting non 0 number (for example if you stopped brute-force by 'Abort' button at any point and you want to continue brute-forcing from the same point) you have to setup the required number as value of 'initValue' variable in the line #34: +``` +uint32_t initValue = 0; /* the initial value for brute-force search. Default value is 0 */ +``` +It can be especially useful in the case of 4 bytes brute-forcing, which could take up to 18 hours, this way brute-forcing can be splitted to parts. -And to avoid time waste, hardcode the first two bytes that you already know: +## Other hints +1. If you would like to hide displaying information on LCD change the value to 'false' in the line #30: ``` - /* try and crack each PIN position */ - - // Add lines to skip first known bytes */ - pin[0] = 0x32; // Known first byte example - pin[1] = 0x78; // Known second byte example - - // Change initial value of i from 0 to 2 - for (i = 2; i < maxBytes; i++) { - crackPinPosition (pin, i, verbose); - } +#define LCD true /* true - to print out info on 1602 LCD connected via i2c. Default value is true */ ``` +2. You can use the 'Abort' button to stop the cracking process and force ECUs to exit from programming mode. Either after exit from the cracking process the pressing on 'Abort' button sends commands to ECUs to exit from programming mode. + +## Ideas for enthusiasts :) +1. Add a 'Continue' button or switch and logic to write calculated bytes and last tried brute-force value into EEPROM in case of pressing on 'Abort' button. So running the cracker next time with the pressed button 'Continue' will force the cracker to read saved data from EEPROM and continue the cracking process with minimal time loss and without losing time of repetition of already passed steps. +2. Add a 'Calc_Bytes' button or switch to set the value (2 or 3) of CALC_BYTES. It is already done in the original project by Mark. That way the solution will become quite autonomous. + +## Pictures + +### Circuit diagram +![Image](doc/volvo-cem-cracker-diagram.png) +### HW implementation +![Image](doc/cracker_photo.jpg) +### LCD screenshots +![Image](doc/lcd1602.png) diff --git a/doc/SCH_Volvo CEM-L (50) cracker_2023-01-16.json b/doc/SCH_Volvo CEM-L (50) cracker_2023-01-16.json deleted file mode 100644 index d181270..0000000 --- a/doc/SCH_Volvo CEM-L (50) cracker_2023-01-16.json +++ /dev/null @@ -1,178 +0,0 @@ -{ - "editorVersion": "6.5.22", - "docType": "5", - "title": "Volvo CEM-L (50) cracker", - "description": "", - "colors": {}, - "schematics": [ - { - "docType": 1, - "title": "Sheet_1", - "description": "", - "dataStr": { - "head": { - "docType": "1", - "editorVersion": "6.4.12", - "newgId": true, - "c_para": { - "Prefix Start": "1" - }, - "c_spiceCmd": "null", - "hasIdFlag": true, - "uuid": "aa19db4205384782993916e1d95c084d", - "x": "0", - "y": "0", - "portOfADImportHack": "", - "importFlag": 0, - "transformList": "" - }, - "canvas": "CA~1000~1000~#FFFFFF~yes~#CCCCCC~5~1000~1000~dot~5~pixel~5~0~0", - "shape": [ - "LIB~0~-806~package`NONE`BOM_Manufacturer Part`?`spicePre`.`~~0~frame_lib_1~~~0~~yes~yes#@$T~N~571.39~-809~0~#000080~Arial~~~~~comment~A~0~start~gge77~0~#@$PT~M 206 -796 L 206 -806 M 206 -10 L 206 0 M 402 -796 L 402 -806 M 402 -10 L 402 0 M 598 -796 L 598 -806 M 598 -10 L 598 0 M 794 -796 L 794 -806 M 794 -10 L 794 0 M 990 -796 L 990 -806 M 990 -10 L 990 0 M 10 -600 L 0 -600 M 1139 -600 L 1149 -600 M 10 -404 L 0 -404 M 1139 -404 L 1149 -404 M 10 -208 L 0 -208 M 1139 -208 L 1149 -208 M 10 -12 L 0 -12 M 1139 -12 L 1149 -12~#880000~1~0~none~gge6~0~frame_tick#@$T~P~571.39~-818~0~#000080~Arial~~~~~comment~A~0~start~gge76~0~#@$T~L~1.5~-698~0~#880000~~~~~~comment~A~1~start~gge7~0~frame_tick#@$T~L~1140.5~-698~0~#880000~~~~~~comment~A~1~start~gge9~0~frame_tick#@$T~L~1.5~-502~0~#880000~~~~~~comment~B~1~start~gge11~0~frame_tick#@$T~L~1140.5~-502~0~#880000~~~~~~comment~B~1~start~gge13~0~frame_tick#@$T~L~1.5~-306~0~#880000~~~~~~comment~C~1~start~gge15~0~frame_tick#@$T~L~1140.5~-306~0~#880000~~~~~~comment~C~1~start~gge17~0~frame_tick#@$T~L~1.5~-110~0~#880000~~~~~~comment~D~1~start~gge19~0~frame_tick#@$T~L~1140.5~-110~0~#880000~~~~~~comment~D~1~start~gge21~0~frame_tick#@$T~L~108~-797.5~0~#880000~~~~~~comment~1~1~start~gge23~0~frame_tick#@$T~L~108~-1.5~0~#880000~~~~~~comment~1~1~start~gge25~0~frame_tick#@$T~L~304~-797.5~0~#880000~~~~~~comment~2~1~start~gge27~0~frame_tick#@$T~L~304~-1.5~0~#880000~~~~~~comment~2~1~start~gge29~0~frame_tick#@$T~L~500~-797.5~0~#880000~~~~~~comment~3~1~start~gge31~0~frame_tick#@$T~L~500~-1.5~0~#880000~~~~~~comment~3~1~start~gge33~0~frame_tick#@$T~L~696~-797.5~0~#880000~~~~~~comment~4~1~start~gge35~0~frame_tick#@$T~L~696~-1.5~0~#880000~~~~~~comment~4~1~start~gge37~0~frame_tick#@$T~L~892~-797.5~0~#880000~~~~~~comment~5~1~start~gge39~0~frame_tick#@$T~L~892~-1.5~0~#880000~~~~~~comment~5~1~start~gge?~0~frame_tick#@$R~10~-796~~~1129~786~#880000~1~0~none~gge42~0~frame_innerbox#@$R~0~-806~~~1149~806~#880000~1~0~none~gge43~0~frame_outbox#@$R~694.99995~-90~~~444~80~#880000~1~0~none~gge44~0~frame_hitarea#@$PL~695.1 -50.75 1138.63 -50.75~#880000~1~0~none~gge45~0#@$PL~799.63 -30.75 1138.63 -30.75~#880000~1~0~none~gge46~0#@$PL~1059.61 -89.93 1059.63 -50.75~#880000~1~0~none~gge47~0#@$PL~1059.63 -50.75 1059.63 -30.75~#880000~1~0~none~gge48~0#@$T~L~699.99995~-77~0~#880000~~8pt~~~~comment~TITLE:~1~start~gge49~0~pinpart#@$T~L~757.62495~-64.41~0~#0000FF~~10pt~~~~comment~Volvo CEM cracker (P1 + P2)~1~start~gge51~0~frame_title#@$T~L~1064.62495~-63.75~0~#880000~~8pt~~~~comment~REV:~1~start~gge53~0~pinpart#@$T~L~1102.62495~-63.75~0~#0000FF~~9pt~~~~comment~1.2~1~start~gge55~0~frame_version#@$T~L~804.62495~-15~0~#880000~~8pt~~~~comment~Date:~1~start~gge57~0~pinpart#@$T~L~851.62495~-14.52~0~#0000FF~~9pt~~~~comment~2021-Jan-9~1~start~gge59~0~frame_date#@$T~L~1063.62495~-35~0~#880000~~8pt~~~~comment~Sheet:~1~start~gge61~0~pinpart#@$T~L~1108.62495~-34.52~0~#0000FF~~9pt~~~~comment~1/1~1~start~gge63~0~frame_sheet#@$T~L~943.62495~-14.75~0~#880000~~8pt~~~~comment~Drawn By:~1~start~gge65~0~pinpart#@$T~L~1008.63~-14.75~0~#0000FF~~9pt~~~~comment~vtl~1~start~gge67~0~frame_drawn#@$T~L~804.62495~-36.75~0~#880000~~8pt~~~~comment~Company:~1~start~gge69~0~pinpart#@$T~L~871.24995~-36.64~0~#0000FF~~9pt~~~~comment~Kitchen office~1~start~gge71~0~frame_company#@$PL~799.63 -50.75 799.63 -10.75~#880000~1~0~none~gge73~0#@$Pimage~L~1~gge74~0~gge75~694.99995~-38~104~20~data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4wLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0i5Zu+5bGCXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iNTIwIg0KCSB2aWV3Qm94PSIwIDAgMTY5Mi45IDM0MS41IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxNjkyLjkgMzQxLjU7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLnN0MHtmaWxsOiM1NTg4RkY7fQ0KPC9zdHlsZT4NCjxnPg0KCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik05MDEuNywxNjEuMWMyLjMtMS44LDUuMS0yLjcsOC4zLTIuN2M0LjMsMCw4LjksMS42LDEzLjgsNC43YzQuOSwzLjEsOS42LDgsMTQuMSwxNC43bDE3LjQtMjcuOQ0KCQljLTUuNC03LjgtMTIuMS0xMy45LTIwLjItMTguMmMtOC4xLTQuMy0xNi43LTYuNC0yNS43LTYuNGMtMTIuOCwwLTI0LDMuOS0zMy40LDExLjdjLTkuNCw3LjgtMTQuMSwxOC0xNC4xLDMwLjQNCgkJYzAsOC45LDMsMTcuNCw5LDI1LjRjNC4zLDUuNywxMi4xLDEyLjYsMjMuMywyMC42YzkuNyw2LjksMTUuNywxMS43LDE3LjksMTQuNGMyLjIsMi43LDMuMyw1LjMsMy4zLDcuOWMwLDMuMi0xLjQsNS45LTQuMyw4LjMNCgkJYy0yLjksMi4zLTYuNywzLjUtMTEuNSwzLjVjLTEyLjEsMC0yMy4zLTYuNy0zMy41LTIwLjJsLTIyLjUsMjYuMmMxMCwxMC42LDE5LjEsMTgsMjcuMiwyMmM4LjEsNCwxNy4yLDYsMjcuMSw2DQoJCWMxNy4yLDAsMzAuMy00LjksMzkuNC0xNC43YzkuMS05LjgsMTMuNi0yMC4zLDEzLjYtMzEuM2MwLTguNC0yLjItMTYuMS02LjYtMjMuM2MtNC40LTcuMS0xMy42LTE1LjctMjcuNi0yNS43DQoJCWMtOC44LTYuMy0xNC0xMC41LTE1LjctMTIuN2MtMS44LTIuMi0yLjctNC40LTIuNy02LjZDODk4LjIsMTY0LjksODk5LjQsMTYyLjksOTAxLjcsMTYxLjF6Ii8+DQoJPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIxMDM4LjcsMjE3LjIgMTAwOS44LDEyOS4xIDk3NCwxMjkuMSAxMDE1LjgsMjU3LjQgOTczLjYsMzMyIDEwMTIuMSwzMzIgMTEyOC44LDEyOS4xIDEwODkuNSwxMjkuMSAJDQoJCSIvPg0KCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik02NTEuNSwxNTQuMWwtNzAuNCwwbDUuOC00MS43YzAsMCw3NC43LTAuMSw3NS4xLTAuMWM5LjgsMCwxNy44LTgsMTcuOC0xNy44YzAtOS44LTgtMTcuOC0xNy44LTE3LjgNCgkJYy0wLjMsMC0xMDguNCwwLTEwOC40LDBMNTI2LDI3Ny43aDExMy4ydjBjOS41LTAuMiwxNy4yLTgsMTcuMi0xNy41YzAtOS43LTcuOS0xNy42LTE3LjYtMTcuNmMtMC40LDAtNzAuMiwwLjEtNzAuMiwwLjFsNy40LTUzLjMNCgkJYzAsMCw3MS43LDAuMSw3Mi4zLDAuMWM5LjgsMCwxNy44LTgsMTcuOC0xNy44QzY2Ni4zLDE2Mi44LDY1OS45LDE1NS41LDY1MS41LDE1NC4xeiIvPg0KCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMjY4LjQsNzYuOGMtMC4zLDAtMTA4LjQsMC0xMDguNCwwbC0yNy40LDIwMC44aDExMy4zdjBjOS41LTAuMiwxNy4yLTgsMTcuMi0xNy41YzAtOS43LTcuOS0xNy42LTE3LjYtMTcuNg0KCQljLTAuNCwwLTcwLjIsMC4xLTcwLjIsMC4xbDcuNC01My4zYzAsMCw3MS43LDAuMSw3Mi40LDAuMWM5LjgsMCwxNy44LTgsMTcuOC0xNy44YzAtOC44LTYuNC0xNi4xLTE0LjgtMTcuNWwtNzAuNCwwbDUuOC00MS43DQoJCWMwLDAsNzQuNy0wLjEsNzUuMS0wLjFjOS44LDAsMTcuOC04LDE3LjgtMTcuOEMxMjg2LjIsODQuOCwxMjc4LjMsNzYuOCwxMjY4LjQsNzYuOHoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTQ3MC43LDE3M2MwLTE5LjctNC42LTM3LjItMTMuNy01Mi4zYy05LjEtMTUuMS0yMC45LTI2LjItMzUuNS0zMy4yYy0xNC42LTcuMS0zNi43LTEwLjYtNjYuNi0xMC42aC0zMS44DQoJCWwtMjcuNCwyMDAuOGg2Mi40YzI2LjIsMCw0Ni43LTMuOSw2MS40LTExLjdjMTQuNy03LjgsMjctMjAuMiwzNi43LTM3LjFDMTQ2NS45LDIxMS45LDE0NzAuNywxOTMuMywxNDcwLjcsMTczeiBNMTQyMS4zLDIxNC41DQoJCWMtNy4zLDExLTE2LjksMTguOC0yOC45LDIzLjNjLTguNiwzLjItMjIuNCw0LjgtNDEuNSw0LjhoLTEyLjRsMTcuNy0xMzAuNGg5LjVjMTUuNSwwLDI3LjksMi40LDM3LjIsNy4zDQoJCWM5LjMsNC45LDE2LjUsMTEuOCwyMS43LDIwLjhjNS4xLDksNy43LDIwLjEsNy43LDMzLjRDMTQzMi4yLDE4OS44LDE0MjguNiwyMDMuNSwxNDIxLjMsMjE0LjV6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTTE2MTkuMiwxNzAuN2wtMjIuMywxMi4zYy0xLjgsMTYuMi0xNS42LDI4LjctMzIuMiwyOC43Yy0xNy45LDAtMzIuNC0xNC41LTMyLjQtMzIuNA0KCQljMC0xNy45LDE0LjUtMzIuNCwzMi40LTMyLjRjNi45LDAsMTMuMywyLjIsMTguNSw1LjhsMjcuNy0xNS4zbC0xNS02MC4yaC0zMS43bC0xMDgsMjAwaDQwLjRsMjIuOC00Mi42aDc5LjRsMTAuNiw0Mi42aDM2LjQNCgkJTDE2MTkuMiwxNzAuN3oiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTU1Mi44LDE3OC41YzAsNi45LDUuNiwxMi41LDEyLjUsMTIuNWM2LjksMCwxMi41LTUuNiwxMi41LTEyLjVjMC02LjktNS42LTEyLjUtMTIuNS0xMi41DQoJCUMxNTU4LjQsMTY2LDE1NTIuOCwxNzEuNiwxNTUyLjgsMTc4LjV6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTTgxNC44LDE1Mi41QzgxNC44LDE1Mi41LDgxNC44LDE1Mi40LDgxNC44LDE1Mi41bC0xMi41LDBsLTEuMy0yLjRjLTUuMS04LjEtMTEuNS0xNC4yLTE5LjItMTguNA0KCQljLTcuOC00LjItMjAuMS02LjMtMjkuMy02LjNjLTEzLjcsMC0yNi44LDMuNy0zOS4zLDExLjFjLTEyLjUsNy40LTIyLjUsMTcuNy0yOS45LDMxYy03LjQsMTMuMi0xMS4yLDI3LjItMTEuMiw0MS44DQoJCWMwLDE5LjIsNS44LDM2LDE3LjQsNTAuNWMxMS42LDE0LjUsMjcuMywyMS43LDQ3LDIxLjdjOC42LDAsMTYuMy0xLjQsMjMuMi00LjRjNi45LTIuOSwxNC4zLTgsMjIuMi0xNS40YzAsMCw5LjMsOC4xLDkuNCw4DQoJCWM1LjgsNC42LDEzLDcuNSwyMC44LDhoMy42bDAuNS00LjNsMTIuNy0xMDYuOWMtMC4xLDAtMC4xLDAtMC4yLDBDODI4LjcsMTU4LjgsODIyLjUsMTUyLjYsODE0LjgsMTUyLjV6IE03ODUuNiwyMjQuMg0KCQljLTQuNSw4LjUtMTAuMSwxNC44LTE2LjgsMTguOGMtNi43LDQtMTQuNSw2LTIzLjUsNmMtMTAuOCwwLTE5LjYtMy41LTI2LjUtMTAuN2MtNi45LTcuMS0xMC4zLTE2LjUtMTAuMy0yOC4xDQoJCWMwLTE1LjEsNC41LTI3LjQsMTMuNi0zN2M5LjEtOS42LDIwLjEtMTQuMywzMy4xLTE0LjNjMTEuMiwwLDIwLjIsMy42LDI3LDEwLjdjNi44LDcuMiwxMC4yLDE2LjYsMTAuMiwyOC40DQoJCUM3OTIuNCwyMDYuOSw3OTAuMSwyMTUuNyw3ODUuNiwyMjQuMnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNNDA0LjMsOTYuM2MtNy41LTE5LjktMTkuNy0zNy44LTM1LjgtNTIuM2MtMjQuNy0yMi4yLTU2LjctMzQuNS05MC0zNC41Yy0yOC44LDAtNTYuMyw5LTc5LjUsMjYNCgkJYy0xMS4yLDguMi0yMC45LDE3LjktMjguOSwyOC45Yy01LTAuNy0xMC4xLTEuMS0xNS4zLTEuMWMtMjguNywwLTU1LjgsMTEuMi03Ni4xLDMxLjVjLTIwLjMsMjAuMy0zMS41LDQ3LjMtMzEuNSw3Ni4xDQoJCWMwLDI2LjcsOS45LDUyLjMsMjcuOCw3Mi4xYzE0LjIsMTUuNywzMi42LDI2LjgsNTIuOSwzMmM4LjgsMjYuMiwzMy42LDQ1LjEsNjIuNyw0NS4xYzM2LjUsMCw2Ni4yLTI5LjcsNjYuMi02Ni4yDQoJCWMwLTIuMS0wLjEtNC4zLTAuMy02LjRsOTIuOS00OC44bC0yMC4zLTM1LjJsLTg4LjgsNDYuNmMtMTIuMS0xMy44LTI5LjktMjIuNS00OS43LTIyLjVjLTI4LjcsMC01My4yLDE4LjQtNjIuNCw0NA0KCQljLTIzLjQtMTAuMy0zOS44LTMzLjYtMzkuOC02MC44YzAtMzYuNiwyOS43LTY2LjQsNjYuNC02Ni40YzEyLjksMCwyNSwzLjcsMzUuMiwxMC4xYzEyLjMtMzcuMSw0Ny4zLTYzLjksODguNS02My45DQoJCWM0OCwwLDg3LjQsMzYuMiw5Mi43LDgyLjdjMS43LTAuMiwzLjQtMC4zLDUuMS0wLjNjMjguNywwLDUyLDIzLjMsNTIsNTJjMCwyNy4yLTIwLjksNDkuNS00Ny41LDUxLjhsLTI5LjcsMA0KCQljLTEuMy0wLjMtMi43LTAuNC00LjEtMC40Yy0xMS41LDAtMjAuOCw5LjMtMjAuOCwyMC44YzAsMTAuOSw4LjQsMTkuOCwxOS4xLDIwLjd2MC4ybDM1LjUsMGwxLjgsMGwxLjgtMC4yDQoJCWMyMy4yLTIsNDQuNy0xMi41LDYwLjUtMjkuN2MxNS45LTE3LjMsMjQuNy0zOS43LDI0LjctNjMuMkM0NjkuNiwxNDMuNiw0NDIuMSwxMDguMiw0MDQuMyw5Ni4zeiBNMTkwLjYsMjI4LjMNCgkJYzE0LjEsMCwyNS42LDExLjUsMjUuNiwyNS42YzAsMTQuMS0xMS41LDI1LjYtMjUuNiwyNS42Yy0xNC4xLDAtMjUuNi0xMS41LTI1LjYtMjUuNkMxNjUsMjM5LjgsMTc2LjUsMjI4LjMsMTkwLjYsMjI4LjN6Ii8+DQo8L2c+DQo8L3N2Zz4NCg==", - "LIB~535~-645~package`CYT1076 FOOT`BOM_Manufacturer``BOM_Manufacturer Part`CYT1076`BOM_Supplier Part``BOM_Supplier``link``Contributor`krzryz`spicePre`U`~~0~ggebac468049775df37~c715587dbc68447fa539ea389420cc31~95dde141c461436ba40764df375ba2ac~0~~yes~yes#@$T~N~589~-648~0~#000080~Arial~~~~~comment~CYT1076~1~start~gge859~0~#@$T~P~589~-657~0~#000080~Arial~~~~~comment~U4~1~start~gge861~0~#@$R~545~-645~2~2~100~70~#880000~1~0~none~gge863~0~#@$E~550~-640~1.5~1.5~#880000~1~0~#880000~gge864~0#@$P~show~0~1~535~-635~180~gge865~0^^535~-635^^M 535 -635 h 10~#880000^^1~548.7~-631~0~LV1~start~~~#0000FF^^1~544.5~-636~0~1~end~~~#0000FF^^0~542~-635^^0~M 545 -632 L 548 -635 L 545 -638#@$P~show~0~2~535~-625~180~gge872~0^^535~-625^^M 535 -625 h 10~#880000^^1~548.7~-621~0~LV2~start~~~#0000FF^^1~544.5~-626~0~2~end~~~#0000FF^^0~542~-625^^0~M 545 -622 L 548 -625 L 545 -628#@$P~show~0~3~535~-615~180~gge879~0^^535~-615^^M 535 -615 h 10~#880000^^1~548.7~-611~0~LV~start~~~#0000FF^^1~544.5~-616~0~3~end~~~#0000FF^^0~542~-615^^0~M 545 -612 L 548 -615 L 545 -618#@$P~show~0~4~535~-605~180~gge886~0^^535~-605^^M 535 -605 h 10~#880000^^1~548.7~-601~0~GND~start~~~#0000FF^^1~544.5~-606~0~4~end~~~#0000FF^^0~542~-605^^0~M 545 -602 L 548 -605 L 545 -608#@$P~show~0~5~535~-595~180~gge893~0^^535~-595^^M 535 -595 h 10~#880000^^1~548.7~-591~0~LV3~start~~~#0000FF^^1~544.5~-596~0~5~end~~~#0000FF^^0~542~-595^^0~M 545 -592 L 548 -595 L 545 -598#@$P~show~0~6~535~-585~180~gge900~0^^535~-585^^M 535 -585 h 10~#880000^^1~548.7~-581~0~LV4~start~~~#0000FF^^1~544.5~-586~0~6~end~~~#0000FF^^0~542~-585^^0~M 545 -582 L 548 -585 L 545 -588#@$P~show~0~7~655~-585~0~gge907~0^^655~-585^^M 655 -585 h -10~#880000^^1~641.3~-581~0~HV4~end~~~#0000FF^^1~645.5~-586~0~7~start~~~#0000FF^^0~648~-585^^0~M 645 -588 L 642 -585 L 645 -582#@$P~show~0~8~655~-595~0~gge914~0^^655~-595^^M 655 -595 h -10~#880000^^1~641.3~-591~0~HV3~end~~~#0000FF^^1~645.5~-596~0~8~start~~~#0000FF^^0~648~-595^^0~M 645 -598 L 642 -595 L 645 -592#@$P~show~0~9~655~-605~0~gge921~0^^655~-605^^M 655 -605 h -10~#880000^^1~641.3~-601~0~GND~end~~~#0000FF^^1~645.5~-606~0~9~start~~~#0000FF^^0~648~-605^^0~M 645 -608 L 642 -605 L 645 -602#@$P~show~0~10~655~-615~0~gge928~0^^655~-615^^M 655 -615 h -10~#880000^^1~641.3~-611~0~HV~end~~~#0000FF^^1~645.5~-616~0~10~start~~~#0000FF^^0~648~-615^^0~M 645 -618 L 642 -615 L 645 -612#@$P~show~0~11~655~-625~0~gge935~0^^655~-625^^M 655 -625 h -10~#880000^^1~641.3~-621~0~HV2~end~~~#0000FF^^1~645.5~-626~0~11~start~~~#0000FF^^0~648~-625^^0~M 645 -628 L 642 -625 L 645 -622#@$P~show~0~12~655~-635~0~gge942~0^^655~-635^^M 655 -635 h -10~#880000^^1~641.3~-631~0~HV1~end~~~#0000FF^^1~645.5~-636~0~12~start~~~#0000FF^^0~648~-635^^0~M 645 -638 L 642 -635 L 645 -632", - "LIB~845~-575~package`CAN_BUS_SHIELD_8MHZ`BOM_Manufacturer``BOM_Manufacturer Part``BOM_Supplier Part``BOM_Supplier``link``Contributor`Christer_A`spicePre`U`~~0~gge48f0ae2437312dae~ac1ee8ee372f4699b92c20a1b2d0db33~e8820a3734b842dfbeeb5138c4be1468~0~~yes~yes#@$T~N~839.17~-658~0~#000080~Arial~~~~~comment~CAN-HS~1~start~gge952~0~#@$T~P~839.17~-667.33~0~#000080~Arial~~~~~comment~U2~1~start~gge954~0~#@$R~785~-655~~~120~160~#000000~1~0~none~gge956~0~#@$P~show~0~1~765~-635~180~gge957~0^^765~-635^^M 765 -635 h 20~#880000^^1~787~-632~0~INT~start~~~#0000FF^^1~780~-636~0~1~end~~~#0000FF^^0~782~-635^^0~M 785 -632 L 788 -635 L 785 -638#@$P~show~0~2~765~-615~180~gge964~0^^765~-615^^M 765 -615 h 20~#880000^^1~787~-612~0~SCK~start~~~#0000FF^^1~780~-616~0~2~end~~~#0000FF^^0~782~-615^^0~M 785 -612 L 788 -615 L 785 -618#@$P~show~0~3~765~-595~180~gge971~0^^765~-595^^M 765 -595 h 20~#880000^^1~787~-592~0~MOSI~start~~~#0000FF^^1~780~-596~0~3~end~~~#0000FF^^0~782~-595^^0~M 785 -592 L 788 -595 L 785 -598#@$P~show~0~4~765~-575~180~gge978~0^^765~-575^^M 765 -575 h 20~#880000^^1~787~-572~0~MISO~start~~~#0000FF^^1~780~-576~0~4~end~~~#0000FF^^0~782~-575^^0~M 785 -572 L 788 -575 L 785 -578#@$P~show~0~5~765~-555~180~gge985~0^^765~-555^^M 765 -555 h 20~#880000^^1~787~-552~0~CS~start~~~#0000FF^^1~780~-556~0~5~end~~~#0000FF^^0~782~-555^^0~M 785 -552 L 788 -555 L 785 -558#@$P~show~0~6~765~-535~180~gge992~0^^765~-535^^M 765 -535 h 20~#880000^^1~787~-532~0~GND~start~~~#0000FF^^1~780~-536~0~6~end~~~#0000FF^^0~782~-535^^0~M 785 -532 L 788 -535 L 785 -538#@$P~show~0~7~765~-515~180~gge999~0^^765~-515^^M 765 -515 h 20~#880000^^1~787~-512~0~VCC~start~~~#0000FF^^1~780~-516~0~7~end~~~#0000FF^^0~782~-515^^0~M 785 -512 L 788 -515 L 785 -518#@$P~show~0~8~925~-575~0~gge1006~0^^925~-575^^M 925 -575 h -20~#880000^^1~903~-572~0~CAN H~end~~~#0000FF^^1~910~-576~0~8~start~~~#0000FF^^0~908~-575^^0~M 905 -578 L 902 -575 L 905 -572#@$P~show~0~9~925~-555~0~gge1013~0^^925~-555^^M 925 -555 h -20~#880000^^1~903~-552~0~CAN L~end~~~#0000FF^^1~910~-556~0~9~start~~~#0000FF^^0~908~-555^^0~M 905 -558 L 902 -555 L 905 -552#@$T~L~847.02~-502.75~270~#0000FF~~9pt~~~~comment~CAN BUS SHIELD 8MHz~1~start~gge1020~0~pinpart", - "W~165 -440 125 -440 125 -345 965 -345 965 -555 925 -555~#008800~1~0~none~gge1023~0", - "W~765 -635 655 -635~#008800~1~0~none~gge1026~0", - "W~770 -595 655 -595~#008800~1~0~none~gge1027~0", - "W~765 -575 715 -575 715 -585 655 -585~#008800~1~0~none~gge1028~0", - "LIB~265~-600~package`TEENSY4.0_BASIC`BOM_Manufacturer`PJRC`BOM_Manufacturer Part``BOM_Supplier Part``BOM_Supplier`PJRC`link`https://www.pjrc.com/store/teensy40.html`Contributor`Chris Gscheidle`spicePre`T`spiceSymbolName`TEENSY4.0_BASIC`~~0~gge99cc0f85bdd6a88e~a3b7a8434ff04a2ca99cf9739ee69737~b348f28f884148858e812d428df38098~0~~yes~yes#@$T~N~259.55~-683~0~#000080~Arial~~~~~comment~TEENSY4.0_BASIC~1~start~gge7358~0~#@$T~P~259.55~-692.14~0~#000080~Arial~~~~~comment~T1~1~start~gge7360~0~#@$T~L~232.55~-635.26~0~#0000FF~~9pt~~~~comment~Teensy 4.0~1~start~gge7362~0~pinpart#@$R~185~-680~~~160~300~#000000~1~0~none~gge7364~0~#@$P~show~0~26~365~-660~0~gge7365~0^^365~-660^^M 365 -660 h -20~#880000^^1~343~-657~0~Vin~end~~~#0000FF^^1~350~-661~0~33~start~~~#0000FF^^0~348~-660^^0~M 345 -663 L 342 -660 L 345 -657#@$P~show~0~25~365~-640~0~gge7372~0^^365~-640^^M 365 -640 h -20~#880000^^1~343~-637~0~GND~end~~~#0000FF^^1~350~-641~0~32~start~~~#0000FF^^0~348~-640^^0~M 345 -643 L 342 -640 L 345 -637#@$P~show~0~24~365~-620~0~gge7379~0^^365~-620^^M 365 -620 h -20~#880000^^1~343~-617~0~3.3V~end~~~#0000FF^^1~350~-621~0~31~start~~~#0000FF^^0~348~-620^^0~M 345 -623 L 342 -620 L 345 -617#@$P~show~0~23~365~-600~0~gge7386~0^^365~-600^^M 365 -600 h -20~#880000^^1~343~-597~0~A9/23~end~~~#0000FF^^1~350~-601~0~30~start~~~#0000FF^^0~348~-600^^0~M 345 -603 L 342 -600 L 345 -597#@$P~show~0~22~365~-580~0~gge7393~0^^365~-580^^M 365 -580 h -20~#880000^^1~343~-577~0~A8/22~end~~~#0000FF^^1~350~-581~0~29~start~~~#0000FF^^0~348~-580^^0~M 345 -583 L 342 -580 L 345 -577#@$P~show~0~21~365~-560~0~gge7400~0^^365~-560^^M 365 -560 h -20~#880000^^1~343~-557~0~A7/21~end~~~#0000FF^^1~350~-561~0~28~start~~~#0000FF^^0~348~-560^^0~M 345 -563 L 342 -560 L 345 -557#@$P~show~0~20~365~-540~0~gge7407~0^^365~-540^^M 365 -540 h -20~#880000^^1~343~-537~0~A6/20~end~~~#0000FF^^1~350~-541~0~27~start~~~#0000FF^^0~348~-540^^0~M 345 -543 L 342 -540 L 345 -537#@$P~show~0~19~365~-520~0~gge7414~0^^365~-520^^M 365 -520 h -20~#880000^^1~343~-517~0~SCL0/A5/19~end~~~#0000FF^^1~350~-521~0~26~start~~~#0000FF^^0~348~-520^^0~M 345 -523 L 342 -520 L 345 -517#@$P~show~0~18~365~-500~0~gge7421~0^^365~-500^^M 365 -500 h -20~#880000^^1~343~-497~0~SDA0/A4/18~end~~~#0000FF^^1~350~-501~0~25~start~~~#0000FF^^0~348~-500^^0~M 345 -503 L 342 -500 L 345 -497#@$P~show~0~17~365~-480~0~gge7428~0^^365~-480^^M 365 -480 h -20~#880000^^1~343~-477~0~SDA1/A3/17~end~~~#0000FF^^1~350~-481~0~24~start~~~#0000FF^^0~348~-480^^0~M 345 -483 L 342 -480 L 345 -477#@$P~show~0~16~365~-460~0~gge7435~0^^365~-460^^M 365 -460 h -20~#880000^^1~343~-457~0~SCL1/A2/16~end~~~#0000FF^^1~350~-461~0~23~start~~~#0000FF^^0~348~-460^^0~M 345 -463 L 342 -460 L 345 -457#@$P~show~0~15~365~-440~0~gge7442~0^^365~-440^^M 365 -440 h -20~#880000^^1~343~-437~0~A1/15~end~~~#0000FF^^1~350~-441~0~22~start~~~#0000FF^^0~348~-440^^0~M 345 -443 L 342 -440 L 345 -437#@$P~show~0~14~365~-420~0~gge7449~0^^365~-420^^M 365 -420 h -20~#880000^^1~343~-417~0~A0/14~end~~~#0000FF^^1~350~-421~0~21~start~~~#0000FF^^0~348~-420^^0~M 345 -423 L 342 -420 L 345 -417#@$P~show~0~13~365~-400~0~gge7456~0^^365~-400^^M 365 -400 h -20~#880000^^1~343~-397~0~SCK/LED/13~end~~~#0000FF^^1~350~-401~0~20~start~~~#0000FF^^0~348~-400^^0~M 345 -403 L 342 -400 L 345 -397#@$P~show~0~12~165~-400~180~gge7463~0^^165~-400^^M 165 -400 h 20~#880000^^1~187~-397~0~12/MISO~start~~~#0000FF^^1~180~-401~0~14~end~~~#0000FF^^0~182~-400^^0~M 185 -397 L 188 -400 L 185 -403#@$P~show~0~11~165~-420~180~gge7470~0^^165~-420^^M 165 -420 h 20~#880000^^1~187~-417~0~11/MOSI~start~~~#0000FF^^1~180~-421~0~13~end~~~#0000FF^^0~182~-420^^0~M 185 -417 L 188 -420 L 185 -423#@$P~show~0~10~165~-440~180~gge7477~0^^165~-440^^M 165 -440 h 20~#880000^^1~187~-437~0~10/CS~start~~~#0000FF^^1~180~-441~0~12~end~~~#0000FF^^0~182~-440^^0~M 185 -437 L 188 -440 L 185 -443#@$P~show~0~9~165~-460~180~gge7484~0^^165~-460^^M 165 -460 h 20~#880000^^1~187~-457~0~9~start~~~#0000FF^^1~180~-461~0~11~end~~~#0000FF^^0~182~-460^^0~M 185 -457 L 188 -460 L 185 -463#@$P~show~0~8~165~-480~180~gge7491~0^^165~-480^^M 165 -480 h 20~#880000^^1~187~-477~0~8~start~~~#0000FF^^1~180~-481~0~10~end~~~#0000FF^^0~182~-480^^0~M 185 -477 L 188 -480 L 185 -483#@$P~show~0~7~165~-500~180~gge7498~0^^165~-500^^M 165 -500 h 20~#880000^^1~187~-497~0~7~start~~~#0000FF^^1~180~-501~0~9~end~~~#0000FF^^0~182~-500^^0~M 185 -497 L 188 -500 L 185 -503#@$P~show~0~6~165~-520~180~gge7505~0^^165~-520^^M 165 -520 h 20~#880000^^1~187~-517~0~6~start~~~#0000FF^^1~180~-521~0~8~end~~~#0000FF^^0~182~-520^^0~M 185 -517 L 188 -520 L 185 -523#@$P~show~0~5~165~-540~180~gge7512~0^^165~-540^^M 165 -540 h 20~#880000^^1~187~-537~0~5~start~~~#0000FF^^1~180~-541~0~7~end~~~#0000FF^^0~182~-540^^0~M 185 -537 L 188 -540 L 185 -543#@$P~show~0~4~165~-560~180~gge7519~0^^165~-560^^M 165 -560 h 20~#880000^^1~187~-557~0~4~start~~~#0000FF^^1~180~-561~0~6~end~~~#0000FF^^0~182~-560^^0~M 185 -557 L 188 -560 L 185 -563#@$P~show~0~3~165~-580~180~gge7526~0^^165~-580^^M 165 -580 h 20~#880000^^1~187~-577~0~3~start~~~#0000FF^^1~180~-581~0~5~end~~~#0000FF^^0~182~-580^^0~M 185 -577 L 188 -580 L 185 -583#@$P~show~0~2~165~-600~180~gge7533~0^^165~-600^^M 165 -600 h 20~#880000^^1~187~-597~0~2~start~~~#0000FF^^1~180~-601~0~4~end~~~#0000FF^^0~182~-600^^0~M 185 -597 L 188 -600 L 185 -603#@$P~show~0~1~165~-620~180~gge7540~0^^165~-620^^M 165 -620 h 20~#880000^^1~187~-617~0~1~start~~~#0000FF^^1~180~-621~0~3~end~~~#0000FF^^0~182~-620^^0~M 185 -617 L 188 -620 L 185 -623#@$P~show~0~1~165~-640~180~gge7547~0^^165~-640^^M 165 -640 h 20~#880000^^1~187~-637~0~0~start~~~#0000FF^^1~180~-641~0~2~end~~~#0000FF^^0~182~-640^^0~M 185 -637 L 188 -640 L 185 -643#@$P~show~0~1~165~-660~180~gge7554~0^^165~-660^^M 165 -660 h 20~#880000^^1~187~-657~0~GND~start~~~#0000FF^^1~180~-661~0~1~end~~~#0000FF^^0~182~-660^^0~M 185 -657 L 188 -660 L 185 -663", - "W~535 -595 490 -595 490 -325 105 -325 105 -420 165 -420~#008800~1~0~none~gge7766~0", - "W~535 -585 470 -585 470 -365 145 -365 145 -400 165 -400~#008800~1~0~none~gge7768~0", - "W~165 -600 145 -600 145 -725 745 -725 745 -640 745 -555 765 -555~#008800~1~0~none~gge7769~0", - "W~765 -515 420 -515 420 -660 365 -660~#008800~1~0~none~gge7770~0", - "W~765 -535 440 -535 440 -640 365 -640~#008800~1~0~none~gge7771~0", - "W~365 -400 700 -400 700 -615 765 -615~#008800~1~0~none~gge7772~0", - "W~655 -605 670 -605 670 -535~#008800~1~0~none~gge7773~0", - "W~535 -605 510 -605 510 -535~#008800~1~0~none~gge7775~0", - "W~535 -615 455 -615 455 -620 365 -620~#008800~1~0~none~gge7777~0", - "W~655 -615 685 -615 685 -515~#008800~1~0~none~gge7778~0", - "W~535 -635 530 -635 530 -710 105 -710 105 -560 165 -560~#008800~1~0~none~gge7781~0", - "W~925 -575 1005 -575~#008800~1~0~none~gge7789~0", - "W~1005 -555 965 -555~#008800~1~0~none~gge7790~0", - "T~L~1010~-565~0~#0000FF~~9pt~~~~comment~To OBD-II CAN-HS~1~start~gge7792~0~pinpart", - "LIB~850~-235~package`CAN_BUS_SHIELD_8MHZ`BOM_Manufacturer``BOM_Manufacturer Part``BOM_Supplier Part``BOM_Supplier``link``Contributor`Christer_A`spicePre`U`~~0~gge778b54bf753fa61a~ac1ee8ee372f4699b92c20a1b2d0db33~e8820a3734b842dfbeeb5138c4be1468~0~~yes~yes#@$T~N~844.17~-318~0~#000080~Arial~~~~~comment~CAN-HS~1~start~gge7800~0~#@$T~P~844.17~-327.33~0~#000080~Arial~~~~~comment~U1~1~start~gge7802~0~#@$R~790~-315~~~120~160~#000000~1~0~none~gge7804~0~#@$P~show~0~1~770~-295~180~gge7805~0^^770~-295^^M 770 -295 h 20~#880000^^1~792~-292~0~INT~start~~~#0000FF^^1~785~-296~0~1~end~~~#0000FF^^0~787~-295^^0~M 790 -292 L 793 -295 L 790 -298#@$P~show~0~2~770~-275~180~gge7812~0^^770~-275^^M 770 -275 h 20~#880000^^1~792~-272~0~SCK~start~~~#0000FF^^1~785~-276~0~2~end~~~#0000FF^^0~787~-275^^0~M 790 -272 L 793 -275 L 790 -278#@$P~show~0~3~770~-255~180~gge7819~0^^770~-255^^M 770 -255 h 20~#880000^^1~792~-252~0~MOSI~start~~~#0000FF^^1~785~-256~0~3~end~~~#0000FF^^0~787~-255^^0~M 790 -252 L 793 -255 L 790 -258#@$P~show~0~4~770~-235~180~gge7826~0^^770~-235^^M 770 -235 h 20~#880000^^1~792~-232~0~MISO~start~~~#0000FF^^1~785~-236~0~4~end~~~#0000FF^^0~787~-235^^0~M 790 -232 L 793 -235 L 790 -238#@$P~show~0~5~770~-215~180~gge7833~0^^770~-215^^M 770 -215 h 20~#880000^^1~792~-212~0~CS~start~~~#0000FF^^1~785~-216~0~5~end~~~#0000FF^^0~787~-215^^0~M 790 -212 L 793 -215 L 790 -218#@$P~show~0~6~770~-195~180~gge7840~0^^770~-195^^M 770 -195 h 20~#880000^^1~792~-192~0~GND~start~~~#0000FF^^1~785~-196~0~6~end~~~#0000FF^^0~787~-195^^0~M 790 -192 L 793 -195 L 790 -198#@$P~show~0~7~770~-175~180~gge7847~0^^770~-175^^M 770 -175 h 20~#880000^^1~792~-172~0~VCC~start~~~#0000FF^^1~785~-176~0~7~end~~~#0000FF^^0~787~-175^^0~M 790 -172 L 793 -175 L 790 -178#@$P~show~0~8~930~-235~0~gge7854~0^^930~-235^^M 930 -235 h -20~#880000^^1~908~-232~0~CAN H~end~~~#0000FF^^1~915~-236~0~8~start~~~#0000FF^^0~913~-235^^0~M 910 -238 L 907 -235 L 910 -232#@$P~show~0~9~930~-215~0~gge7861~0^^930~-215^^M 930 -215 h -20~#880000^^1~908~-212~0~CAN L~end~~~#0000FF^^1~915~-216~0~9~start~~~#0000FF^^0~913~-215^^0~M 910 -218 L 907 -215 L 910 -212#@$T~L~852.02~-162.75~270~#0000FF~~9pt~~~~comment~CAN BUS SHIELD 8MHz~1~start~gge7868~0~pinpart", - "W~770 -195 670 -195 670 -535~#008800~1~0~none~gge7870~0", - "W~770 -175 685 -175 685 -515~#008800~1~0~none~gge7871~0", - "W~770 -215 85 -215 85 -580 165 -580~#008800~1~0~none~gge7872~0", - "W~770 -275 700 -275 700 -400~#008800~1~0~none~gge7873~0", - "W~770 -235 715 -235 715 -575~#008800~1~0~none~gge7879~0", - "W~770 -255 730 -255 730 -595~#008800~1~0~none~gge7882~0", - "W~1010 -215 930 -215~#008800~1~0~none~gge7885~0", - "W~930 -235 1010 -235~#008800~1~0~none~gge7886~0", - "T~L~1015~-225~0~#0000FF~~9pt~~~~comment~To OBD-II CAN-LS~1~start~gge7887~0~pinpart", - "R~640~-340~~~490~230~#000000~1~0~none~gge7890~0~", - "T~L~645~-120~0~#0000FF~~9pt~~~~comment~Optional, only needed for in-car cracking. On-bench cracking does not need it~1~start~gge7891~0~pinpart", - "F~part_netLabel_+5V~420~-745~0~gge7893~~0^^420~-745^^+5V~#000000~410~-757~0~start~1~Times New Roman~9pt~flag_gge22^^PL~420 -755 420 -745~#000000~1~0~none~gge7897~0^^PL~415 -755 425 -755~#000000~1~0~transparent~gge7898~0", - "W~420 -745 420 -660~#008800~1~0~none~gge7905~0", - "F~part_netLabel_gnD~440~-185~0~gge7907~~0^^440~-185^^GND~#000000~427~-159~0~start~1~Times New Roman~9pt~flag_gge23^^PL~440 -175 440 -185~#000000~1~0~transparent~gge7911~0^^PL~431 -175 449 -175~#000000~1~0~transparent~gge7912~0^^PL~434 -173 446 -173~#000000~1~0~transparent~gge7913~0^^PL~437 -171 443 -171~#000000~1~0~transparent~gge7914~0^^PL~439 -169 441 -169~#000000~1~0~transparent~gge7915~0", - "W~440 -185 440 -535~#008800~1~0~none~gge7925~0", - "W~1005 -420 670 -420~#008800~1~0~none~gge7933~0", - "T~L~1015~-420~0~#0000FF~~9pt~~~~comment~To OBD-II GND~1~start~gge7935~0~pinpart", - "LIB~540~-285~package`DO-41_BD2.8-L4.2-P8.00-D0.7-FD`BOM_Supplier`LCSC`BOM_Manufacturer Part`1N4728A`BOM_Manufacturer`SEMTECH`image`//image.lceda.cn/szlcsc/C2531.jpg`BOM_Supplier Part`C2531`BOM_LCSC Assembly`Yes`SMT Type`Extend`spicePre`Z`spiceSymbolName`1N4728A`~90~0~gge3f21be00e8f23d5e~7fcb189e64fd42b08427a66afcf58e1b~e574ee768aa84dd7a6b8eba5b8c05001~0~~yes~yes#@$T~N~551~-272.5~0~#000080~Arial~~~~~comment~1N4728A~1~start~gge7938~0~#@$T~P~551~-281.5~0~#000080~Arial~~~~~comment~ZD1~1~start~gge7940~0~#@$P~show~0~1~540~-265~270~gge7980~0^^540~-265^^M 540 -265 v -15~#880000^^0~543~-283~270~A~start~~~#0000FF^^0~539~-274~270~1~end~~~#0000FF^^0~540~-277^^0~M 543 -280 L 540 -283 L 537 -280#@$P~show~0~2~540~-305~90~gge7987~0^^540~-305^^M 540 -305 v 15~#880000^^0~543~-287~270~K~end~~~#0000FF^^0~539~-296~270~2~start~~~#0000FF^^0~540~-293^^0~M 537 -290 L 540 -287 L 543 -290#@$PL~549 -295 545 -291 535 -291 531 -287~#880000~1~0~none~gge7994~0#@$PT~M 546 -280 L 540 -290 L 533 -280 Z ~#880000~1~0~#880000~gge7995~0~", - "W~540 -305 540 -345~#008800~1~0~none~gge8119~0", - "W~540 -265 540 -250 440 -250~#008800~1~0~none~gge8121~0", - "J~765~-595~2.5~#CC0000~gge1029~0", - "J~670~-535~2.5~#CC0000~gge7774~0", - "J~510~-535~2.5~#CC0000~gge7776~0", - "J~685~-515~2.5~#CC0000~gge7779~0", - "J~965~-555~2.5~#CC0000~gge7791~0", - "J~700~-400~2.5~#CC0000~gge7874~0", - "J~715~-575~2.5~#CC0000~gge7880~0", - "J~730~-595~2.5~#CC0000~gge7883~0", - "J~420~-660~2.5~#CC0000~gge7906~0", - "J~670~-420~2.5~#CC0000~gge7934~0", - "J~440~-535~2.5~#CC0000~gge7937~0", - "J~540~-345~2.5~#CC0000~gge8120~0", - "J~440~-250~2.5~#CC0000~gge8122~0" - ], - "BBox": { - "x": 0, - "y": -806.8, - "width": 1149, - "height": 808.1 - }, - "colors": [] - } - }, - { - "docType": "1", - "title": "Sheet_2", - "description": "", - "dataStr": { - "head": { - "docType": "1", - "editorVersion": "6.5.22", - "newgId": true, - "c_para": { - "Prefix Start": "1" - }, - "c_spiceCmd": "null", - "hasIdFlag": true, - "uuid": "b3839f8c6bfe4877907f76a611ae8261", - "x": "0", - "y": "0", - "portOfADImportHack": "", - "importFlag": 0, - "transformList": "" - }, - "canvas": "CA~1000~1000~#FFFFFF~yes~#CCCCCC~5~1000~1000~line~5~pixel~5~0~0", - "shape": [ - "LIB~0~-800~package`NONE`BOM_Manufacturer Part`?`spicePre`.`~~0~frame_lib_1~~~0~ceb4cd31705a7968~yes~yes~~~#@$T~N~571.39~-803~0~#000080~Arial~~~~~comment~A~0~start~gge77~0~pinpart#@$PT~M 206 -790 L 206 -800 M 206 -4 L 206 6 M 402 -790 L 402 -800 M 402 -4 L 402 6 M 598 -790 L 598 -800 M 598 -4 L 598 6 M 794 -790 L 794 -800 M 794 -4 L 794 6 M 990 -790 L 990 -800 M 990 -4 L 990 6 M 10 -594 L 0 -594 M 1139 -594 L 1149 -594 M 10 -398 L 0 -398 M 1139 -398 L 1149 -398 M 10 -202 L 0 -202 M 1139 -202 L 1149 -202 M 10 -6 L 0 -6 M 1139 -6 L 1149 -6~#880000~1~0~none~gge6~0~frame_tick#@$T~P~571.39~-812~0~#000080~Arial~~~~~comment~A~0~start~gge76~0~pinpart#@$T~L~1.5~-692~0~#880000~~~~~~comment~A~1~start~gge7~0~frame_tick#@$T~L~1140.5~-692~0~#880000~~~~~~comment~A~1~start~gge9~0~frame_tick#@$T~L~1.5~-496~0~#880000~~~~~~comment~B~1~start~gge11~0~frame_tick#@$T~L~1140.5~-496~0~#880000~~~~~~comment~B~1~start~gge13~0~frame_tick#@$T~L~1.5~-300~0~#880000~~~~~~comment~C~1~start~gge15~0~frame_tick#@$T~L~1140.5~-300~0~#880000~~~~~~comment~C~1~start~gge17~0~frame_tick#@$T~L~1.5~-104~0~#880000~~~~~~comment~D~1~start~gge19~0~frame_tick#@$T~L~1140.5~-104~0~#880000~~~~~~comment~D~1~start~gge21~0~frame_tick#@$T~L~108~-791.5~0~#880000~~~~~~comment~1~1~start~gge23~0~frame_tick#@$T~L~108~4.5~0~#880000~~~~~~comment~1~1~start~gge25~0~frame_tick#@$T~L~304~-791.5~0~#880000~~~~~~comment~2~1~start~gge27~0~frame_tick#@$T~L~304~4.5~0~#880000~~~~~~comment~2~1~start~gge29~0~frame_tick#@$T~L~500~-791.5~0~#880000~~~~~~comment~3~1~start~gge31~0~frame_tick#@$T~L~500~4.5~0~#880000~~~~~~comment~3~1~start~gge33~0~frame_tick#@$T~L~696~-791.5~0~#880000~~~~~~comment~4~1~start~gge35~0~frame_tick#@$T~L~696~4.5~0~#880000~~~~~~comment~4~1~start~gge37~0~frame_tick#@$T~L~892~-791.5~0~#880000~~~~~~comment~5~1~start~gge39~0~frame_tick#@$T~L~892~4.5~0~#880000~~~~~~comment~5~1~start~gge?~0~frame_tick#@$R~10~-790~~~1129~786~#880000~1~0~none~gge42~0~frame_innerbox#@$R~0~-800~~~1149~806~#880000~1~0~none~gge43~0~frame_outbox#@$R~694.99995~-84~~~444~80~#880000~1~0~none~gge44~0~frame_hitarea#@$PL~695.1 -44.75 1138.63 -44.75~#880000~1~0~none~gge45~0#@$PL~799.63 -24.75 1138.63 -24.75~#880000~1~0~none~gge46~0#@$PL~1059.61 -83.93 1059.63 -44.75~#880000~1~0~none~gge47~0#@$PL~1059.63 -44.75 1059.63 -24.75~#880000~1~0~none~gge48~0#@$T~L~699.99995~-71~0~#880000~~8pt~~~~comment~TITLE:~1~start~gge49~0~pinpart#@$T~L~757.62495~-58.41~0~#0000FF~~10pt~~~~comment~Volvo CEM cracker (P1, P2, P3)~1~start~gge51~0~frame_title#@$T~L~1064.62495~-57.75~0~#880000~~8pt~~~~comment~REV:~1~start~gge53~0~pinpart#@$T~L~1102.62495~-57.75~0~#0000FF~~9pt~~~~comment~2.01~1~start~gge55~0~frame_version#@$T~L~804.62495~-9~0~#880000~~8pt~~~~comment~Date:~1~start~gge57~0~pinpart#@$T~L~851.62495~-8.52~0~#0000FF~~9pt~~~~comment~2022-01-09~1~start~gge59~0~frame_date#@$T~L~1063.62495~-29~0~#880000~~8pt~~~~comment~Sheet:~1~start~gge61~0~pinpart#@$T~L~1108.62495~-28.52~0~#0000FF~~9pt~~~~comment~1/1~1~start~gge63~0~frame_sheet#@$T~L~943.62495~-8.75~0~#880000~~8pt~~~~comment~Drawn By:~1~start~gge65~0~pinpart#@$T~L~1008.63~-8.75~0~#0000FF~~9pt~~~~comment~vtl~1~start~gge67~0~frame_drawn#@$T~L~804.62495~-30.75~0~#880000~~8pt~~~~comment~Company:~1~start~gge69~0~pinpart#@$T~L~871.24995~-30.64~0~#0000FF~~9pt~~~~comment~Kitchen office~1~start~gge71~0~frame_company#@$PL~799.63 -44.75 799.63 -4.75~#880000~1~0~none~gge73~0#@$Pimage~L~1~gge74~0~gge75~694.99995~-32~104~20~data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4wLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0i5Zu+5bGCXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iNTIwIg0KCSB2aWV3Qm94PSIwIDAgMTY5Mi45IDM0MS41IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxNjkyLjkgMzQxLjU7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLnN0MHtmaWxsOiM1NTg4RkY7fQ0KPC9zdHlsZT4NCjxnPg0KCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik05MDEuNywxNjEuMWMyLjMtMS44LDUuMS0yLjcsOC4zLTIuN2M0LjMsMCw4LjksMS42LDEzLjgsNC43YzQuOSwzLjEsOS42LDgsMTQuMSwxNC43bDE3LjQtMjcuOQ0KCQljLTUuNC03LjgtMTIuMS0xMy45LTIwLjItMTguMmMtOC4xLTQuMy0xNi43LTYuNC0yNS43LTYuNGMtMTIuOCwwLTI0LDMuOS0zMy40LDExLjdjLTkuNCw3LjgtMTQuMSwxOC0xNC4xLDMwLjQNCgkJYzAsOC45LDMsMTcuNCw5LDI1LjRjNC4zLDUuNywxMi4xLDEyLjYsMjMuMywyMC42YzkuNyw2LjksMTUuNywxMS43LDE3LjksMTQuNGMyLjIsMi43LDMuMyw1LjMsMy4zLDcuOWMwLDMuMi0xLjQsNS45LTQuMyw4LjMNCgkJYy0yLjksMi4zLTYuNywzLjUtMTEuNSwzLjVjLTEyLjEsMC0yMy4zLTYuNy0zMy41LTIwLjJsLTIyLjUsMjYuMmMxMCwxMC42LDE5LjEsMTgsMjcuMiwyMmM4LjEsNCwxNy4yLDYsMjcuMSw2DQoJCWMxNy4yLDAsMzAuMy00LjksMzkuNC0xNC43YzkuMS05LjgsMTMuNi0yMC4zLDEzLjYtMzEuM2MwLTguNC0yLjItMTYuMS02LjYtMjMuM2MtNC40LTcuMS0xMy42LTE1LjctMjcuNi0yNS43DQoJCWMtOC44LTYuMy0xNC0xMC41LTE1LjctMTIuN2MtMS44LTIuMi0yLjctNC40LTIuNy02LjZDODk4LjIsMTY0LjksODk5LjQsMTYyLjksOTAxLjcsMTYxLjF6Ii8+DQoJPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIxMDM4LjcsMjE3LjIgMTAwOS44LDEyOS4xIDk3NCwxMjkuMSAxMDE1LjgsMjU3LjQgOTczLjYsMzMyIDEwMTIuMSwzMzIgMTEyOC44LDEyOS4xIDEwODkuNSwxMjkuMSAJDQoJCSIvPg0KCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik02NTEuNSwxNTQuMWwtNzAuNCwwbDUuOC00MS43YzAsMCw3NC43LTAuMSw3NS4xLTAuMWM5LjgsMCwxNy44LTgsMTcuOC0xNy44YzAtOS44LTgtMTcuOC0xNy44LTE3LjgNCgkJYy0wLjMsMC0xMDguNCwwLTEwOC40LDBMNTI2LDI3Ny43aDExMy4ydjBjOS41LTAuMiwxNy4yLTgsMTcuMi0xNy41YzAtOS43LTcuOS0xNy42LTE3LjYtMTcuNmMtMC40LDAtNzAuMiwwLjEtNzAuMiwwLjFsNy40LTUzLjMNCgkJYzAsMCw3MS43LDAuMSw3Mi4zLDAuMWM5LjgsMCwxNy44LTgsMTcuOC0xNy44QzY2Ni4zLDE2Mi44LDY1OS45LDE1NS41LDY1MS41LDE1NC4xeiIvPg0KCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMjY4LjQsNzYuOGMtMC4zLDAtMTA4LjQsMC0xMDguNCwwbC0yNy40LDIwMC44aDExMy4zdjBjOS41LTAuMiwxNy4yLTgsMTcuMi0xNy41YzAtOS43LTcuOS0xNy42LTE3LjYtMTcuNg0KCQljLTAuNCwwLTcwLjIsMC4xLTcwLjIsMC4xbDcuNC01My4zYzAsMCw3MS43LDAuMSw3Mi40LDAuMWM5LjgsMCwxNy44LTgsMTcuOC0xNy44YzAtOC44LTYuNC0xNi4xLTE0LjgtMTcuNWwtNzAuNCwwbDUuOC00MS43DQoJCWMwLDAsNzQuNy0wLjEsNzUuMS0wLjFjOS44LDAsMTcuOC04LDE3LjgtMTcuOEMxMjg2LjIsODQuOCwxMjc4LjMsNzYuOCwxMjY4LjQsNzYuOHoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTQ3MC43LDE3M2MwLTE5LjctNC42LTM3LjItMTMuNy01Mi4zYy05LjEtMTUuMS0yMC45LTI2LjItMzUuNS0zMy4yYy0xNC42LTcuMS0zNi43LTEwLjYtNjYuNi0xMC42aC0zMS44DQoJCWwtMjcuNCwyMDAuOGg2Mi40YzI2LjIsMCw0Ni43LTMuOSw2MS40LTExLjdjMTQuNy03LjgsMjctMjAuMiwzNi43LTM3LjFDMTQ2NS45LDIxMS45LDE0NzAuNywxOTMuMywxNDcwLjcsMTczeiBNMTQyMS4zLDIxNC41DQoJCWMtNy4zLDExLTE2LjksMTguOC0yOC45LDIzLjNjLTguNiwzLjItMjIuNCw0LjgtNDEuNSw0LjhoLTEyLjRsMTcuNy0xMzAuNGg5LjVjMTUuNSwwLDI3LjksMi40LDM3LjIsNy4zDQoJCWM5LjMsNC45LDE2LjUsMTEuOCwyMS43LDIwLjhjNS4xLDksNy43LDIwLjEsNy43LDMzLjRDMTQzMi4yLDE4OS44LDE0MjguNiwyMDMuNSwxNDIxLjMsMjE0LjV6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTTE2MTkuMiwxNzAuN2wtMjIuMywxMi4zYy0xLjgsMTYuMi0xNS42LDI4LjctMzIuMiwyOC43Yy0xNy45LDAtMzIuNC0xNC41LTMyLjQtMzIuNA0KCQljMC0xNy45LDE0LjUtMzIuNCwzMi40LTMyLjRjNi45LDAsMTMuMywyLjIsMTguNSw1LjhsMjcuNy0xNS4zbC0xNS02MC4yaC0zMS43bC0xMDgsMjAwaDQwLjRsMjIuOC00Mi42aDc5LjRsMTAuNiw0Mi42aDM2LjQNCgkJTDE2MTkuMiwxNzAuN3oiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTU1Mi44LDE3OC41YzAsNi45LDUuNiwxMi41LDEyLjUsMTIuNWM2LjksMCwxMi41LTUuNiwxMi41LTEyLjVjMC02LjktNS42LTEyLjUtMTIuNS0xMi41DQoJCUMxNTU4LjQsMTY2LDE1NTIuOCwxNzEuNiwxNTUyLjgsMTc4LjV6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTTgxNC44LDE1Mi41QzgxNC44LDE1Mi41LDgxNC44LDE1Mi40LDgxNC44LDE1Mi41bC0xMi41LDBsLTEuMy0yLjRjLTUuMS04LjEtMTEuNS0xNC4yLTE5LjItMTguNA0KCQljLTcuOC00LjItMjAuMS02LjMtMjkuMy02LjNjLTEzLjcsMC0yNi44LDMuNy0zOS4zLDExLjFjLTEyLjUsNy40LTIyLjUsMTcuNy0yOS45LDMxYy03LjQsMTMuMi0xMS4yLDI3LjItMTEuMiw0MS44DQoJCWMwLDE5LjIsNS44LDM2LDE3LjQsNTAuNWMxMS42LDE0LjUsMjcuMywyMS43LDQ3LDIxLjdjOC42LDAsMTYuMy0xLjQsMjMuMi00LjRjNi45LTIuOSwxNC4zLTgsMjIuMi0xNS40YzAsMCw5LjMsOC4xLDkuNCw4DQoJCWM1LjgsNC42LDEzLDcuNSwyMC44LDhoMy42bDAuNS00LjNsMTIuNy0xMDYuOWMtMC4xLDAtMC4xLDAtMC4yLDBDODI4LjcsMTU4LjgsODIyLjUsMTUyLjYsODE0LjgsMTUyLjV6IE03ODUuNiwyMjQuMg0KCQljLTQuNSw4LjUtMTAuMSwxNC44LTE2LjgsMTguOGMtNi43LDQtMTQuNSw2LTIzLjUsNmMtMTAuOCwwLTE5LjYtMy41LTI2LjUtMTAuN2MtNi45LTcuMS0xMC4zLTE2LjUtMTAuMy0yOC4xDQoJCWMwLTE1LjEsNC41LTI3LjQsMTMuNi0zN2M5LjEtOS42LDIwLjEtMTQuMywzMy4xLTE0LjNjMTEuMiwwLDIwLjIsMy42LDI3LDEwLjdjNi44LDcuMiwxMC4yLDE2LjYsMTAuMiwyOC40DQoJCUM3OTIuNCwyMDYuOSw3OTAuMSwyMTUuNyw3ODUuNiwyMjQuMnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNNDA0LjMsOTYuM2MtNy41LTE5LjktMTkuNy0zNy44LTM1LjgtNTIuM2MtMjQuNy0yMi4yLTU2LjctMzQuNS05MC0zNC41Yy0yOC44LDAtNTYuMyw5LTc5LjUsMjYNCgkJYy0xMS4yLDguMi0yMC45LDE3LjktMjguOSwyOC45Yy01LTAuNy0xMC4xLTEuMS0xNS4zLTEuMWMtMjguNywwLTU1LjgsMTEuMi03Ni4xLDMxLjVjLTIwLjMsMjAuMy0zMS41LDQ3LjMtMzEuNSw3Ni4xDQoJCWMwLDI2LjcsOS45LDUyLjMsMjcuOCw3Mi4xYzE0LjIsMTUuNywzMi42LDI2LjgsNTIuOSwzMmM4LjgsMjYuMiwzMy42LDQ1LjEsNjIuNyw0NS4xYzM2LjUsMCw2Ni4yLTI5LjcsNjYuMi02Ni4yDQoJCWMwLTIuMS0wLjEtNC4zLTAuMy02LjRsOTIuOS00OC44bC0yMC4zLTM1LjJsLTg4LjgsNDYuNmMtMTIuMS0xMy44LTI5LjktMjIuNS00OS43LTIyLjVjLTI4LjcsMC01My4yLDE4LjQtNjIuNCw0NA0KCQljLTIzLjQtMTAuMy0zOS44LTMzLjYtMzkuOC02MC44YzAtMzYuNiwyOS43LTY2LjQsNjYuNC02Ni40YzEyLjksMCwyNSwzLjcsMzUuMiwxMC4xYzEyLjMtMzcuMSw0Ny4zLTYzLjksODguNS02My45DQoJCWM0OCwwLDg3LjQsMzYuMiw5Mi43LDgyLjdjMS43LTAuMiwzLjQtMC4zLDUuMS0wLjNjMjguNywwLDUyLDIzLjMsNTIsNTJjMCwyNy4yLTIwLjksNDkuNS00Ny41LDUxLjhsLTI5LjcsMA0KCQljLTEuMy0wLjMtMi43LTAuNC00LjEtMC40Yy0xMS41LDAtMjAuOCw5LjMtMjAuOCwyMC44YzAsMTAuOSw4LjQsMTkuOCwxOS4xLDIwLjd2MC4ybDM1LjUsMGwxLjgsMGwxLjgtMC4yDQoJCWMyMy4yLTIsNDQuNy0xMi41LDYwLjUtMjkuN2MxNS45LTE3LjMsMjQuNy0zOS43LDI0LjctNjMuMkM0NjkuNiwxNDMuNiw0NDIuMSwxMDguMiw0MDQuMyw5Ni4zeiBNMTkwLjYsMjI4LjMNCgkJYzE0LjEsMCwyNS42LDExLjUsMjUuNiwyNS42YzAsMTQuMS0xMS41LDI1LjYtMjUuNiwyNS42Yy0xNC4xLDAtMjUuNi0xMS41LTI1LjYtMjUuNkMxNjUsMjM5LjgsMTc2LjUsMjI4LjMsMTkwLjYsMjI4LjN6Ii8+DQo8L2c+DQo8L3N2Zz4NCg==", - "LIB~260~-555~package`TEENSY4.0_BASIC`BOM_Manufacturer`PJRC`BOM_Manufacturer Part``BOM_Supplier Part``BOM_Supplier`PJRC`link`https://www.pjrc.com/store/teensy40.html`Contributor`Chris Gscheidle`spicePre`T`spiceSymbolName`TEENSY4.0_BASIC`~~0~ggee2ba2947d63ab829~a3b7a8434ff04a2ca99cf9739ee69737~b348f28f884148858e812d428df38098~0~d55c16187530ec8a~yes~yes~~~#@$T~N~254.55~-638~0~#000080~Arial~~~~~comment~TEENSY4.0_BASIC~1~start~gge81~0~pinpart#@$T~P~254.55~-647.14~0~#000080~Arial~~~~~comment~T2~1~start~gge83~0~pinpart#@$T~L~227.55~-590.26~0~#0000FF~~9pt~~~~comment~Teensy 4.0~1~start~gge85~0~pinpart#@$R~180~-635~~~160~300~#000000~1~0~none~gge87~0~#@$P~show~0~26~360~-615~0~gge88~0^^360~-615^^M 360 -615 h -20~#880000^^1~338~-612~0~Vin~end~~~#0000FF^^1~345~-616~0~33~start~~~#0000FF^^0~343~-615^^0~M 340 -618 L 337 -615 L 340 -612#@$P~show~0~25~360~-595~0~gge95~0^^360~-595^^M 360 -595 h -20~#880000^^1~338~-592~0~GND~end~~~#0000FF^^1~345~-596~0~32~start~~~#0000FF^^0~343~-595^^0~M 340 -598 L 337 -595 L 340 -592#@$P~show~0~24~360~-575~0~gge102~0^^360~-575^^M 360 -575 h -20~#880000^^1~338~-572~0~3.3V~end~~~#0000FF^^1~345~-576~0~31~start~~~#0000FF^^0~343~-575^^0~M 340 -578 L 337 -575 L 340 -572#@$P~show~0~23~360~-555~0~gge109~0^^360~-555^^M 360 -555 h -20~#880000^^1~338~-552~0~A9/23~end~~~#0000FF^^1~345~-556~0~30~start~~~#0000FF^^0~343~-555^^0~M 340 -558 L 337 -555 L 340 -552#@$P~show~0~22~360~-535~0~gge116~0^^360~-535^^M 360 -535 h -20~#880000^^1~338~-532~0~A8/22~end~~~#0000FF^^1~345~-536~0~29~start~~~#0000FF^^0~343~-535^^0~M 340 -538 L 337 -535 L 340 -532#@$P~show~0~21~360~-515~0~gge123~0^^360~-515^^M 360 -515 h -20~#880000^^1~338~-512~0~A7/21~end~~~#0000FF^^1~345~-516~0~28~start~~~#0000FF^^0~343~-515^^0~M 340 -518 L 337 -515 L 340 -512#@$P~show~0~20~360~-495~0~gge130~0^^360~-495^^M 360 -495 h -20~#880000^^1~338~-492~0~A6/20~end~~~#0000FF^^1~345~-496~0~27~start~~~#0000FF^^0~343~-495^^0~M 340 -498 L 337 -495 L 340 -492#@$P~show~0~19~360~-475~0~gge137~0^^360~-475^^M 360 -475 h -20~#880000^^1~338~-472~0~SCL0/A5/19~end~~~#0000FF^^1~345~-476~0~26~start~~~#0000FF^^0~343~-475^^0~M 340 -478 L 337 -475 L 340 -472#@$P~show~0~18~360~-455~0~gge144~0^^360~-455^^M 360 -455 h -20~#880000^^1~338~-452~0~SDA0/A4/18~end~~~#0000FF^^1~345~-456~0~25~start~~~#0000FF^^0~343~-455^^0~M 340 -458 L 337 -455 L 340 -452#@$P~show~0~17~360~-435~0~gge151~0^^360~-435^^M 360 -435 h -20~#880000^^1~338~-432~0~SDA1/A3/17~end~~~#0000FF^^1~345~-436~0~24~start~~~#0000FF^^0~343~-435^^0~M 340 -438 L 337 -435 L 340 -432#@$P~show~0~16~360~-415~0~gge158~0^^360~-415^^M 360 -415 h -20~#880000^^1~338~-412~0~SCL1/A2/16~end~~~#0000FF^^1~345~-416~0~23~start~~~#0000FF^^0~343~-415^^0~M 340 -418 L 337 -415 L 340 -412#@$P~show~0~15~360~-395~0~gge165~0^^360~-395^^M 360 -395 h -20~#880000^^1~338~-392~0~A1/15~end~~~#0000FF^^1~345~-396~0~22~start~~~#0000FF^^0~343~-395^^0~M 340 -398 L 337 -395 L 340 -392#@$P~show~0~14~360~-375~0~gge172~0^^360~-375^^M 360 -375 h -20~#880000^^1~338~-372~0~A0/14~end~~~#0000FF^^1~345~-376~0~21~start~~~#0000FF^^0~343~-375^^0~M 340 -378 L 337 -375 L 340 -372#@$P~show~0~13~360~-355~0~gge179~0^^360~-355^^M 360 -355 h -20~#880000^^1~338~-352~0~SCK/LED/13~end~~~#0000FF^^1~345~-356~0~20~start~~~#0000FF^^0~343~-355^^0~M 340 -358 L 337 -355 L 340 -352#@$P~show~0~12~160~-355~180~gge186~0^^160~-355^^M 160 -355 h 20~#880000^^1~182~-352~0~12/MISO~start~~~#0000FF^^1~175~-356~0~14~end~~~#0000FF^^0~177~-355^^0~M 180 -352 L 183 -355 L 180 -358#@$P~show~0~11~160~-375~180~gge193~0^^160~-375^^M 160 -375 h 20~#880000^^1~182~-372~0~11/MOSI~start~~~#0000FF^^1~175~-376~0~13~end~~~#0000FF^^0~177~-375^^0~M 180 -372 L 183 -375 L 180 -378#@$P~show~0~10~160~-395~180~gge200~0^^160~-395^^M 160 -395 h 20~#880000^^1~182~-392~0~10/CS~start~~~#0000FF^^1~175~-396~0~12~end~~~#0000FF^^0~177~-395^^0~M 180 -392 L 183 -395 L 180 -398#@$P~show~0~9~160~-415~180~gge207~0^^160~-415^^M 160 -415 h 20~#880000^^1~182~-412~0~9~start~~~#0000FF^^1~175~-416~0~11~end~~~#0000FF^^0~177~-415^^0~M 180 -412 L 183 -415 L 180 -418#@$P~show~0~8~160~-435~180~gge214~0^^160~-435^^M 160 -435 h 20~#880000^^1~182~-432~0~8~start~~~#0000FF^^1~175~-436~0~10~end~~~#0000FF^^0~177~-435^^0~M 180 -432 L 183 -435 L 180 -438#@$P~show~0~7~160~-455~180~gge221~0^^160~-455^^M 160 -455 h 20~#880000^^1~182~-452~0~7~start~~~#0000FF^^1~175~-456~0~9~end~~~#0000FF^^0~177~-455^^0~M 180 -452 L 183 -455 L 180 -458#@$P~show~0~6~160~-475~180~gge228~0^^160~-475^^M 160 -475 h 20~#880000^^1~182~-472~0~6~start~~~#0000FF^^1~175~-476~0~8~end~~~#0000FF^^0~177~-475^^0~M 180 -472 L 183 -475 L 180 -478#@$P~show~0~5~160~-495~180~gge235~0^^160~-495^^M 160 -495 h 20~#880000^^1~182~-492~0~5~start~~~#0000FF^^1~175~-496~0~7~end~~~#0000FF^^0~177~-495^^0~M 180 -492 L 183 -495 L 180 -498#@$P~show~0~4~160~-515~180~gge242~0^^160~-515^^M 160 -515 h 20~#880000^^1~182~-512~0~4~start~~~#0000FF^^1~175~-516~0~6~end~~~#0000FF^^0~177~-515^^0~M 180 -512 L 183 -515 L 180 -518#@$P~show~0~3~160~-535~180~gge249~0^^160~-535^^M 160 -535 h 20~#880000^^1~182~-532~0~3~start~~~#0000FF^^1~175~-536~0~5~end~~~#0000FF^^0~177~-535^^0~M 180 -532 L 183 -535 L 180 -538#@$P~show~0~2~160~-555~180~gge256~0^^160~-555^^M 160 -555 h 20~#880000^^1~182~-552~0~2~start~~~#0000FF^^1~175~-556~0~4~end~~~#0000FF^^0~177~-555^^0~M 180 -552 L 183 -555 L 180 -558#@$P~show~0~1~160~-575~180~gge263~0^^160~-575^^M 160 -575 h 20~#880000^^1~182~-572~0~1~start~~~#0000FF^^1~175~-576~0~3~end~~~#0000FF^^0~177~-575^^0~M 180 -572 L 183 -575 L 180 -578#@$P~show~0~1~160~-595~180~gge270~0^^160~-595^^M 160 -595 h 20~#880000^^1~182~-592~0~0~start~~~#0000FF^^1~175~-596~0~2~end~~~#0000FF^^0~177~-595^^0~M 180 -592 L 183 -595 L 180 -598#@$P~show~0~1~160~-615~180~gge277~0^^160~-615^^M 160 -615 h 20~#880000^^1~182~-612~0~GND~start~~~#0000FF^^1~175~-616~0~1~end~~~#0000FF^^0~177~-615^^0~M 180 -612 L 183 -615 L 180 -618", - "LIB~695~-590~package`SOIC-8_L4.9-W3.9-P1.27-LS6.0-BL`BOM_Supplier`LCSC`BOM_Manufacturer`TI`BOM_Manufacturer Part`SN65HVD230DR`image`//image.lceda.cn/szlcsc/C12084.jpg`BOM_Supplier Part`C12084`SMT Type`Basic`BOM_JLCPCB SMD`Yes`BOM_LCSC Assembly`Yes`BOM_Assembly Type`smtWeld`BOM_Paste Type`base`spicePre`U`spiceSymbolName`SN65HVD230DR`~~0~gge908538eecf92504e~fea11772be3e46fc9943dcf3594665f6~776fa0316e7c39fb77607054956fed3c~0~e967e4613c097eed~yes~yes~~~#@$T~N~689.04~-618~0~#000080~Arial~~~~~comment~SN65HVD230DR~1~start~gge532~0~pinpart#@$T~P~689.04~-627~0~#000080~Arial~~~~~comment~U3~1~start~gge534~0~pinpart#@$R~665~-615~2~2~60~50~#880000~1~0~none~gge536~0~#@$E~670~-610~1.5~1.5~#880000~1~0~#880000~gge537~0#@$P~show~0~1~655~-605~180~gge538~0^^655~-605^^M 655 -605 h 10~#880000^^1~668.7~-601~0~D~start~~~#0000FF^^1~664.5~-606~0~1~end~~~#0000FF^^0~662~-605^^0~M 665 -602 L 668 -605 L 665 -608#@$P~show~0~2~655~-595~180~gge545~0^^655~-595^^M 655 -595 h 10~#000000^^1~668.7~-591~0~GND~start~~~#000000^^1~664.5~-596~0~2~end~~~#000000^^0~662~-595^^0~M 665 -592 L 668 -595 L 665 -598#@$P~show~0~3~655~-585~180~gge552~0^^655~-585^^M 655 -585 h 10~#FF0000^^1~668.7~-581~0~VCC~start~~~#FF0000^^1~664.5~-586~0~3~end~~~#FF0000^^0~662~-585^^0~M 665 -582 L 668 -585 L 665 -588#@$P~show~0~4~655~-575~180~gge559~0^^655~-575^^M 655 -575 h 10~#880000^^1~668.7~-571~0~R~start~~~#0000FF^^1~664.5~-576~0~4~end~~~#0000FF^^0~662~-575^^0~M 665 -572 L 668 -575 L 665 -578#@$P~show~0~5~735~-575~0~gge566~0^^735~-575^^M 735 -575 h -10~#880000^^1~721.3~-571~0~VREF~end~~~#0000FF^^1~725.5~-576~0~5~start~~~#0000FF^^0~728~-575^^0~M 725 -578 L 722 -575 L 725 -572#@$P~show~0~6~735~-585~0~gge573~0^^735~-585^^M 735 -585 h -10~#880000^^1~721.3~-581~0~CANL~end~~~#0000FF^^1~725.5~-586~0~6~start~~~#0000FF^^0~728~-585^^0~M 725 -588 L 722 -585 L 725 -582#@$P~show~0~7~735~-595~0~gge580~0^^735~-595^^M 735 -595 h -10~#880000^^1~721.3~-591~0~CANH~end~~~#0000FF^^1~725.5~-596~0~7~start~~~#0000FF^^0~728~-595^^0~M 725 -598 L 722 -595 L 725 -592#@$P~show~0~8~735~-605~0~gge587~0^^735~-605^^M 735 -605 h -10~#880000^^1~721.3~-601~0~RS~end~~~#0000FF^^1~725.5~-606~0~8~start~~~#0000FF^^0~728~-605^^0~M 725 -608 L 722 -605 L 725 -602", - "LIB~695~-440~package`SOIC-8_L4.9-W3.9-P1.27-LS6.0-BL`BOM_Supplier`LCSC`BOM_Manufacturer`TI`BOM_Manufacturer Part`SN65HVD230DR`image`//image.lceda.cn/szlcsc/C12084.jpg`BOM_Supplier Part`C12084`SMT Type`Basic`BOM_JLCPCB SMD`Yes`BOM_LCSC Assembly`Yes`BOM_Assembly Type`smtWeld`BOM_Paste Type`base`spicePre`U`spiceSymbolName`SN65HVD230DR`~~0~gge47c992581f87ca45~fea11772be3e46fc9943dcf3594665f6~776fa0316e7c39fb77607054956fed3c~0~9b451c0ee1a36020~yes~yes~~~#@$T~N~689.04~-468~0~#000080~Arial~~~~~comment~SN65HVD230DR~1~start~gge596~0~pinpart#@$T~P~689.04~-477~0~#000080~Arial~~~~~comment~U5~1~start~gge598~0~pinpart#@$R~665~-465~2~2~60~50~#880000~1~0~none~gge600~0~#@$E~670~-460~1.5~1.5~#880000~1~0~#880000~gge601~0#@$P~show~0~1~655~-455~180~gge602~0^^655~-455^^M 655 -455 h 10~#880000^^1~668.7~-451~0~D~start~~~#0000FF^^1~664.5~-456~0~1~end~~~#0000FF^^0~662~-455^^0~M 665 -452 L 668 -455 L 665 -458#@$P~show~0~2~655~-445~180~gge609~0^^655~-445^^M 655 -445 h 10~#000000^^1~668.7~-441~0~GND~start~~~#000000^^1~664.5~-446~0~2~end~~~#000000^^0~662~-445^^0~M 665 -442 L 668 -445 L 665 -448#@$P~show~0~3~655~-435~180~gge616~0^^655~-435^^M 655 -435 h 10~#FF0000^^1~668.7~-431~0~VCC~start~~~#FF0000^^1~664.5~-436~0~3~end~~~#FF0000^^0~662~-435^^0~M 665 -432 L 668 -435 L 665 -438#@$P~show~0~4~655~-425~180~gge623~0^^655~-425^^M 655 -425 h 10~#880000^^1~668.7~-421~0~R~start~~~#0000FF^^1~664.5~-426~0~4~end~~~#0000FF^^0~662~-425^^0~M 665 -422 L 668 -425 L 665 -428#@$P~show~0~5~735~-425~0~gge630~0^^735~-425^^M 735 -425 h -10~#880000^^1~721.3~-421~0~VREF~end~~~#0000FF^^1~725.5~-426~0~5~start~~~#0000FF^^0~728~-425^^0~M 725 -428 L 722 -425 L 725 -422#@$P~show~0~6~735~-435~0~gge637~0^^735~-435^^M 735 -435 h -10~#880000^^1~721.3~-431~0~CANL~end~~~#0000FF^^1~725.5~-436~0~6~start~~~#0000FF^^0~728~-435^^0~M 725 -438 L 722 -435 L 725 -432#@$P~show~0~7~735~-445~0~gge644~0^^735~-445^^M 735 -445 h -10~#880000^^1~721.3~-441~0~CANH~end~~~#0000FF^^1~725.5~-446~0~7~start~~~#0000FF^^0~728~-445^^0~M 725 -448 L 722 -445 L 725 -442#@$P~show~0~8~735~-455~0~gge651~0^^735~-455^^M 735 -455 h -10~#880000^^1~721.3~-451~0~RS~end~~~#0000FF^^1~725.5~-456~0~8~start~~~#0000FF^^0~728~-455^^0~M 725 -458 L 722 -455 L 725 -452", - "W~360 -595 655 -595~#008800~1~0~none~gge722~0", - "W~655 -445 605 -445 605 -595~#008800~1~0~none~gge723~0", - "W~360 -575 590 -575 590 -435 655 -435~#008800~1~0~none~gge726~0", - "W~655 -585 590 -585 590 -575~#008800~1~0~none~gge727~0", - "LIB~690~-535~package`RES-TH_BD1.8-L3.2-P7.20-D0.4`BOM_Supplier`LCSC`BOM_Supplier Part`C714232`BOM_Manufacturer`Huaxing Mechanical-Elec.`BOM_Manufacturer Part`CF1/6W-10KΩ±5%T52`nameAlias`Resistance (Ohms)`Contributor`LCSC`spicePre`R`spiceSymbolName`CF1/6W-10KΩ±5%T52`~~0~gge2959b8d3bdb64490~97467e7cb6374f7e9dd7fc644a47cfb1~2ba8a26395ab41a2a00f577110f8f3f7~0~d35ec9c02706e5b4~yes~yes~~~#@$T~N~684.04~-543~0~#000080~Arial~~~~~comment~10kΩ~1~start~gge1437~0~pinpart#@$T~P~684.04~-552~0~#000080~Arial~~~~~comment~R1~1~start~gge1439~0~pinpart#@$R~680~-540~~~20~10~#A00000~1~0~none~gge1441~0~#@$P~show~0~2~710~-535~0~gge1442~0^^710~-535^^M 700 -535 h 10~#800^^0~696~-535~0~2~end~~~#800^^0~704~-539~0~2~start~~~#800^^0~723~-535^^0~M 720 -538 L 717 -535 L 720 -532#@$P~show~0~1~670~-535~180~gge1449~0^^670~-535^^M 680 -535 h -10~#800^^0~684~-535~0~1~start~~~#800^^0~676~-539~0~1~end~~~#800^^0~657~-535^^0~M 660 -532 L 663 -535 L 660 -538", - "LIB~690~-500~package`RES-TH_BD1.8-L3.2-P7.20-D0.4`BOM_Supplier`LCSC`BOM_Supplier Part`C714232`BOM_Manufacturer`Huaxing Mechanical-Elec.`BOM_Manufacturer Part`CF1/6W-10KΩ±5%T52`nameAlias`Resistance (Ohms)`Contributor`LCSC`spicePre`R`spiceSymbolName`CF1/6W-10KΩ±5%T52`~~0~ggee1386a99ff260a38~97467e7cb6374f7e9dd7fc644a47cfb1~2ba8a26395ab41a2a00f577110f8f3f7~0~eacc7c0603b7862c~yes~yes~~~#@$T~N~684.04~-508~0~#000080~Arial~~~~~comment~10kΩ~1~start~gge1458~0~pinpart#@$T~P~684.04~-517~0~#000080~Arial~~~~~comment~R2~1~start~gge1460~0~pinpart#@$R~680~-505~~~20~10~#A00000~1~0~none~gge1462~0~#@$P~show~0~2~710~-500~0~gge1463~0^^710~-500^^M 700 -500 h 10~#800^^0~696~-500~0~2~end~~~#800^^0~704~-504~0~2~start~~~#800^^0~723~-500^^0~M 720 -503 L 717 -500 L 720 -497#@$P~show~0~1~670~-500~180~gge1470~0^^670~-500^^M 680 -500 h -10~#800^^0~684~-500~0~1~start~~~#800^^0~676~-504~0~1~end~~~#800^^0~657~-500^^0~M 660 -497 L 663 -500 L 660 -503", - "W~670 -535 605 -535~#008800~1~0~none~gge1498~0", - "W~670 -500 605 -500~#008800~1~0~none~gge1500~0", - "W~710 -500 765 -500 765 -455 735 -455~#008800~1~0~none~gge1502~0", - "W~710 -535 765 -535 765 -605 735 -605~#008800~1~0~none~gge1503~0", - "LIB~885~-590~package`RES-TH_BD5.0-L15.5-P19.50-D0.7`BOM_Supplier`LCSC`BOM_Supplier Part`C433818`BOM_Manufacturer`TyoHM`BOM_Manufacturer Part`RD 3WS 120R J T/B A1`nameAlias`Resistance (Ohms)`Contributor`LCSC`BOM_LCSC Assembly`Yes`SMT Type`Extend`BOM_Assembly Type`manualWeld`BOM_Paste Type`expand`spicePre`R`spiceSymbolName`RD 3WS 120R J T/B A1`~270~0~gge7f715858276cf6e5~3555ffdfa5e3425c8467c785b518656f~2639a9f7c811489d8ec8c3971e2c7d50~0~f18df8c71ded6229~yes~yes~~~#@$T~N~892~-577.5~0~#000080~Arial~~~~~comment~120~1~start~gge1504~0~pinpart#@$T~P~892~-586.5~0~#000080~Arial~~~~~comment~R3~1~start~gge1506~0~pinpart#@$P~show~0~1~885~-610~90~gge1508~0^^885~-610^^M 885 -600 v -10~#800^^0~885~-596~270~1~end~~~#800^^0~881~-604~270~1~start~~~#800^^0~885~-623^^0~M 882 -620 L 885 -617 L 888 -620#@$P~show~0~2~885~-570~270~gge1515~0^^885~-570^^M 885 -580 v 10~#800^^0~885~-584~270~2~start~~~#800^^0~881~-576~270~2~end~~~#800^^0~885~-557^^0~M 888 -560 L 885 -563 L 882 -560#@$R~880~-600~~~10~20~#A00000~1~0~none~gge1522~0~", - "LIB~885~-440~package`RES-TH_BD5.0-L15.5-P19.50-D0.7`BOM_Supplier`LCSC`BOM_Supplier Part`C433818`BOM_Manufacturer`TyoHM`BOM_Manufacturer Part`RD 3WS 120R J T/B A1`nameAlias`Resistance (Ohms)`Contributor`LCSC`BOM_LCSC Assembly`Yes`SMT Type`Extend`BOM_Assembly Type`manualWeld`BOM_Paste Type`expand`spicePre`R`spiceSymbolName`RD 3WS 120R J T/B A1`~270~0~gge76d400f43517f45d~3555ffdfa5e3425c8467c785b518656f~2639a9f7c811489d8ec8c3971e2c7d50~0~7c74344f60ddb51c~yes~yes~~~#@$T~N~892~-427.5~0~#000080~Arial~~~~~comment~120~1~start~gge1525~0~pinpart#@$T~P~892~-436.5~0~#000080~Arial~~~~~comment~R4~1~start~gge1527~0~pinpart#@$P~show~0~1~885~-460~90~gge1529~0^^885~-460^^M 885 -450 v -10~#800^^0~885~-446~270~1~end~~~#800^^0~881~-454~270~1~start~~~#800^^0~885~-473^^0~M 882 -470 L 885 -467 L 888 -470#@$P~show~0~2~885~-420~270~gge1536~0^^885~-420^^M 885 -430 v 10~#800^^0~885~-434~270~2~start~~~#800^^0~881~-426~270~2~end~~~#800^^0~885~-407^^0~M 888 -410 L 885 -413 L 882 -410#@$R~880~-450~~~10~20~#A00000~1~0~none~gge1543~0~", - "W~735 -445 790 -445 790 -460 925 -460~#008800~1~0~none~gge1567~0", - "W~735 -435 790 -435 790 -420 925 -420~#008800~1~0~none~gge1569~0", - "W~735 -585 790 -585 790 -570 925 -570~#008800~1~0~none~gge1575~0", - "W~735 -595 790 -595 790 -610 925 -610~#008800~1~0~none~gge1576~0", - "F~part_netLabel_+5V~385~-700~0~gge1586~~0^^385~-700^^+5V~#000000~375~-712~0~start~1~Times New Roman~9pt~flag_gge7^^PL~385 -710 385 -700~#000000~1~0~none~gge1590~0^^PL~380 -710 390 -710~#000000~1~0~transparent~gge1591~0", - "W~385 -700 385 -615 360 -615~#008800~1~0~none~gge1598~0", - "W~655 -575 645 -575 645 -555 360 -555~#008800~1~0~none~gge1599~0", - "W~360 -535 575 -535 575 -605 655 -605~#008800~1~0~none~gge1600~0", - "W~160 -575 140 -575 140 -320 620 -320 620 -455 655 -455~#008800~1~0~none~gge1605~0", - "W~655 -425 635 -425 635 -305 125 -305 125 -595 160 -595~#008800~1~0~none~gge1606~0", - "W~160 -615 105 -615 105 -590~#008800~1~0~none~gge1610~0", - "F~part_netLabel_gnD~105~-590~0~gge1611~~0^^105~-590^^GND~#000000~92~-564~0~start~1~Times New Roman~9pt~flag_gge10^^PL~105 -580 105 -590~#000000~1~0~transparent~gge1615~0^^PL~96 -580 114 -580~#000000~1~0~transparent~gge1616~0^^PL~99 -578 111 -578~#000000~1~0~transparent~gge1617~0^^PL~102 -576 108 -576~#000000~1~0~transparent~gge1618~0^^PL~104 -574 106 -574~#000000~1~0~transparent~gge1619~0", - "T~L~935~-605~0~#0000FF~~9pt~~~~comment~CAN-HS+ (OBD-II pin 6)~1~start~gge1635~0~pinpart", - "T~L~935~-570~0~#0000FF~~9pt~~~~comment~CAN-HS- (OBD-II pin 14)~1~start~gge1640~0~pinpart", - "T~L~935~-455~0~#0000FF~~9pt~~~~comment~CAN-LS+ (OBD-II pin 3)~1~start~gge1643~0~pinpart", - "T~L~935~-420~0~#0000FF~~9pt~~~~comment~CAN-LS- (OBD-II pin 11)~1~start~gge1645~0~pinpart", - "T~L~420~-725~0~#0000FF~~9pt~undefined~undefined~~comment~* use 12->5 DC-DC, USB power may be insufficient~1~start~gge1647~0~pinpart", - "W~160 -555 155 -555 155 -660 420 -660 420 -555~#008800~1~0~none~gge1649~0", - "W~925 -330 885 -330 885 -290~#008800~1~0~none~gge1653~0", - "F~part_netLabel_gnD~885~-290~0~gge1654~~0^^885~-290^^GND~#000000~872~-264~0~start~1~Times New Roman~9pt~flag_gge13^^PL~885 -280 885 -290~#000000~1~0~transparent~gge1658~0^^PL~876 -280 894 -280~#000000~1~0~transparent~gge1659~0^^PL~879 -278 891 -278~#000000~1~0~transparent~gge1660~0^^PL~882 -276 888 -276~#000000~1~0~transparent~gge1661~0^^PL~884 -274 886 -274~#000000~1~0~transparent~gge1662~0", - "T~L~940~-330~0~#0000FF~~9pt~~~~comment~CAN GND (OBD-II pin 5)~1~start~gge1672~0~pinpart", - "T~L~790~-510~0~#0000FF~~9pt~~~~comment~* R3 and R4 are not needed for in-car cracking~1~start~gge1676~0~pinpart", - "J~605~-595~2.5~#CC0000~gge724~0", - "J~590~-575~2.5~#CC0000~gge728~0", - "J~605~-535~2.5~#CC0000~gge1499~0", - "J~605~-500~2.5~#CC0000~gge1501~0", - "J~885~-420~2.5~#CC0000~gge1570~0", - "J~885~-460~2.5~#CC0000~gge1573~0", - "J~885~-570~2.5~#CC0000~gge1577~0", - "J~885~-610~2.5~#CC0000~gge1578~0", - "J~420~-555~2.5~#CC0000~gge1650~0" - ], - "BBox": { - "x": 0, - "y": -801.2, - "width": 1149, - "height": 808.9 - }, - "colors": {} - } - } - ] -} \ No newline at end of file diff --git a/doc/Volvo CEM PIN Cracker. Bosh CF160 version.pdf b/doc/Volvo CEM PIN Cracker. Bosh CF160 version.pdf deleted file mode 100644 index fca31c1..0000000 Binary files a/doc/Volvo CEM PIN Cracker. Bosh CF160 version.pdf and /dev/null differ diff --git a/doc/cracker_photo.jpg b/doc/cracker_photo.jpg new file mode 100644 index 0000000..99201b0 Binary files /dev/null and b/doc/cracker_photo.jpg differ diff --git a/doc/lcd1602.png b/doc/lcd1602.png new file mode 100644 index 0000000..10c9a28 Binary files /dev/null and b/doc/lcd1602.png differ diff --git a/doc/pin.png b/doc/pin.png deleted file mode 100644 index 0773da9..0000000 Binary files a/doc/pin.png and /dev/null differ diff --git a/doc/schematic.png b/doc/schematic.png deleted file mode 100644 index f4ad81a..0000000 Binary files a/doc/schematic.png and /dev/null differ diff --git a/doc/volvo-cem-cracker-diagram.pdf b/doc/volvo-cem-cracker-diagram.pdf new file mode 100644 index 0000000..1a397e9 Binary files /dev/null and b/doc/volvo-cem-cracker-diagram.pdf differ diff --git a/doc/volvo-cem-cracker-diagram.png b/doc/volvo-cem-cracker-diagram.png new file mode 100644 index 0000000..6174717 Binary files /dev/null and b/doc/volvo-cem-cracker-diagram.png differ diff --git a/volvo-cem-cracker.ino b/volvo-cem-cracker.ino index 896134c..6a2388d 100644 --- a/volvo-cem-cracker.ino +++ b/volvo-cem-cracker.ino @@ -8,19 +8,43 @@ * */ +/* LCD1602 I2C connection + * + * TEENSY 4.1 1602 LCD i2c + * ---------------------- + * 19 A5 SCL SCL + * 18 A4 SDA SDA + * 5V VCC + * GND GND + * + */ + +/* Abort button connects GND on PIN 3, normal open */ + /* tunable parameters */ -#define CALC_BYTES 3 /* how many PIN bytes to calculate (1 to 4), the rest is brute-forced */ +//#define DUMP_BUCKETS /* dump all buckets for debugging */ #define CEM_PN_AUTODETECT /* comment out for P2 CEM-L on the bench w/o DIM */ -//#define DUMP_BUCKETS /* dump all buckets for debugging */ +#define ABORT_BUTTON 3 /* Abort button to stop operation and reset ECUs */ +#define CPU_CLOCK true /* true - to limit CPU by 180 MHz, false - to unlimit CPU frequency. Default value is true */ +#define LCD true /* true - to print out info on 1602 LCD connected via i2c. Default value is true */ +#define CALC_BYTES 3 /* how many PIN bytes to calculate (1 to 4), the rest is brute-forced. Default value is 3 */ +#define KNOWN_BYTES 0 /* how many PIN bytes we know and skip it from calculation. Default value is 0 */ +int kpin[6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; /* replace 0x00 by values for known PIN bytes. Default values are 0x00 */ +uint32_t initValue = 0; /* the initial value for brute-force search. Default value is 0 */ +bool abort_button = false; /* end of tunable parameters */ #include #include +#include +#include + LiquidCrystal_I2C lcd (0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display + #if !defined(__IMXRT1062__) -#error Unsupported Teensy model, need 4.0 +#error Unsupported Teensy model, need 4.x #endif int cem_reply_min; @@ -155,7 +179,7 @@ void canMsgSend (can_bus_id_t bus, uint32_t id, uint8_t *data, bool verbose) CAN_message_t msg; if (verbose == true) { - printf ("CAN_%cS ---> ID=%08x data=%02x %02x %02x %02x %02x %02x %02x %02x\n", + printf ("CAN_%cS ---> ID=%08x data= %02x %02x %02x %02x %02x %02x %02x %02x\n", bus == CAN_HS ? 'H' : 'L', id, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7]); } @@ -241,7 +265,7 @@ bool canMsgReceive (can_bus_id_t bus, uint32_t *id, uint8_t *data, int wait, boo /* print the message we received */ if (verbose) { - printf ("CAN_%cS <--- ID=%08x data=%02x %02x %02x %02x %02x %02x %02x %02x\n", + printf ("CAN_%cS <--- ID=%08x data= %02x %02x %02x %02x %02x %02x %02x %02x\n", bus == CAN_HS ? 'H' : 'L', canId, pData[0], pData[1], pData[2], pData[3], pData[4], pData[5], pData[6], pData[7]); } @@ -354,7 +378,7 @@ bool cemUnlock (uint8_t *pin, uint8_t *pinUsed, uint32_t *latency, bool verbose) /* shuffle the PIN and set it in the request message */ for (int i = 0; i < PIN_LEN; i++) - pMsgPin[shuffle_order[i]] = pin[i]; + pMsgPin[i] = pin[shuffle_order[i]]; /* maximum time to collect our samples */ @@ -403,6 +427,23 @@ bool cemUnlock (uint8_t *pin, uint8_t *pinUsed, uint32_t *latency, bool verbose) memcpy (pinUsed, pMsgPin, PIN_LEN); } + /* read the abort button state */ + abort_button = !digitalRead(ABORT_BUTTON); + + if ( abort_button == true ) { + printf ("\n\nAborted by User!\n"); + printf ("The last tried PIN was %02x %02x %02x %02x %02x %02x based on\n", pMsgPin[0], pMsgPin[1], pMsgPin[2], pMsgPin[3], pMsgPin[4], pMsgPin[5]); + printf ("the last tried sequence %02x %02x %02x %02x %02x %02x\n\n", pin[0], pin[1], pin[2], pin[3], pin[4], pin[5]); + + if (LCD == true) { + lcd.setCursor(0, 0); + lcd.print("Aborted by User!"); + } + + /* exit from function in case Abort button has been pressed */ + return true; + } + /* a reply of 0x00 indicates CEM was unlocked */ return reply[2] == 0x00; @@ -420,6 +461,7 @@ unsigned long ecu_read_part_number(can_bus_id_t bus, unsigned char id) int frame; printf("Reading part number from ECU 0x%02x on CAN_%cS\n", id, bus == CAN_HS ? 'H' : 'L'); + yet_again: canMsgSend(bus, 0xffffe, data, verbose); i = 0; @@ -566,6 +608,10 @@ void crackPinPosition(uint8_t *pin, uint32_t pos, bool verbose) for (i = 0; i < 7; i++) { crack_range(pin, pos, seq, ranges[i], samples[i], verbose); + + /* exit from function in case Abort button has been pressed */ + if ( abort_button == true ) + return; } } @@ -582,6 +628,7 @@ void crack_range(uint8_t *pin, int pos, uint8_t *seq, int range, int samples, bo int k; int xmin = cem_reply_avg + AVERAGE_DELTA_MIN; int xmax = cem_reply_avg + AVERAGE_DELTA_MAX; + char lcd_message [17]; /* clear collected latencies */ @@ -615,6 +662,14 @@ void crack_range(uint8_t *pin, int pos, uint8_t *seq, int range, int samples, bo for (i = 0; i <= pos; i++) { printf ("%02x ", pin[i]); + + if (LCD == true) { + if ( i < pos ) { + lcd.setCursor(i *2, 1); + sprintf(lcd_message, "%02x", pin[i]); + lcd.print(lcd_message); + } + } } /* placeholder for the unknown digits */ @@ -648,6 +703,10 @@ void crack_range(uint8_t *pin, int pos, uint8_t *seq, int range, int samples, bo cemUnlock (pin, NULL, &latency, verbose); + /* exit from function in case Abort button has been pressed */ + if ( abort_button == true ) + return; + /* calculate the index into the historgram */ int idx = latency / clockCyclesPerMicrosecond(); @@ -753,7 +812,7 @@ void crack_range(uint8_t *pin, int pos, uint8_t *seq, int range, int samples, bo * Returns: N/A */ -void cemCrackPin (int maxBytes, bool verbose) +void cemCrackPin (int knownBytes, int maxBytes, bool verbose) { uint8_t pin[PIN_LEN]; uint8_t pinUsed[PIN_LEN]; @@ -761,13 +820,23 @@ void cemCrackPin (int maxBytes, bool verbose) uint32_t end; uint32_t percent = 0; uint32_t percent_5; + uint32_t percent1 = 0; + uint32_t percent_1; uint32_t crackRate; uint32_t remainingBytes; bool cracked = false; - int i; + int i; + char lcd_message [17]; printf ("Calculating bytes 0-%u\n", maxBytes - 1); + if (LCD == true) { + lcd.setCursor(0, 0); + lcd.print("In Progress ..."); + lcd.setCursor(8, 1); + lcd.print("Calc"); + } + /* profile the CEM to see how fast it can process requests */ crackRate = profileCemResponse (); @@ -780,15 +849,42 @@ void cemCrackPin (int maxBytes, bool verbose) memset (pin, 0x00, sizeof(pin)); + /* to fill the first known bytes into PIN */ + + for (i = 0; i < knownBytes; i++) + pin[i] = kpin[i]; + /* try and crack each PIN position */ - for (i = 0; i < maxBytes; i++) { + for (i = knownBytes; i < maxBytes; i++) { + + if (LCD == true) + { + lcd.setCursor(i *2, 1); + lcd.print("xx"); + } + crackPinPosition (pin, i, verbose); + + /* exit from for() in case Abort button has been pressed */ + if ( abort_button == true ) + break; } + + /* exit from function in case Abort button has been pressed */ + if ( abort_button == true ) + return; /* number of PIN bytes remaining to find */ - remainingBytes = PIN_LEN - maxBytes, + remainingBytes = PIN_LEN - maxBytes; + + /* Check if initValue is higher then possible for the remainigBytes */ + if ( initValue > pow ( 100, remainingBytes ) ) { + printf ("\nThe configured initial brute-force Value %u is more than maximum possible brute-forcing value %u for remaining %u bytes.\n", initValue, (uint32_t)(pow (100, remainingBytes)), remainingBytes ); + printf ("The initial brute-force Value has been reset to 0.\n\n"); + initValue = 0; + } /* show the result of the cracking */ @@ -798,6 +894,15 @@ void cemCrackPin (int maxBytes, bool verbose) for (i=0; i < maxBytes; i++) { printf ("%02x ", pin[i]); + + if (LCD == true) { + if ( i < maxBytes ) { + lcd.setCursor(i * 2, 1); + sprintf(lcd_message, "%02x", pin[i]); + lcd.print(lcd_message); + } + } + } /* placeholder for the remaining digits */ @@ -807,13 +912,21 @@ void cemCrackPin (int maxBytes, bool verbose) i++; } - printf (": brute forcing bytes %u to %u (%u bytes), will take up to %u seconds\n", - maxBytes, PIN_LEN - 1, remainingBytes, - (uint32_t)(pow (100, remainingBytes) / crackRate)); - /* 5% of the remaining PINs to try */ + printf (": brute-forcing bytes %u to %u (%u bytes), initial value is %u, will take up to %u seconds\n", + maxBytes, PIN_LEN - 1, remainingBytes, initValue, + (uint32_t)((pow (100, remainingBytes) - initValue)/ crackRate)); - percent_5 = pow (100, (remainingBytes))/20; + if (LCD == true) { + lcd.setCursor(8, 1); + lcd.print("Brut"); + } + + /* 5% of the remaining PINs to try */ + percent_5 = ( pow (100, (remainingBytes)) - initValue ) / 20; + + /* 1% of the remaining PINs to try to print on LCD */ + percent_1 = ( pow (100, (remainingBytes)) - initValue ) / 100; printf ("Progress: "); @@ -822,12 +935,12 @@ void cemCrackPin (int maxBytes, bool verbose) * Each byte has a value 0-99 so we iterare for 100^remainingBytes values */ - for (i = 0; i < pow (100, (remainingBytes)); i++) { + for (i = initValue; i < pow (100, (remainingBytes)); i++) { uint32_t pinValues = i; /* fill in each of the remaining PIN values */ - for (uint32_t j = maxBytes; j < PIN_LEN; j++) { + for (int j = PIN_LEN -1; j >= maxBytes; j--) { pin[j] = binToBcd (pinValues % 100); /* shift to the next PIN's value */ @@ -839,8 +952,34 @@ void cemCrackPin (int maxBytes, bool verbose) if (cemUnlock (pin, pinUsed, NULL, verbose)) { - /* the PIN worked, print it and terminate the search */ + if ( abort_button == true ) { + printf ("Last tried brute-force value was %010d\n\n", i); + + if (LCD == true) { + lcd.setCursor(0, 1); + lcd.print("Last "); + sprintf(lcd_message, "%010d", i); lcd.print(lcd_message); + + // Alternative printing of last used brute-force value + /* + for( int j = 1 ; j < 6 ; j++ ) + { + if ( j < CALC_BYTES ) + lcd.print("00"); + else + { + sprintf(lcd_message, "%02x", pin[j]); + lcd.print(lcd_message); + } + } + */ + } + /* exit from for() in case Abort button has been pressed */ + break; + } + /* the PIN worked, print it and terminate the search */ + printf ("done\n"); printf ("\nfound PIN: %02x %02x %02x %02x %02x %02x", pinUsed[0], pinUsed[1], pinUsed[2], pinUsed[3], pinUsed[4], pinUsed[5]); @@ -851,12 +990,30 @@ void cemCrackPin (int maxBytes, bool verbose) /* print a periodic progress message */ - if ((i % percent_5) == 0) { + if (((i - initValue) % percent_5) == 0) { printf ("%u%%..", percent * 5); percent++; } + + if (LCD == true) { + if (((i-initValue) % percent_1) == 0) { + lcd.setCursor(13, 1); + sprintf(lcd_message, "%02lu%%", percent1); + lcd.print(lcd_message); + percent1++; + } + } + } + /* exit from function in case Abort button has been pressed */ + if ( abort_button == true ) + return; + + /* print "100%" into progress line in case PIN has not been cracked */ + if (cracked == false) + printf ("%u%%", percent * 5); + /* print execution summary */ end = millis (); @@ -894,10 +1051,26 @@ void cemCrackPin (int maxBytes, bool verbose) if ((can_id == 3) && (data[0] == CEM_HS_ECU_ID) && (data[1] == 0xB9) && (data[2] == 0x00)) { - printf ("PIN verified.\n"); + printf ("PIN is verified.\n"); + + if (LCD == true) { + lcd.setCursor(0, 0); + lcd.print("PIN is verified."); + lcd.setCursor(0, 1); + sprintf(lcd_message, "PIN %02x%02x%02x%02x%02x%02x", pinUsed[0], pinUsed[1], pinUsed[2], pinUsed[3], pinUsed[4], pinUsed[5]); + lcd.print(lcd_message); + } + } else { printf ("PIN verification failed!\n"); } + } else { + if ( LCD == true ) { + lcd.setCursor(0, 0); + lcd.print("PIN is UNcracked"); + lcd.setCursor(13, 1); + lcd.print("fin"); + } } printf ("done\n"); @@ -996,16 +1169,27 @@ void setup (void) ARM_DWT_CTRL |= ARM_DWT_CTRL_CYCCNTENA; /* set up the pin for sampling the CAN bus */ - pinMode (CAN_L_PIN, INPUT_PULLUP); - set_arm_clock (180000000); + /* set up the pin as abort button */ + pinMode (ABORT_BUTTON, INPUT_PULLUP); + + if (CPU_CLOCK) + set_arm_clock (180000000); printf ("CPU Maximum Frequency: %u\n", F_CPU); printf ("CPU Frequency: %u\n", F_CPU_ACTUAL); printf ("Execution Rate: %u cycles/us\n", clockCyclesPerMicrosecond ()); printf ("PIN bytes to measure: %u\n", CALC_BYTES); + if (LCD == true) { + lcd.init(); + lcd.clear(); + lcd.backlight(); + lcd.setCursor(0, 0); + lcd.print("Starting ..."); + } + long pn = 0; #if defined(CEM_PN_AUTODETECT) @@ -1050,6 +1234,12 @@ void setup (void) initialized = true; printf ("Initialization done.\n\n"); + + if (LCD == true) { + lcd.setCursor(0, 0); + lcd.print("Initialized ..."); + } + } /******************************************************************************* @@ -1064,7 +1254,16 @@ void loop (void) bool verbose = false; if (initialized) - cemCrackPin (CALC_BYTES, verbose); + cemCrackPin (KNOWN_BYTES, CALC_BYTES, verbose); + else { + printf("\nNot initialized\n\n"); + if (LCD == true) { + lcd.setCursor(0, 0); + lcd.print("Not Initialized "); + lcd.setCursor(0, 1); + lcd.print(" Exited"); + } + } /* exit ECU programming mode */ @@ -1073,5 +1272,11 @@ void loop (void) /* all done, stop */ for (;;) { + + /* call progModeOff() in case Abort button has been pressed */ + abort_button = !digitalRead(ABORT_BUTTON); + if ( abort_button == true ) + progModeOff (); + } }