• Join
  • Sign In with my.TI Login
Texas Instruments
  • Products
  • Applications
  • Tools & Software
  • Support & Community
  • Sample & Buy
  • About TI
Sample & Purchase Cart Sample & Purchase Cart
  • Search
  • Advanced
TI E2E™ Community
  • Support Forums
  • Blogs
  • Groups
  • Videos
  • 简体中文
  • More ...
TI Home » TI E2E Community » Support Forums » Microcontrollers » Hercules™ Safety Microcontrollers » Hercules™ Safety Microcontrollers Forum » Please provide Algorithm for (72, 64) SECDED ECC as used with TMS570LS3137 device
Share
Hercules™ Safety Microcontrollers
  • Forum
  • E2E Wiki
Options
  • Subscribe via RSS

Forums

Please provide Algorithm for (72, 64) SECDED ECC as used with TMS570LS3137 device

This question is answered
Pashan None
Posted by Pashan None
on Apr 23 2012 12:00 PM
Genius3175 points

Hello Support,

Can you please provide a detailed description of (72,64) SECDED ECC Algorithm as being used within nowECC as well as TMS570LS3137?

I am looking for Boolean Equations for SECDED ECC Logic.

Thank you.

Regards

Pashan

 

Report Abuse
  • Reply
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
All Replies
  • Diwakar Bansal
    Posted by Diwakar Bansal
    on Apr 23 2012 16:36 PM
    Intellectual1280 points

    Hi Pashan,

    This question is being reviewed by the nowECC team and will be responded to shortly.

    Best regards.

    nowECC
    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • Diwakar Bansal
    Posted by Diwakar Bansal
    on Apr 25 2012 11:13 AM
    Suggested Answer
    Intellectual1280 points

    Hello Pashan,

    Please refer to the following Application note which describes describes ECC handling in TMSx70-Based Microcontrollers.

    http://www.ti.com/lit/an/spna126/spna126.pdf

    Section 1.5 , Table 1. ECC Encoding in this Application note illustrates how the ECC is calculated.

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • Pashan None
    Posted by Pashan None
    on Apr 26 2012 16:44 PM
    Genius3175 points

    Hello Diwakar,

    1> Can you please explain the meaning of the column ADDR_MSW_LSW in the above mentioned table?

    2> In ADDR_MSW_LSW column, one row is EMPTY means what?

    Thank you.

    Regards

    Pashan

     

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • Charles Tsai
    Posted by Charles Tsai
    on Apr 27 2012 07:27 AM
    Prodigy550 points

    Hi Prashan,

      ADDR means the address. MSW means the most significant (the upper 32bit) word and LSW means the least significant (lower 32bit) word.  ECC is calculated based on both the address and the 64-bit data associated with the specified address.

     I think somehow the apps note missed to show the value under the column ADDR_MSW_LSW for ECC bit5. The value should be 07F80_FF00FF00_FF00FF00.

    Please let me know if this answers the question.

    regards,

    Charles

     

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • Pashan None
    Posted by Pashan None
    on Apr 27 2012 08:24 AM
    Genius3175 points

    Hello Charles,

    In the CPU Parity Column, I don't see any entry for ECC(5) and ECC(0).

    What does that missing entry means?

    Thank you.

    Regards

    Pashan

     

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • Diwakar Bansal
    Posted by Diwakar Bansal
    on Apr 27 2012 15:13 PM
    Intellectual1280 points

    It is 'Even' for both ECC(5) and ECC(0). This is also missing from the app note. Thanks for the inputs.

    Regards,

    Diwakar

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • Charles Tsai
    Posted by Charles Tsai
    on Apr 27 2012 15:29 PM
    Verified Answer
    Verified by Pashan None
    Prodigy550 points

    Hi Pashan,

      As Diwakar just said they are "Even". During document coversion these fields are missed out for some reason. I will report this issue. I also notice another errors in the table for rows corresponding to ECC(5) and ECC(0). The fields that marked with "x" are not matching the the hex data code presented under the ADDR_MSW_LSW column. I think thisi is again a result of file conversion. Please also take notice of this. For example, for row corresponding to ECC(0) the hex value is 554EA_B4D1B4D1_4B2E4B2E is correct. But if you look at the corresponding "x" they don't match.

    regards,

    Charles

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • Pashan None
    Posted by Pashan None
    on May 01 2012 20:17 PM
    Genius3175 points

    Hello Charles/Diwakar,

    I am still not clear about the BOOLEAN Equations required for generating ECC bits.

    Initially I thought for 64-Bit DATA, with NO Address ECC,

    Each row of spna126.pdf table need to be XORed [x-bit positions] for the corresponding ECC-Bit.

    But, then how does CPU Parity Column fits into that BOOLEAN XOR equation for each ECC Bit?

    Please provide some more detail with example for 64-Bit DATA with NO ADDRESS ECC calculation.

    That will help me understand.

    For 64-Bit DATA with no ADDRESS ECC example below:

    0x0000_0000_0000_0000             ------------  0x0C [ECC Byte]

    0x0000_0000_0000_0001              ----------- 0x6E [ECC Byte]

    0x0000_0000_0000_0002              ----------- 0x68 [ECC Byte]

    0x0000_0000_0000_0004              ----------- 0x6B [ECC Byte

    How does for the above example ECC Byte is calculated with no ADDRESS ECC?

    Thank you.

    Regards

    Pashan

     

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • Charles Tsai
    Posted by Charles Tsai
    on May 02 2012 06:57 AM
    Prodigy550 points

    Hi Pashan,

      Each ECC bit is a result of the corresponding data bits at the specified bit locations being XOR'ed together. The CPU parity bit column specifies whether the ECC parity is calculated in EVEN parity format or ODD parity format. For example to calculate ECC(0), it needs to have even number of '1' at the corresponding bit positions marked with 'x' to set ECC(0) to '1'. Likewise, for ECC(2), it needs to have odd number of '1' at the corresponding bit positions marked with 'x' to set ECC(2) to '1'.

      If you just want to calculate ECC for only the 64-bit data then you can just simply ignore all the participating address bits. Just ignore all the 'x' in the upper table for bits 82:64 which corresponds to address bits 21:03.

    regards,

    Charles

     

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • Pashan None
    Posted by Pashan None
    on May 02 2012 08:08 AM
    Genius3175 points

    Hello Charles,

    Following the above rules,

    Can you please elaborate for the following 64-Bit DATA Item of 0x0000_0000_0000_0001, how ECC Byte as 0x6E?

    This will help me understand the algorithm better.

    Thank you for the support.

    Regards

    Pashan

     

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • Charles Tsai
    Posted by Charles Tsai
    on May 02 2012 10:11 AM
    Prodigy550 points

    Hi Pashan,

      I'm not sure how you get the 0x6E for the data value of 0x0000_0000_0000_0001. Please look at the below equations to calculate each ECC bit.

    regards,

    Charles

    ECC(0) <= DATA(1) xor DATA(2) xor DATA(3) xor DATA(5) xor

                DATA(8) xor DATA(9) xor DATA(11) xor DATA(14) xor

                DATA(17) xor DATA(18) xor DATA(19) xor DATA(21) xor

                DATA(24) xor DATA(25) xor DATA(27) xor DATA(30) xor

                DATA(32) xor DATA(36) xor DATA(38) xor DATA(39) xor

                DATA(42) xor DATA(44) xor DATA(45) xor DATA(47) xor

                DATA(48) xor DATA(52) xor DATA(54) xor DATA(55) xor

                DATA(58) xor DATA(60) xor DATA(61) xor DATA(63);

     

      ECC(1) <= DATA(0) xor DATA(1) xor DATA(2) xor DATA(4) xor

                DATA(6) xor DATA(8) xor DATA(10) xor DATA(12) xor

                DATA(16) xor DATA(17) xor DATA(18) xor DATA(20) xor

                DATA(22) xor DATA(24) xor DATA(26) xor DATA(28) xor

                DATA(32) xor DATA(33) xor DATA(34) xor DATA(36) xor DATA(38) xor

                DATA(40) xor DATA(42) xor DATA(44) xor DATA(48) xor

                DATA(49) xor DATA(50) xor DATA(52) xor DATA(54) xor

                DATA(56) xor DATA(58) xor DATA(60);

     

      ECC(2) <= not (DATA(0) xor DATA(3) xor DATA(4) xor DATA(7) xor

                DATA(9) xor DATA(10) xor DATA(13) xor DATA(15) xor

                DATA(16) xor DATA(19) xor DATA(20) xor DATA(23) xor

                DATA(25) xor DATA(26) xor DATA(29) xor DATA(31) xor

                DATA(32) xor DATA(35) xor DATA(36) xor DATA(39) xor

                DATA(41) xor DATA(42) xor DATA(45) xor DATA(47) xor

                DATA(48) xor DATA(51) xor DATA(52) xor DATA(55) xor

                DATA(57) xor DATA(58) xor DATA(61) xor DATA(63));

     

      ECC(3) <= not (DATA(0) xor DATA(1) xor DATA(5) xor DATA(6) xor

                DATA(7) xor DATA(11) xor DATA(12) xor DATA(13) xor

                DATA(16) xor DATA(17) xor DATA(21) xor DATA(22) xor

                DATA(23) xor DATA(27) xor DATA(28) xor DATA(29) xor

                DATA(32) xor DATA(33) xor DATA(37) xor DATA(38) xor

                DATA(39) xor DATA(43) xor DATA(44) xor DATA(45) xor

                DATA(48) xor DATA(49) xor DATA(53) xor DATA(54) xor

                DATA(55) xor DATA(59) xor DATA(60) xor DATA(61));

     

      ECC(4) <= DATA(2) xor DATA(3) xor DATA(4) xor DATA(5) xor

                DATA(6) xor DATA(7) xor DATA(14) xor DATA(15) xor

                DATA(18) xor DATA(19) xor DATA(20) xor DATA(21) xor

                DATA(22) xor DATA(23) xor DATA(30) xor DATA(31) xor

                DATA(34) xor DATA(35) xor DATA(36) xor DATA(37) xor

                DATA(38) xor DATA(39) xor DATA(46) xor DATA(47) xor

                DATA(50) xor DATA(51) xor DATA(52) xor DATA(53) xor

                DATA(54) xor DATA(55) xor DATA(62) xor DATA(63);

     

      ECC(5) <= DATA(8) xor DATA(9) xor DATA(10) xor DATA(11) xor

                DATA(12) xor DATA(13) xor DATA(14) xor DATA(15) xor

                DATA(24) xor DATA(25) xor DATA(26) xor DATA(27) xor

                DATA(28) xor DATA(29) xor DATA(30) xor DATA(31) xor DATA(40) xor

                DATA(41) xor DATA(42) xor DATA(43) xor DATA(44) xor

                DATA(45) xor DATA(46) xor DATA(47) xor DATA(56) xor

                DATA(57) xor DATA(58) xor DATA(59) xor DATA(60) xor

                DATA(61) xor DATA(62) xor DATA(63);

     

      ECC(6) <= DATA(0) xor DATA(1) xor DATA(2) xor DATA(3) xor

                DATA(4) xor DATA(5) xor DATA(6) xor DATA(7) xor

                DATA(24) xor DATA(25) xor DATA(26) xor DATA(27) xor

                DATA(28) xor DATA(29) xor DATA(30) xor DATA(31) xor

                DATA(32) xor DATA(33) xor DATA(34) xor DATA(35) xor

                DATA(36) xor DATA(37) xor DATA(38) xor DATA(39) xor

                DATA(56) xor DATA(57) xor DATA(58) xor DATA(59) xor

                DATA(60) xor DATA(61) xor DATA(62) xor DATA(63);

     

      ECC(7) <= DATA(0) xor DATA(1) xor DATA(2) xor DATA(3) xor

                DATA(4) xor DATA(5) xor DATA(6) xor DATA(7) xor

                DATA(24) xor DATA(25) xor DATA(26) xor DATA(27) xor

                DATA(28) xor DATA(29) xor DATA(30) xor DATA(31) xor

                DATA(40) xor DATA(41) xor DATA(42) xor DATA(43) xor

                DATA(44) xor DATA(45) xor DATA(46) xor DATA(47) xor

                DATA(48) xor DATA(49) xor DATA(50) xor DATA(51) xor

                DATA(52) xor DATA(53) xor DATA(54) xor DATA(55);

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • Pashan None
    Posted by Pashan None
    on May 02 2012 10:58 AM
    Genius3175 points
    Test_ECC.zip

    Hello Charles,

    I am attaching a document [Cortex_F021_ECC.pdf] as well as all the necessary files in ZIP format in order to recreate the problem at your end with the nowECC Version 2.17 tool.

    Let me know if you don't find the error.

    Attached document mentions how to view the error.

    I am waiting for the clear understanding of the error I am seeing at my end as it doesn't fit the BOOLEAN EQUATION you mentioed.

    Thank you.

    Regards

    Pashan

     

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • Charles Tsai
    Posted by Charles Tsai
    on May 03 2012 06:56 AM
    Prodigy550 points

    Hello Pashan,

      I will need to check with our nowECC developer and get back.

    regards,

    Charles

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • Charles Tsai
    Posted by Charles Tsai
    on May 07 2012 14:38 PM
    Prodigy550 points

    Hello Pashan,

      Sorry for the delay. Your query on nowECC had been communicated to our nowECC developer.  I will suggest that you open a new forum post regarding nowECC checksum calculation for easier tracking.

    regards,

    Charles

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • Prathap
    Posted by Prathap
    on May 08 2012 00:20 AM
    Expert6175 points

    Hello Pashan,

    For ARM R4 devices running in big endian mode (Big Endian 32), the byte ordering is swapped to become:  MSB 7,6,5,4,3,2,1,0 LSB ->  4, 5, 6, 7, 0, 1, 2, 3.

    For e.g : If your 64 bit data is (MSB )0x07060504_03020100 (LSB), then after swapping the data will be 0x04050607_00010203.

    The ECC has to be calculated on the swapped data using the algorithm specified earlier. This is the ECC ordering expected by the ARM CPU running in BE32 mode. For ARM R4 CPUs running in little endian mode, no byte swapping is needed.

    Regards,

    Prathap

    ~~~ If a post answers your question, please mark it with the"Verify Answer" button. ~~~

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
12
TI E2E™ Community
  • Support Forums
  • Blogs
  • Videos
  • Groups
  • Site Support & Feedback
  • Settings
TI E2E™ Community Groups
  • TI University Program
  • Make the Switch
  • Microcontroller Projects
  • Motor Drive & Control
Other Communities
  • Deyisupport
  • Designsomething.org
  • beagleboard.org
  • TI on Element 14
  • TI on TechXchangeSM
Other Technical & Support Resources
  • WEBENCH® Design Center
  • Product Information Centers
  • Technical Documents
  • TI Design Network
  • TI Technical Articles
  • TI Training

All content and materials on this site are provided "as is". TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with regard to these materials, including but not limited to all implied warranties and conditions of merchantability, fitness for a particular purpose, title and non-infringement of any third party intellectual property right. TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with respect to these materials. No license, either express or implied, by estoppel or otherwise, is granted by TI. Use of the information on this site may require a license from a third party, or a license from TI.

Content on this site may contain or be subject to specific guidelines or limitations on use. All postings and use of the content on this site are subject to the Terms of Use of the site; third parties using this content agree to abide by any limitations or guidelines and to comply with the Terms of Use of this site. TI, its suppliers and providers of content reserve the right to make corrections, deletions, modifications, enhancements, improvements and other changes to the content and materials, its products, programs and services at any time or to move or discontinue any content, products, programs, or services without notice.

Follow Us Texas Instruments on Facebook Texas Instruments on Twitter Texas Instruments on LinkedIn Texas Instruments on Google+
TI Worldwide | Contact Us | my.TI Login | Site Map | Corporate Citizenship | mobile m.ti.com (Mobile Version)

TI is a global semiconductor design and manufacturing company. Innovate with 100,000+ analog ICs and
embedded processors, along with software, tools and the industry’s largest sales/support staff.

© Copyright 1995-2013 Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy Policy | Terms of Use