[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"datocms-2336aa45":3,"datocms-513e62bd":215,"datocms-341a6dd9":335,"datocms-9c5699b1":451,"datocms-6d0c31d8":549},{"data":4},{"navFooter":5},{"layout":6,"groups":7,"imprint":158,"privacy":166,"terms":174,"socials":182},"default",[8,51,92,133],{"id":9,"title":10,"links":11},"Erv2gw98Q2CWp35kd6vgJA","Products",[12,24,33,42],{"id":13,"title":14,"caption":15,"iconname":16,"link":17},"eZbaKkK1RIyYo32ILACqYw","Flexible Safety RTOS","Use our certified real-time operating system for all safety standards","",[18],{"id":19,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":22},"Ic79UZh6QbG6cxeQXCziDw","intern",false,{"slug":23},"\u002Fproducts\u002Fflexible-safety-rtos",{"id":25,"title":26,"caption":27,"iconname":16,"link":28},"DI2ApQJ-RzS56rjS7BMJxA","Safety Addons","Adopt mandatory measures to improve diagnostic coverage",[29],{"id":30,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":31},"dMuPWlC7Tr6xKhA2i7wxSw",{"slug":32},"\u002Fproducts\u002Fsafety-addons",{"id":34,"title":35,"caption":36,"iconname":16,"link":37},"K3oqrfgaThiF65BA563Sjw","Partitioning System","Separate aerospace applications in terms of time and space",[38],{"id":39,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":40},"cgBPYnWNSxaszWjtYMfT2A",{"slug":41},"\u002Fproducts\u002Fpartitioning-system",{"id":43,"title":44,"caption":45,"iconname":16,"link":46},"Cvqr18W6QUW5NboPb1SCtg","RTOS Testlab","Your personal RTOS test laboratory with ready-to-use demo-projects.",[47],{"id":48,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":49},"abzYE9PuT_qa759dC45Y5w",{"slug":50},"\u002Fproducts\u002Frtos-testlab",{"id":52,"title":53,"links":54},"TZvqYwwwT76e92qhAZOzMg","Services",[55,64,73,82],{"id":56,"title":57,"caption":58,"iconname":16,"link":59},"BKvF2XrLSMG9gYjUoePi6g","Integration Service","Optimize the integration of your selected software components",[60],{"id":61,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":62},"DN-HGgywT_2prhzK5_F1Sw",{"slug":63},"\u002Fservices\u002Fintegration-service",{"id":65,"title":66,"caption":67,"iconname":16,"link":68},"eES77B0fTymc4D71wv5how","Avionics Software","DO-178C Avionics RTOS Solutions and Software Development",[69],{"id":70,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":71},"KyhGULLUSIiXEmRjBu612w",{"slug":72},"\u002Fservices\u002Favionics-software",{"id":74,"title":75,"caption":76,"iconname":16,"link":77},"EAlbC-XOT7CT3MBLtu5v6w","Safety Platform","Start with a solid platform for your safety product",[78],{"id":79,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":80},"dnAlG5DoQz6l1LOBigcdcg",{"slug":81},"\u002Fservices\u002Fsafety-platform",{"id":83,"title":84,"caption":85,"iconname":86,"link":87},"TloJgT6JQLeO_sJO1mKUUg","Open Source Support","Benefit from professional support for selected open source projects","stars",[88],{"id":89,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":90},"aS0zzHEBTWmvm_ptW6egEw",{"slug":91},"\u002Fservices\u002Fopen-source-support",{"id":93,"title":94,"links":95},"frQX3mnGTjGHzgDDD-aUGQ","Company",[96,106,115,124],{"id":97,"title":98,"caption":99,"iconname":100,"link":101},"VAA_inw9QyS1L06u_eJfBw","Contact us","Need assistance with your safety-critical project? Contact us today!","contact",[102],{"id":103,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":104},"e-b6WHnZTbSdC87C3MTsRg",{"slug":105},"\u002Fcompany\u002Fcontact-us",{"id":107,"title":108,"caption":109,"iconname":16,"link":110},"RyjPVG8zTJeoAehNFmQtNA","Join us","Find your place in our team and help build software that saves lives",[111],{"id":112,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":113},"FAW2x5E-Q-KHbpeLptlmHw",{"slug":114},"\u002Fcareers",{"id":116,"title":117,"caption":118,"iconname":16,"link":119},"A0gqLVXKTwe6sMDVfv2dAA","Find Partners","Discover our perfect technology partners for safety projects",[120],{"id":121,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":122},"cHRga0jTTBmRDWNAclqqEA",{"slug":123},"\u002Fcompany\u002Fpartners",{"id":125,"title":126,"caption":127,"iconname":16,"link":128},"fvFRd-pzQ_Oy87DKmtm6xw","Find Distributors","Benefit from localized support offered by our trusted distributors",[129],{"id":130,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":131},"AbcNy7KnQCin8M4q0NJeoQ",{"slug":132},"\u002Fcompany\u002Fdistributors",{"id":134,"title":135,"links":136},"BfMn3xdKSzef5RiDNpbWjw","Customer",[137,149],{"id":138,"title":139,"caption":140,"iconname":141,"link":142},"TDE6DfH_QGyyNiK4dTsD7g","Customer Support","Shortcut to the customer ticket system","ticket",[143],{"id":144,"linkType":145,"externalUrl":146,"newWindow":147,"anchor":16,"page":148},"b-kilD_eQR6ZYsLU8FrTlQ","extern","https:\u002F\u002Fembeddedoffice.zohodesk.eu\u002Fportal\u002Fen\u002Fnewticket",true,null,{"id":150,"title":151,"caption":152,"iconname":153,"link":154},"bEGj0a6gQ2uFyemIZduIkw","Customer Delivery","Shortcut to our electronic delivery system","delivery",[155],{"id":156,"linkType":145,"externalUrl":157,"newWindow":147,"anchor":16,"page":148},"SjIW_EUYRKe0NCJkv8VqMA","https:\u002F\u002Fembedded-office.flexnetoperations.com\u002F",{"id":159,"title":160,"caption":160,"iconname":16,"link":161},"Zzg7m37eTPiWvlpoTmzMKg","Imprint",[162],{"id":163,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":164},"YSJ1WsSvSuqPWm6eHRK1RQ",{"slug":165},"\u002Fcompany\u002Fimprint",{"id":167,"title":168,"caption":168,"iconname":16,"link":169},"edjL5kkOTC25yUyd14-nbw","Privacy",[170],{"id":171,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":172},"eYghjUZvQOK-D0vY4X18Cg",{"slug":173},"\u002Fcompany\u002Fprivacy",{"id":175,"title":176,"caption":176,"iconname":16,"link":177},"b-1zxVeTTwCv4f7BndJ4Lw","Terms",[178],{"id":179,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":180},"HwilvzUlRESnjARqJmJWMQ",{"slug":181},"\u002Fcompany\u002Fterms",[183,191,199,207],{"id":184,"title":185,"caption":185,"iconname":186,"link":187},"HYxM3k0XQku31abksmkLcQ","LinkedIn","linkedin",[188],{"id":189,"linkType":145,"externalUrl":190,"newWindow":147,"anchor":16,"page":148},"AXJ8zs6hT6mqGkQELTm4DA","https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Fembedded-office\u002F",{"id":192,"title":193,"caption":193,"iconname":194,"link":195},"fuJSzBnTRYSGBJbg7L5TxA","GitHub","github",[196],{"id":197,"linkType":145,"externalUrl":198,"newWindow":147,"anchor":16,"page":148},"L4M8FnjyTFmhe1PlJxsdlA","https:\u002F\u002Fgithub.com\u002Fembedded-office\u002F",{"id":200,"title":201,"caption":201,"iconname":202,"link":203},"BUGL4AoJTdSwdNLUIfdZIQ","Xing","xing",[204],{"id":205,"linkType":145,"externalUrl":206,"newWindow":147,"anchor":16,"page":148},"cAb9dwf6S-mjz-Wd7iJwng","https:\u002F\u002Fwww.xing.com\u002Fpages\u002Fembeddedoffice\u002F",{"id":208,"title":209,"caption":209,"iconname":210,"link":211},"Ws0QAyZMQCqgUQUdUGtUfw","Kununu","kununu",[212],{"id":213,"linkType":145,"externalUrl":214,"newWindow":147,"anchor":16,"page":148},"Uvf1PFJKQd-fEGuoMRl6SA","https:\u002F\u002Fwww.kununu.com\u002Fde\u002Fembedded-office1\u002F",{"data":216},{"navFooter":217},{"layout":6,"groups":218,"imprint":307,"privacy":312,"terms":317,"socials":322},[219,242,267,294],{"id":9,"title":220,"links":221},"Produkte",[222,227,232,237],{"id":13,"title":14,"caption":223,"iconname":16,"link":224},"Nutzen Sie unser zertifiziertes Real Time Operating System (RTOS) für alle Sicherheitsnormen",[225],{"id":19,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":226},{"slug":23},{"id":25,"title":26,"caption":228,"iconname":16,"link":229},"Setzen Sie verpflichtende Maßnahmen zur Verbesserung der Diagnose Abdeckung ein",[230],{"id":30,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":231},{"slug":32},{"id":34,"title":35,"caption":233,"iconname":16,"link":234},"Trennen Sie Anwendungen der Luft- und Raumfahrt in zeitlicher und räumlicher Hinsicht",[235],{"id":39,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":236},{"slug":41},{"id":43,"title":44,"caption":238,"iconname":16,"link":239},"Ihr persönliches RTOS-Testlabor mit kompletten Demo-Projekten.",[240],{"id":48,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":241},{"slug":50},{"id":52,"title":243,"links":244},"Leistungen",[245,250,256,262],{"id":56,"title":57,"caption":246,"iconname":16,"link":247},"Optimieren Sie die Integration Ihrer ausgesuchten Software Komponenten",[248],{"id":61,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":249},{"slug":63},{"id":65,"title":251,"caption":252,"iconname":16,"link":253},"Luftfahrt Software","DO-178C Luftfahrt RTOS Lösungen und Software Entwicklung",[254],{"id":70,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":255},{"slug":72},{"id":74,"title":257,"caption":258,"iconname":16,"link":259},"Safety Plattform","Beginnen Sie mit einer soliden Plattform für ihr Safety Produkt",[260],{"id":79,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":261},{"slug":81},{"id":83,"title":84,"caption":263,"iconname":86,"link":264},"Profitieren Sie von professioneller Unterstützung für ausgewählte Open-Source Projekte",[265],{"id":89,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":266},{"slug":91},{"id":93,"title":268,"links":269},"Unternehmen",[270,276,282,288],{"id":97,"title":271,"caption":272,"iconname":100,"link":273},"Kontaktieren Sie uns","Benötigen Sie Unterstützung bei Ihrem Safety Projekt? Kontaktieren Sie uns noch heute!",[274],{"id":103,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":275},{"slug":105},{"id":107,"title":277,"caption":278,"iconname":16,"link":279},"Karriere","Finde Deinen Platz in unserem Team und hilf mit, Software zu entwickeln, die Leben rettet",[280],{"id":112,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":281},{"slug":114},{"id":116,"title":283,"caption":284,"iconname":16,"link":285},"Partner finden","Entdecken Sie unsere perfekten Technologie Partner für Safety Projekte",[286],{"id":121,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":287},{"slug":123},{"id":125,"title":289,"caption":290,"iconname":16,"link":291},"Vertriebspartner finden","Profitieren Sie von lokalem Support durch unsere vertrauenswürdigen Vertriebspartner",[292],{"id":130,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":293},{"slug":132},{"id":134,"title":295,"links":296},"Kunden",[297,302],{"id":138,"title":298,"caption":299,"iconname":141,"link":300},"Kunden Support","Link zu unserem Kunden Ticket System",[301],{"id":144,"linkType":145,"externalUrl":146,"newWindow":147,"anchor":16,"page":148},{"id":150,"title":303,"caption":304,"iconname":153,"link":305},"Kunden Lieferungen","Link zu unserem elektronischen Liefersystem",[306],{"id":156,"linkType":145,"externalUrl":157,"newWindow":147,"anchor":16,"page":148},{"id":159,"title":308,"caption":308,"iconname":16,"link":309},"Impressum",[310],{"id":163,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":311},{"slug":165},{"id":167,"title":313,"caption":313,"iconname":16,"link":314},"Datenschutz",[315],{"id":171,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":316},{"slug":173},{"id":175,"title":318,"caption":318,"iconname":16,"link":319},"AGBs",[320],{"id":179,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":321},{"slug":181},[323,326,329,332],{"id":184,"title":185,"caption":185,"iconname":186,"link":324},[325],{"id":189,"linkType":145,"externalUrl":190,"newWindow":147,"anchor":16,"page":148},{"id":192,"title":193,"caption":193,"iconname":194,"link":327},[328],{"id":197,"linkType":145,"externalUrl":198,"newWindow":147,"anchor":16,"page":148},{"id":200,"title":201,"caption":201,"iconname":202,"link":330},[331],{"id":205,"linkType":145,"externalUrl":206,"newWindow":147,"anchor":16,"page":148},{"id":208,"title":209,"caption":209,"iconname":210,"link":333},[334],{"id":213,"linkType":145,"externalUrl":214,"newWindow":147,"anchor":16,"page":148},{"data":336},{"navHeader":337},{"layout":6,"panels":338},[339,381,417],{"id":340,"title":220,"links":341,"left":358,"middle":368,"right":372},"IO1u0H47SSSA_ym1zwzBRg",[342,346,350,354],{"id":13,"title":14,"caption":223,"iconname":16,"link":343},[344],{"id":19,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":345},{"slug":23},{"id":25,"title":26,"caption":228,"iconname":16,"link":347},[348],{"id":30,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":349},{"slug":32},{"id":34,"title":35,"caption":233,"iconname":16,"link":351},[352],{"id":39,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":353},{"slug":41},{"id":43,"title":44,"caption":238,"iconname":16,"link":355},[356],{"id":48,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":357},{"slug":50},{"id":359,"title":360,"caption":361,"iconname":362,"link":363},"aDEPZtF_SNenPT7rwgJQdg","Dokumente","Das Bücherregal mit Produkt Anleitungen, Handbüchern und Application Notes.","article",[364],{"id":365,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":366},"aiu9D8iqR8iYb3zgU-VH5A",{"slug":367},"\u002Fdocs",{"id":97,"title":271,"caption":272,"iconname":100,"link":369},[370],{"id":103,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":371},{"slug":105},{"id":373,"title":374,"caption":16,"iconname":375,"link":376},"BggaobQcRn23i4sZJqCpCQ","Downloads","cpu",[377],{"id":378,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":379},"E6rOPoSGSsa9aswKfZ10lA",{"slug":380},"\u002Fproducts\u002Fdownloads",{"id":382,"title":243,"links":383,"left":400,"middle":409,"right":413},"XRUMoEbPSuiGVVnAjUBGOw",[384,388,392,396],{"id":56,"title":57,"caption":246,"iconname":16,"link":385},[386],{"id":61,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":387},{"slug":63},{"id":74,"title":257,"caption":258,"iconname":16,"link":389},[390],{"id":79,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":391},{"slug":81},{"id":65,"title":251,"caption":252,"iconname":16,"link":393},[394],{"id":70,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":395},{"slug":72},{"id":43,"title":44,"caption":238,"iconname":16,"link":397},[398],{"id":48,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":399},{"slug":50},{"id":401,"title":402,"caption":403,"iconname":362,"link":404},"LaxKmgosSoqjRcX20RKWNA","Artikel","Erfahren Sie mehr über unser Know-How",[405],{"id":406,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":407},"PVelvwunShyBBJHMEClPqA",{"slug":408},"\u002Farticles",{"id":97,"title":271,"caption":272,"iconname":100,"link":410},[411],{"id":103,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":412},{"slug":105},{"id":83,"title":84,"caption":263,"iconname":86,"link":414},[415],{"id":89,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":416},{"slug":91},{"id":418,"title":268,"links":419,"left":441,"middle":444,"right":448},"LjvQ_NmWQ7GrF9ErU6_1RA",[420,429,433,437],{"id":421,"title":422,"caption":423,"iconname":16,"link":424},"PmPAq_7hQ4SqbwS7x5LEfA","Über uns","Die Welt sicherer machen - das ist das, was uns antreibt.",[425],{"id":426,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":427},"OdYUBJ7KRpSEKKuHXIuikw",{"slug":428},"\u002Fcompany\u002Fabout-us",{"id":125,"title":289,"caption":290,"iconname":16,"link":430},[431],{"id":130,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":432},{"slug":132},{"id":116,"title":283,"caption":284,"iconname":16,"link":434},[435],{"id":121,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":436},{"slug":123},{"id":107,"title":277,"caption":278,"iconname":16,"link":438},[439],{"id":112,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":440},{"slug":114},{"id":150,"title":303,"caption":304,"iconname":153,"link":442},[443],{"id":156,"linkType":145,"externalUrl":157,"newWindow":147,"anchor":16,"page":148},{"id":97,"title":271,"caption":272,"iconname":100,"link":445},[446],{"id":103,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":447},{"slug":105},{"id":138,"title":298,"caption":299,"iconname":141,"link":449},[450],{"id":144,"linkType":145,"externalUrl":146,"newWindow":147,"anchor":16,"page":148},{"data":452},{"navHeader":453},{"layout":6,"panels":454},[455,487,519],{"id":340,"title":10,"links":456,"left":473,"middle":479,"right":483},[457,461,465,469],{"id":13,"title":14,"caption":15,"iconname":16,"link":458},[459],{"id":19,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":460},{"slug":23},{"id":25,"title":26,"caption":27,"iconname":16,"link":462},[463],{"id":30,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":464},{"slug":32},{"id":34,"title":35,"caption":36,"iconname":16,"link":466},[467],{"id":39,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":468},{"slug":41},{"id":43,"title":44,"caption":45,"iconname":16,"link":470},[471],{"id":48,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":472},{"slug":50},{"id":359,"title":474,"caption":475,"iconname":362,"link":476},"Documents","The bookshelf with product manuals, guides, and application notes.",[477],{"id":365,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":478},{"slug":367},{"id":97,"title":98,"caption":99,"iconname":100,"link":480},[481],{"id":103,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":482},{"slug":105},{"id":373,"title":374,"caption":16,"iconname":375,"link":484},[485],{"id":378,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":486},{"slug":380},{"id":382,"title":53,"links":488,"left":505,"middle":511,"right":515},[489,493,497,501],{"id":56,"title":57,"caption":58,"iconname":16,"link":490},[491],{"id":61,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":492},{"slug":63},{"id":74,"title":75,"caption":76,"iconname":16,"link":494},[495],{"id":79,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":496},{"slug":81},{"id":65,"title":66,"caption":67,"iconname":16,"link":498},[499],{"id":70,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":500},{"slug":72},{"id":43,"title":44,"caption":45,"iconname":16,"link":502},[503],{"id":48,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":504},{"slug":50},{"id":401,"title":506,"caption":507,"iconname":362,"link":508},"Articles","Learn more about our Know-How",[509],{"id":406,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":510},{"slug":408},{"id":97,"title":98,"caption":99,"iconname":100,"link":512},[513],{"id":103,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":514},{"slug":105},{"id":83,"title":84,"caption":85,"iconname":86,"link":516},[517],{"id":89,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":518},{"slug":91},{"id":418,"title":94,"links":520,"left":539,"middle":542,"right":546},[521,527,531,535],{"id":421,"title":522,"caption":523,"iconname":16,"link":524},"About us","Making the world a safer place - that is what drives us.",[525],{"id":426,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":526},{"slug":428},{"id":125,"title":126,"caption":127,"iconname":16,"link":528},[529],{"id":130,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":530},{"slug":132},{"id":116,"title":117,"caption":118,"iconname":16,"link":532},[533],{"id":121,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":534},{"slug":123},{"id":107,"title":108,"caption":109,"iconname":16,"link":536},[537],{"id":112,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":538},{"slug":114},{"id":150,"title":151,"caption":152,"iconname":153,"link":540},[541],{"id":156,"linkType":145,"externalUrl":157,"newWindow":147,"anchor":16,"page":148},{"id":97,"title":98,"caption":99,"iconname":100,"link":543},[544],{"id":103,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":545},{"slug":105},{"id":138,"title":139,"caption":140,"iconname":141,"link":547},[548],{"id":144,"linkType":145,"externalUrl":146,"newWindow":147,"anchor":16,"page":148},{"data":550},{"article":551},{"_locales":552,"_seoMetaTags":554,"__typename":618,"slug":619,"title":620,"excerpt":621,"tags":622,"image":626,"story":633,"ctaPreset":1517,"cta":1532},[553],"en",[555,558,562,565,569,572,575,579,583,587,591,594,597,600,603,607,611,614],{"tag":556,"attributes":148,"content":557},"title","CRC32 Checksum: Firmware Integrity and Safety E2E Basics",{"tag":559,"attributes":560,"content":148},"meta",{"property":561,"content":557},"og:title",{"tag":559,"attributes":563,"content":148},{"name":564,"content":557},"twitter:title",{"tag":559,"attributes":566,"content":148},{"name":567,"content":568},"description","CRC32 checksum in embedded systems: where it helps, where it fails, and how to specify the variant and byte stream for firmware and safety E2E.",{"tag":559,"attributes":570,"content":148},{"property":571,"content":568},"og:description",{"tag":559,"attributes":573,"content":148},{"name":574,"content":568},"twitter:description",{"tag":559,"attributes":576,"content":148},{"property":577,"content":578},"og:image","https:\u002F\u002Fwww.datocms-assets.com\u002F106871\u002F1763714570-articles_content.png?auto=format&fit=max&w=1200",{"tag":559,"attributes":580,"content":148},{"property":581,"content":582},"og:image:width","1200",{"tag":559,"attributes":584,"content":148},{"property":585,"content":586},"og:image:height","712",{"tag":559,"attributes":588,"content":148},{"property":589,"content":590},"og:image:alt","Desk with laptop, coffee cup, and lamp",{"tag":559,"attributes":592,"content":148},{"name":593,"content":578},"twitter:image",{"tag":559,"attributes":595,"content":148},{"name":596,"content":590},"twitter:image:alt",{"tag":559,"attributes":598,"content":148},{"property":599,"content":553},"og:locale",{"tag":559,"attributes":601,"content":148},{"property":602,"content":362},"og:type",{"tag":559,"attributes":604,"content":148},{"property":605,"content":606},"og:site_name","Embedded Office",{"tag":559,"attributes":608,"content":148},{"property":609,"content":610},"article:modified_time","2026-09-01T13:44:16Z",{"tag":559,"attributes":612,"content":148},{"property":613,"content":16},"article:publisher",{"tag":559,"attributes":615,"content":148},{"name":616,"content":617},"twitter:card","summary_large_image","ArticleRecord","\u002Farticles\u002Fcrc32-checksum-importance-and-limitations","CRC32 Checksum - Importance and Limitations","CRC32 is a practical way to detect accidental data corruption in embedded systems, especially in firmware images and safety relevant communication paths. This article explains what CRC32 can and cannot guarantee, and why the exact CRC variant and covered byte stream must be specified. You will also find minimal patterns for firmware integrity checks and protocol agnostic end to end protection that avoid common integration bugs.",[623],{"id":624,"name":625},"INMAka8NTiiL82b7xfxGjg","Explain",{"title":627,"alt":590,"url":628,"responsiveImage":629},"Article by Embedded Office","https:\u002F\u002Fwww.datocms-assets.com\u002F106871\u002F1763714570-articles_content.png",{"src":630,"sizes":631,"srcSet":632},"https:\u002F\u002Fwww.datocms-assets.com\u002F106871\u002F1763714570-articles_content.png?auto=format","(max-width: 2134px) 100vw, 2134px","https:\u002F\u002Fwww.datocms-assets.com\u002F106871\u002F1763714570-articles_content.png?auto=format&dpr=0.25 533w,https:\u002F\u002Fwww.datocms-assets.com\u002F106871\u002F1763714570-articles_content.png?auto=format&dpr=0.5 1067w,https:\u002F\u002Fwww.datocms-assets.com\u002F106871\u002F1763714570-articles_content.png?auto=format&dpr=0.75 1600w,https:\u002F\u002Fwww.datocms-assets.com\u002F106871\u002F1763714570-articles_content.png?auto=format 2134w",{"content":634},{"blocks":635,"links":636,"value":637},[],[],{"schema":638,"document":639},"dast",{"type":640,"children":641},"root",[642,649,656,706,710,724,728,741,748,777,781,786,792,796,816,820,825,829,834,838,843,852,856,863,867,872,876,930,934,939,943,947,973,985,990,999,1004,1008,1028,1035,1040,1044,1049,1056,1076,1082,1100,1106,1127,1132,1136,1145,1150,1156,1174,1180,1198,1204,1222,1228,1246,1251,1255,1287,1291,1302,1307,1309,1314,1328,1333,1337,1342,1393,1398,1403,1412,1426,1430,1435,1439,1444,1448,1453,1462,1467,1505,1510,1514],{"type":643,"level":644,"children":645},"heading",2,[646],{"type":647,"value":648},"span","CRC32 in Embedded Systems: Where It Helps, Where It Doesn’t, and How to Use It Safely",{"type":643,"level":650,"children":651},3,[652],{"type":647,"marks":653,"value":655},[654],"strong","Executive Summary",{"type":657,"style":658,"children":659},"list","bulleted",[660,676,685],{"type":661,"children":662},"listItem",[663],{"type":664,"children":665},"paragraph",[666,669,671,674],{"type":647,"marks":667,"value":668},[654],"CRC32 is a strong, low cost detector for accidental data corruption",{"type":647,"value":670}," (bit flips, burst errors) in storage and transport. It is ",{"type":647,"marks":672,"value":673},[654],"not",{"type":647,"value":675}," a complete safety or security solution.",{"type":661,"children":677},[678],{"type":664,"children":679},[680,683],{"type":647,"marks":681,"value":682},[654],"“CRC32” is not one thing.",{"type":647,"value":684}," You must specify the variant (polynomial, init, reflection, final XOR) and define the exact byte stream covered. Otherwise you will ship mismatches.",{"type":661,"children":686},[687],{"type":664,"children":688},[689,691,694,696,699,701,704],{"type":647,"value":690},"For ",{"type":647,"marks":692,"value":693},[654],"firmware image integrity",{"type":647,"value":695}," and ",{"type":647,"marks":697,"value":698},[654],"safety end to end (E2E) protection",{"type":647,"value":700},", CRC32 is usually a ",{"type":647,"marks":702,"value":703},[654],"building block",{"type":647,"value":705}," combined with message metadata (ID\u002Flength\u002Fsequence) and system level handling (timeouts, retries, rollback, safe state).",{"type":643,"level":650,"children":707},[708],{"type":647,"value":709},"Context",{"type":664,"children":711},[712,714,717,719,722],{"type":647,"value":713},"CRC32 shows up everywhere in embedded systems: bootloaders, update packages, flash records, communication payloads. It’s popular for good reasons: it’s fast, compact, and catches many common corruption patterns.\nThe part that causes trouble is not “how to compute a CRC.” It’s (1) ",{"type":647,"marks":715,"value":716},[654],"what failure model you’re actually addressing",{"type":647,"value":718},", and (2) all the ",{"type":647,"marks":720,"value":721},[654],"parameter and integration details",{"type":647,"value":723}," that decide whether two ends agree on the same 32-bit result.",{"type":643,"level":650,"children":725},[726],{"type":647,"value":727},"CRC32 is ... \u002F CRC32 is not ...",{"type":664,"children":729},[730,733,735,739],{"type":647,"marks":731,"value":732},[654],"CRC32 is",{"type":647,"value":734}," an ",{"type":647,"marks":736,"value":738},[737],"emphasis","error-detection code",{"type":647,"value":740},": a deterministic function that maps a byte stream to a 32-bit check value. If the receiver computes the same CRC32 over the same bytes and it differs from the transmitted\u002Fstored CRC, you know something changed.",{"type":664,"children":742},[743,746],{"type":647,"marks":744,"value":745},[654],"CRC32 is not",{"type":647,"value":747},":",{"type":657,"style":658,"children":749},[750,759,768],{"type":661,"children":751},[752],{"type":664,"children":753},[754,757],{"type":647,"marks":755,"value":756},[654],"Error correction",{"type":647,"value":758}," (it does not tell you which bit is wrong, and it cannot fix the data).",{"type":661,"children":760},[761],{"type":664,"children":762},[763,766],{"type":647,"marks":764,"value":765},[654],"Authentication",{"type":647,"value":767}," (it does not prove who created the data).",{"type":661,"children":769},[770],{"type":664,"children":771},[772,775],{"type":647,"marks":773,"value":774},[654],"Tamper resistance",{"type":647,"value":776}," (an attacker who can modify data can usually also adjust the CRC).",{"type":664,"children":778},[779],{"type":647,"value":780},"If you need authenticity, you need a cryptographic mechanism (e.g., a signature or a MAC\u002FHMAC) and a threat model. CRC32 alone can’t provide that.",{"type":643,"level":650,"children":782},[783],{"type":647,"marks":784,"value":785},[654],"Where CRC32 fits well in practice",{"type":643,"level":787,"children":788},4,[789],{"type":647,"marks":790,"value":791},[654],"(1) Firmware images and update packages",{"type":664,"children":793},[794],{"type":647,"value":795},"Typical uses:",{"type":657,"style":658,"children":797},[798,804,810],{"type":661,"children":799},[800],{"type":664,"children":801},[802],{"type":647,"value":803},"Detect corruption while storing the image in flash.",{"type":661,"children":805},[806],{"type":664,"children":807},[808],{"type":647,"value":809},"Detect corruption while transporting an update package.",{"type":661,"children":811},[812],{"type":664,"children":813},[814],{"type":647,"value":815},"Provide a quick “integrity gate” before booting or installing.",{"type":664,"children":817},[818],{"type":647,"value":819},"CRC32 is often used because it’s cheap to compute on-device and easy to verify in a bootloader.",{"type":643,"level":787,"children":821},[822],{"type":647,"marks":823,"value":824},[654],"(2) Flash\u002FNVM records",{"type":664,"children":826},[827],{"type":647,"value":828},"CRC32 is commonly used per record or per block to detect bitrot, brownout\u002Fwrite interruption effects, or software bugs that write unintended bytes.",{"type":643,"level":787,"children":830},[831],{"type":647,"marks":832,"value":833},[654],"(3) Safety end-to-end (E2E) protection envelopes",{"type":664,"children":835},[836],{"type":647,"value":837},"In distributed embedded systems, CRC32 is often one field in a message envelope used to detect accidental corruption in transit. But safety E2E typically needs more than corruption detection.",{"type":643,"level":650,"children":839},[840],{"type":647,"marks":841,"value":842},[654],"What CRC32 catches well (intuition)",{"type":664,"children":844},[845,847,850],{"type":647,"value":846},"CRC codes are designed to catch patterns that simple checksums (like sum of bytes) miss, especially ",{"type":647,"marks":848,"value":849},[654],"burst errors",{"type":647,"value":851}," where multiple adjacent bits flip. The key idea isn’t “CRC is magic,” it’s that CRC is structured to detect many common classes of corruption with a small check value.",{"type":664,"children":853},[854],{"type":647,"value":855},"That said: CRC32 is still a 32 bit check. There will always be some residual probability that a corrupted payload produces the same CRC, and the exact meaning of “probability” depends on your error model.",{"type":643,"level":650,"children":857},[858,860],{"type":647,"value":859},"\n",{"type":647,"marks":861,"value":862},[654],"The biggest trap: “CRC32” has variants. Write down your variant!",{"type":664,"children":864},[865],{"type":647,"value":866},"Teams lose time here because two implementations can both be “CRC32” and still disagree.",{"type":643,"level":787,"children":868},[869],{"type":647,"marks":870,"value":871},[654],"Minimum CRC32 specification (don’t skip this)",{"type":664,"children":873},[874],{"type":647,"value":875},"Write down these fields in your spec (or at least in your repo next to the code):",{"type":657,"style":658,"children":877},[878,887,894,903,912,921],{"type":661,"children":879},[880],{"type":664,"children":881},[882,885],{"type":647,"marks":883,"value":884},[654],"Polynomial",{"type":647,"value":886}," (which CRC32 family you mean)",{"type":661,"children":888},[889],{"type":664,"children":890},[891],{"type":647,"marks":892,"value":893},[654],"Init value",{"type":661,"children":895},[896],{"type":664,"children":897},[898,901],{"type":647,"marks":899,"value":900},[654],"RefIn \u002F RefOut",{"type":647,"value":902}," (bit reflection)",{"type":661,"children":904},[905],{"type":664,"children":906},[907,910],{"type":647,"marks":908,"value":909},[654],"XorOut",{"type":647,"value":911}," (final XOR)",{"type":661,"children":913},[914],{"type":664,"children":915},[916,919],{"type":647,"marks":917,"value":918},[654],"Byte stream definition",{"type":647,"value":920},": exact bytes covered and their order",{"type":661,"children":922},[923],{"type":664,"children":924},[925,928],{"type":647,"marks":926,"value":927},[654],"Known-answer tests (KATs)",{"type":647,"value":929},": test vectors with expected CRC",{"type":664,"children":931},[932],{"type":647,"value":933},"If you can’t point to that list, you don’t have a CRC32 definition. You have a future integration bug.",{"type":643,"level":787,"children":935},[936],{"type":647,"marks":937,"value":938},[654],"Hardware CRC units: fast, but easy to misconfigure",{"type":664,"children":940},[941],{"type":647,"value":942},"Hardware CRC peripherals are great for throughput, but they amplify configuration mistakes. If your target MCU provides a CRC peripheral, it can also be a straightforward way to keep runtime overhead low. This only works if you treat the peripheral configuration as part of your CRC32 variant definition.",{"type":664,"children":944},[945],{"type":647,"value":946},"Hardware CRC configuration mistakes to watch for:",{"type":657,"style":658,"children":948},[949,955,961,967],{"type":661,"children":950},[951],{"type":664,"children":952},[953],{"type":647,"value":954},"wrong reflection setting",{"type":661,"children":956},[957],{"type":664,"children":958},[959],{"type":647,"value":960},"wrong polynomial selection",{"type":661,"children":962},[963],{"type":664,"children":964},[965],{"type":647,"value":966},"wrong init\u002Ffinal XOR behavior",{"type":661,"children":968},[969],{"type":664,"children":970},[971],{"type":647,"value":972},"feeding words vs feeding bytes (stream definition mismatch)",{"type":664,"children":974},[975,978,980,983],{"type":647,"marks":976,"value":977},[654],"Debug approach:",{"type":647,"value":979}," start with a short KAT (e.g., 4–16 bytes), compute in software with your chosen parameters, then feed ",{"type":647,"marks":981,"value":982},[737],"exactly the same bytes",{"type":647,"value":984}," into the HW unit and compare.",{"type":643,"level":650,"children":986},[987],{"type":647,"marks":988,"value":989},[654],"Firmware image integrity: a review-friendly pattern",{"type":664,"children":991},[992,994,997],{"type":647,"value":993},"This section is about catching ",{"type":647,"marks":995,"value":996},[654],"accidental corruption",{"type":647,"value":998}," of images\u002Fpackages. If you need tamper resistance (malicious updates), you need cryptographic authenticity as well.",{"type":643,"level":787,"children":1000},[1001],{"type":647,"marks":1002,"value":1003},[654],"Data layout pattern",{"type":664,"children":1005},[1006],{"type":647,"value":1007},"A simple, practical layout is:",{"type":657,"style":658,"children":1009},[1010,1016,1022],{"type":661,"children":1011},[1012],{"type":664,"children":1013},[1014],{"type":647,"value":1015},"`header` (magic, version, image_length, algorithm_id)",{"type":661,"children":1017},[1018],{"type":664,"children":1019},[1020],{"type":647,"value":1021},"`payload` (image bytes)",{"type":661,"children":1023},[1024],{"type":664,"children":1025},[1026],{"type":647,"value":1027},"`crc32` (computed over a clearly defined region)",{"type":664,"children":1029},[1030,1033],{"type":647,"marks":1031,"value":1032},[654],"Rule:",{"type":647,"value":1034}," Define whether the CRC covers the header, the payload, or both. Write it down. Test it.",{"type":643,"level":787,"children":1036},[1037],{"type":647,"marks":1038,"value":1039},[654],"Pseudocode: compute + verify",{"code":1041,"type":1042,"language":1043},"\u002F\u002F Inputs:\n\u002F\u002F   bytes[]: pointer to byte stream\n\u002F\u002F   n: number of bytes\n\u002F\u002F   params: CRC32 variant parameters (poly, init, refin\u002Frefout, xorout)\n\u002F\u002F Output:\n\u002F\u002F   32-bit CRC value\nuint32_t crc32_compute(const uint8_t *bytes, size_t n, Crc32Params params);\n\n\u002F\u002F Returns true if the image is intact under the defined CRC scheme.\nbool verify_image(const ImageHeader *hdr, const uint8_t *payload) {\n  if (hdr->magic != IMAGE_MAGIC) return false;\n  if (hdr->image_length > MAX_IMAGE_LEN) return false;\n\n  \u002F\u002F Define the region precisely. Example: CRC over payload only.\n  uint32_t crc = crc32_compute(payload, hdr->image_length, hdr->crc_params);\n  return (crc == hdr->crc32);\n}\n\n\u002F\u002F Suggested behavior on CRC mismatch depends on system goals:\n\u002F\u002F - bootloader: reject image \u002F keep previous slot\n\u002F\u002F - updater: request retransmission \u002F rollback","code","c",{"type":643,"level":787,"children":1045},[1046],{"type":647,"marks":1047,"value":1048},[654],"Common failure modes (firmware integrity)",{"type":664,"children":1050},[1051,1054],{"type":647,"marks":1052,"value":1053},[654],"Failure mode:",{"type":647,"value":1055}," wrong “covered bytes” definition (e.g., including padding on one side)",{"type":657,"style":658,"children":1057},[1058,1067],{"type":661,"children":1059},[1060],{"type":664,"children":1061},[1062,1065],{"type":647,"marks":1063,"value":1064},[654],"Symptom:",{"type":647,"value":1066}," CRC mismatches only on some toolchains\u002Fbuilds",{"type":661,"children":1068},[1069],{"type":664,"children":1070},[1071,1074],{"type":647,"marks":1072,"value":1073},[654],"Mitigation:",{"type":647,"value":1075}," define canonical byte stream; include KATs; compute CRC over explicit `length`",{"type":664,"children":1077},[1078,1080],{"type":647,"marks":1079,"value":1053},[654],{"type":647,"value":1081}," CRC mismatch between host tool and bootloader",{"type":657,"style":658,"children":1083},[1084,1092],{"type":661,"children":1085},[1086],{"type":664,"children":1087},[1088,1090],{"type":647,"marks":1089,"value":1064},[654],{"type":647,"value":1091}," “works on dev, fails on target”",{"type":661,"children":1093},[1094],{"type":664,"children":1095},[1096,1098],{"type":647,"marks":1097,"value":1073},[654],{"type":647,"value":1099}," lock variant parameters; add a shared test vector file used by both host and target",{"type":664,"children":1101},[1102,1104],{"type":647,"marks":1103,"value":1053},[654],{"type":647,"value":1105}," CRC computed before final image processing step (alignment, encryption, compression)",{"type":657,"style":658,"children":1107},[1108,1116],{"type":661,"children":1109},[1110],{"type":664,"children":1111},[1112,1114],{"type":647,"marks":1113,"value":1064},[654],{"type":647,"value":1115}," CRC mismatch after packaging",{"type":661,"children":1117},[1118],{"type":664,"children":1119},[1120,1122,1124],{"type":647,"marks":1121,"value":1073},[654],{"type":647,"value":1123}," compute CRC over the ",{"type":647,"marks":1125,"value":1126},[737],"final bytes actually stored\u002Ftransported",{"type":643,"level":650,"children":1128},[1129],{"type":647,"marks":1130,"value":1131},[654],"Safety end-to-end: CRC32 is necessary, but rarely sufficient",{"type":664,"children":1133},[1134],{"type":647,"value":1135},"If your system’s safety goal is “detect corrupted bytes,” CRC32 is often enough.",{"type":664,"children":1137},[1138,1140,1143],{"type":647,"value":1139},"If your safety goal is “detect wrong, stale, duplicated, or misrouted information,” CRC32 alone is usually not enough, because those failures can happen ",{"type":647,"marks":1141,"value":1142},[654],"without",{"type":647,"value":1144}," changing the payload bytes.",{"type":643,"level":787,"children":1146},[1147],{"type":647,"marks":1148,"value":1149},[654],"Failure modes CRC32 alone does not cover",{"type":664,"children":1151},[1152,1154],{"type":647,"marks":1153,"value":1053},[654],{"type":647,"value":1155}," replay (old message repeated)",{"type":657,"style":658,"children":1157},[1158,1166],{"type":661,"children":1159},[1160],{"type":664,"children":1161},[1162,1164],{"type":647,"marks":1163,"value":1064},[654],{"type":647,"value":1165}," payload is valid but outdated",{"type":661,"children":1167},[1168],{"type":664,"children":1169},[1170,1172],{"type":647,"marks":1171,"value":1073},[654],{"type":647,"value":1173}," sequence counter + timeout\u002Falive monitoring",{"type":664,"children":1175},[1176,1178],{"type":647,"marks":1177,"value":1053},[654],{"type":647,"value":1179}," reordering \u002F duplication",{"type":657,"style":658,"children":1181},[1182,1190],{"type":661,"children":1183},[1184],{"type":664,"children":1185},[1186,1188],{"type":647,"marks":1187,"value":1064},[654],{"type":647,"value":1189}," receiver sees messages in wrong order or twice",{"type":661,"children":1191},[1192],{"type":664,"children":1193},[1194,1196],{"type":647,"marks":1195,"value":1073},[654],{"type":647,"value":1197}," sequence counter rules (monotonic progression, gap handling)",{"type":664,"children":1199},[1200,1202],{"type":647,"marks":1201,"value":1053},[654],{"type":647,"value":1203}," misrouting \u002F wrong sender",{"type":657,"style":658,"children":1205},[1206,1214],{"type":661,"children":1207},[1208],{"type":664,"children":1209},[1210,1212],{"type":647,"marks":1211,"value":1064},[654],{"type":647,"value":1213}," payload bytes are intact but belong to a different source\u002Fchannel",{"type":661,"children":1215},[1216],{"type":664,"children":1217},[1218,1220],{"type":647,"marks":1219,"value":1073},[654],{"type":647,"value":1221}," include message ID\u002Fsource ID in the protected envelope; validate ID at receiver",{"type":664,"children":1223},[1224,1226],{"type":647,"marks":1225,"value":1053},[654],{"type":647,"value":1227}," wrong length interpretation",{"type":657,"style":658,"children":1229},[1230,1238],{"type":661,"children":1231},[1232],{"type":664,"children":1233},[1234,1236],{"type":647,"marks":1235,"value":1064},[654],{"type":647,"value":1237}," receiver computes CRC over different length (or parses fields differently)",{"type":661,"children":1239},[1240],{"type":664,"children":1241},[1242,1244],{"type":647,"marks":1243,"value":1073},[654],{"type":647,"value":1245}," include length in the protected fields; canonicalize serialization",{"type":643,"level":787,"children":1247},[1248],{"type":647,"marks":1249,"value":1250},[654],"Minimal E2E envelope (protocol-agnostic)",{"type":664,"children":1252},[1253],{"type":647,"value":1254},"A pragmatic baseline envelope looks like:",{"type":657,"style":658,"children":1256},[1257,1263,1269,1275,1281],{"type":661,"children":1258},[1259],{"type":664,"children":1260},[1261],{"type":647,"value":1262},"`msg_id` (what this message means)",{"type":661,"children":1264},[1265],{"type":664,"children":1266},[1267],{"type":647,"value":1268},"`length` (payload length)",{"type":661,"children":1270},[1271],{"type":664,"children":1272},[1273],{"type":647,"value":1274},"`seq` (sequence counter)",{"type":661,"children":1276},[1277],{"type":664,"children":1278},[1279],{"type":647,"value":1280},"`payload` (data)",{"type":661,"children":1282},[1283],{"type":664,"children":1284},[1285],{"type":647,"value":1286},"`crc32` (computed over `msg_id || length || seq || payload`)",{"type":664,"children":1288},[1289],{"type":647,"value":1290},"Receiver adds:",{"type":657,"style":658,"children":1292},[1293],{"type":661,"children":1294},[1295],{"type":664,"children":1296},[1297,1300],{"type":647,"marks":1298,"value":1299},[654],"timeout\u002Falive rule",{"type":647,"value":1301}," (how long stale data is acceptable)",{"type":643,"level":787,"children":1303},[1304],{"type":647,"marks":1305,"value":1306},[654],"Pseudocode: build + check E2E",{"code":1308,"type":1042,"language":1043},"\u002F\u002F Build a protected message.\n\u002F\u002F Inputs:\n\u002F\u002F   msg_id: stable identifier for semantic meaning\n\u002F\u002F   seq: monotonically increasing counter per msg_id\u002Fsource\n\u002F\u002F   payload[]: bytes\n\u002F\u002F Output:\n\u002F\u002F   frame struct with crc32 over (msg_id, length, seq, payload)\nE2eFrame e2e_build(uint32_t msg_id, uint32_t seq, const uint8_t *payload, size_t length) {\n  E2eFrame f;\n  f.msg_id = msg_id;\n  f.length = (uint32_t)length;\n  f.seq    = seq;\n  f.payload = payload;\n\n  \u002F\u002F Serialize fields in a canonical byte order.\n  uint8_t tmp[MAX_TMP];\n  size_t n = serialize_canonical(tmp, msg_id, f.length, seq, payload, length);\n\n  f.crc32 = crc32_compute(tmp, n, CRC32_PARAMS);\n  return f;\n}\n\n\u002F\u002F Check a received protected message.\n\u002F\u002F Returns true if checks pass under the receiver’s policy.\nbool e2e_check(const E2eFrame *f, ReceiverState *st, uint32_t expected_msg_id) {\n  if (f->msg_id != expected_msg_id) return false;\n  if (f->length > MAX_PAYLOAD) return false;\n\n  \u002F\u002F Recompute CRC over canonical serialization.\n  uint8_t tmp[MAX_TMP];\n  size_t n = serialize_canonical(tmp, f->msg_id, f->length, f->seq, f->payload, f->length);\n  uint32_t crc = crc32_compute(tmp, n, CRC32_PARAMS);\n  if (crc != f->crc32) return false;\n\n  \u002F\u002F Sequence policy (example): accept only if seq advances.\n  if (!seq_is_acceptable(st, f->seq)) return false;\n\n  \u002F\u002F Timeout \u002F alive monitoring happens outside this function.\n  \u002F\u002F Example: if time_since_last_valid_msg > T_MAX => treat data as invalid.\n\n  st->last_seq = f->seq;\n  st->last_valid_time = now();\n  return true;\n}",{"type":664,"children":1310},[1311],{"type":647,"marks":1312,"value":1313},[654],"Notes:",{"type":657,"style":658,"children":1315},[1316,1322],{"type":661,"children":1317},[1318],{"type":664,"children":1319},[1320],{"type":647,"value":1321},"Define your sequence policy explicitly: wrap-around, tolerated gaps, reset behavior.",{"type":661,"children":1323},[1324],{"type":664,"children":1325},[1326],{"type":647,"value":1327},"The moment you add sequence\u002Ftimeout rules, you’ve moved from “bit integrity” to “information integrity.” That’s usually what safety reviews actually care about.",{"type":643,"level":650,"children":1329},[1330],{"type":647,"marks":1331,"value":1332},[654],"CRC32 is not security (keep it simple)",{"type":664,"children":1334},[1335],{"type":647,"value":1336},"CRC32 is deterministic and unkeyed. If an attacker can modify the payload, they can typically compute a matching CRC32 for the modified payload.\nIf you need to detect intentional manipulation, use a cryptographic mechanism (MAC\u002FHMAC or signature) that matches your threat model and key management constraints.",{"type":643,"level":650,"children":1338},[1339],{"type":647,"marks":1340,"value":1341},[654],"Checklist",{"type":657,"style":1343,"children":1344},"numbered",[1345,1351,1357,1363,1369,1375,1381,1387],{"type":661,"children":1346},[1347],{"type":664,"children":1348},[1349],{"type":647,"value":1350},"Do we have a written CRC32 variant definition (poly\u002Finit\u002Frefin\u002Frefout\u002Fxorout)?",{"type":661,"children":1352},[1353],{"type":664,"children":1354},[1355],{"type":647,"value":1356},"Do both ends compute CRC over the exact same byte stream (canonical serialization)?",{"type":661,"children":1358},[1359],{"type":664,"children":1360},[1361],{"type":647,"value":1362},"Do we have known-answer tests shared across host + target?",{"type":661,"children":1364},[1365],{"type":664,"children":1366},[1367],{"type":647,"value":1368},"If using HW CRC: are reflection\u002Finit\u002Fxorout and feed order verified with short KATs?",{"type":661,"children":1370},[1371],{"type":664,"children":1372},[1373],{"type":647,"value":1374},"Firmware: do we define behavior on mismatch (reject\u002Frollback\u002Fretry)?",{"type":661,"children":1376},[1377],{"type":664,"children":1378},[1379],{"type":647,"value":1380},"E2E: do we protect msg_id + length + seq + payload (not payload alone)?",{"type":661,"children":1382},[1383],{"type":664,"children":1384},[1385],{"type":647,"value":1386},"E2E: do we define seq policy and timeout\u002Falive rules?",{"type":661,"children":1388},[1389],{"type":664,"children":1390},[1391],{"type":647,"value":1392},"If tamper resistance is required: do we have an authenticity mechanism (MAC\u002Fsignature)?",{"type":643,"level":650,"children":1394},[1395],{"type":647,"marks":1396,"value":1397},[654],"FAQ",{"type":643,"level":787,"children":1399},[1400],{"type":647,"marks":1401,"value":1402},[654],"Is CRC32 enough for firmware updates?",{"type":664,"children":1404},[1405,1407,1410],{"type":647,"value":1406},"It’s enough to detect many forms of ",{"type":647,"marks":1408,"value":1409},[654],"accidental corruption,",{"type":647,"value":1411}," if ",{"type":657,"style":1343,"children":1413},[1414,1420],{"type":661,"children":1415},[1416],{"type":664,"children":1417},[1418],{"type":647,"value":1419},"both sides agree on the variant and covered bytes and",{"type":661,"children":1421},[1422],{"type":664,"children":1423},[1424],{"type":647,"value":1425},"you define what happens on mismatch (rollback\u002Fretry).",{"type":664,"children":1427},[1428],{"type":647,"value":1429},"If you need to prevent installing maliciously modified firmware, CRC32 is not enough. You need cryptographic authenticity.",{"type":643,"level":787,"children":1431},[1432],{"type":647,"marks":1433,"value":1434},[654],"Can CRC32 correct errors?",{"type":664,"children":1436},[1437],{"type":647,"value":1438},"No. CRC32 detects corruption but does not identify the error location or repair it.",{"type":643,"level":787,"children":1440},[1441],{"type":647,"marks":1442,"value":1443},[654],"Why does my hardware CRC not match my software CRC?",{"type":664,"children":1445},[1446],{"type":647,"value":1447},"Usually because of a parameter mismatch (reflection, init\u002Ffinal XOR, polynomial) or because the HW unit is fed a different byte stream than the SW implementation.",{"type":643,"level":787,"children":1449},[1450],{"type":647,"marks":1451,"value":1452},[654],"Which CRC32 should I use?",{"type":664,"children":1454},[1455,1457,1460],{"type":647,"value":1456},"If you’re interoperating with a protocol or existing ecosystem, use the variant it defines.\nIf you control both ends, pick one variant and ",{"type":647,"marks":1458,"value":1459},[737],"*freeze the parameters*",{"type":647,"value":1461}," in a spec plus test vectors so it can’t silently drift.",{"type":643,"level":650,"children":1463},[1464],{"type":647,"marks":1465,"value":1466},[654],"Sources \u002F further reading",{"type":657,"style":658,"children":1468},[1469,1490],{"type":661,"children":1470},[1471],{"type":664,"children":1472},[1473,1475,1488],{"type":647,"value":1474},"Ross N. Williams, ",{"url":1476,"meta":1477,"type":1481,"children":1482},"https:\u002F\u002Fzlib.net\u002Fcrc_v3.txt",[1478],{"id":1479,"value":1480},"target","_blank","link",[1483,1486],{"type":647,"marks":1484,"value":1485},[737],"A Painless Guide to CRC Error Detection Algorithms",{"type":647,"value":1487}," (1993)",{"type":647,"value":1489},". Canonical reference for CRC parameterization (Rocksoft model) and implementation details.",{"type":661,"children":1491},[1492],{"type":664,"children":1493},[1494,1496,1503],{"type":647,"value":1495},"RevEng CRC Catalogue. ",{"url":1497,"meta":1498,"type":1481,"children":1500},"https:\u002F\u002Freveng.sourceforge.io\u002Fcrc-catalogue\u002F17plus.htm",[1499],{"id":1479,"value":1480},[1501],{"type":647,"value":1502},"Practical catalogue of named CRC variants and their parameters",{"type":647,"value":1504}," (useful when you need to pin down “which CRC32”).",{"type":643,"level":650,"children":1506},[1507],{"type":647,"marks":1508,"value":1509},[654],"Conclusion",{"type":664,"children":1511},[1512],{"type":647,"value":1513},"CRC32 is a practical tool for detecting accidental corruption, but it is easy to get wrong in integration. Treat the CRC definition as an interface: specify the variant parameters, define the exact byte stream, and lock it down with shared test vectors.",{"type":664,"children":1515},[1516],{"type":647,"value":16},{"primaryLabel":1518,"primaryMicrocopy":1519,"primaryTrackingId":1520,"primaryLink":1521,"secondaryLabel":1525,"secondaryMicrocopy":1526,"secondaryTrackingId":1527,"secondaryLink":1528},"Request RTOS demo","Get demo projects and documentation by email.","request_demo",{"id":373,"title":374,"caption":16,"iconname":375,"link":1522},[1523],{"id":378,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":1524},{"slug":380},"Talk to an engineer","Tell us your MCU and constraints. We’ll suggest the right next step.","talk_engineer",{"id":97,"title":98,"caption":99,"iconname":100,"link":1529},[1530],{"id":103,"linkType":20,"externalUrl":16,"newWindow":21,"anchor":16,"page":1531},{"slug":105},{"id":1533,"title":1534,"subtitle":1535,"ctaSelection":1536},"IKaF1xRkR_qfTVnIBMSKRA","Two ways to move from theory","Start with Safety AddOns if you want a ready to use module for CRC and E2E communication, including selectable polynomials and parameters and, depending on the MCU, hardware acceleration.  If you want help applying the concepts to your project, talk to an engineer. A short review of your failure model, CRC32 parameters, and your image or message envelope (ID, length, sequence, timeout, CRC) often removes integration ambiguity early.","both"]