<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>i.MX Processorsのトピック&amp;quot;ECC failed&amp;quot; boot error after pulling power cable while flashing with 'kobs-ng init'</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/quot-ECC-failed-quot-boot-error-after-pulling-power-cable-while/m-p/456698#M71269</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi all,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;we use a iMX28 for a linux based product.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For the firmware upgrade 'kobs-ng init' is called to flash the SB file.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This works quite well, except when the power cable is pulled while flashing:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;# kobs-ng init -v /tmp/pn-switch-develop_V1.00.101.sb --chip_0_size=0x2800000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;MTD CONFIG:&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; chip_0_device_path = "/dev/mtd0"&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; chip_0_size = 41943040&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; chip_1_device_path = "(null)"&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; search_exponent = 2&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; data_setup_time = 80&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; data_hold_time = 60&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; address_setup_time = 25&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; data_sample_time = 6&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; row_address_size = 3&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; column_address_size = 2&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; read_command_code1 = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; read_command_code2 = 48&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; boot_stream_major_versiot_stream_minor_version = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; boot_stream_sub_version = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; ncb_version = 3&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; boot_stream_1_address = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; boot_stream_2_address = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;/tmp/pn-switch-develop_V1.00.101.sb: verifying using key '00000000000000000000000000000000'&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;boot image header:&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_digest = 0c9029a68fc410d58af49ac3db439c0fde09a205&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_signature = STMP&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_majorVersion = 1&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_minorVersion = 1&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_flags = ROM_DISPLAY_PROGRESS (1)&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_imageBlocks = 355172&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_firstBootTagBlock = 9&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_firstBootableSectionID = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_keyCount = 1&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_keyDictionaryBlock = 7&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_headerBlocks = 6&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_sectionCount = 1&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_sectionHeaderSize = 1&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_timestamp = Thu Dec&amp;nbsp; 3 10:19:26 2015&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_productVersion.m_majorsion.m_minor = 0x9909&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_productVersion.m_revision = 0x9909&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_componentVersion.m_major = 0x9909&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_componentVersion.m_minor = 0x9909&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_componentVersion.m_revision = 0x9909&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_driveTag = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;* Using user supplied key='00000000000000000000000000000000'&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;section header #0:&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_identifier = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_offset = 10&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_length = 355160&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_flags = ROM_SECTION_BOOTABLE (0x1)&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;* calculated-mac = 5bfb4000c36534ce809ec68e0408d4e&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;dek dictionary entry #0:&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_mac = 5bfb4000c36534ce809ec687e0408d4e&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_dek = b91ce39a505bff1a2dee2f7e0ac7771f&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;* Key matched at #0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;* session_key = 00000000000000000000000000000000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;LOAD m_address=0x00000000 m_count=0x00002270&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;LOAD m_address=0x00008000 m_count=0x00000020&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;CALL m_address=0x00008000 m_data=0x00000000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;LOAD m_address=0x40000100 m_count=0x00023950&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;LOAD m_address=0x42000000 m_count=0x00545910&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;LOAD m_address=0x00008000 m_count=0x00000020&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;CALL m_address=0x00008000 m_data=0x00000000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;* read SHA1 = 052187aed4a5080756760c04cd5a8ed82a366f4a&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;* calc SHA1 = 052187aed4a5080756760c04cd5a8ed82a366f4a&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;/tmp/pn-switch-develop_V1.00.101.sb: is a valid bootstream for key '00000000000000000000000000000000'&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: opening: "/dev/mtd0"&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: '/dev/mtd0' bad block @ 0x1d80000 (MTD)&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;Cannot open NFC geometry node: "/sys/bus/platform/devices/gpmi-nfc.0/nfc_geometry", but we can calculate it ourselves.NFC geometry :&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;ECC Strength&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 8&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;Page Size in Bytes : 2112&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;Metadata size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 10&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;ECC Chunk Size in byte : 512&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;ECC Chunk count&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 4&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;Block Mark Byte Offset : 1999&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;Block Mark Bit Offset&amp;nbsp; ===================================================&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: opened '/dev/mtd0' - '(null)'&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: max_boot_stream_size_in_bytes = 20447232&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: boot_stream_size_in_bytes = 5682752&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: boot_stream_size_in_pages = 2775&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: #1 0x00100000 - 0x01480000 (0x0066b640)&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: #2 0x01480000 - 0x02800000 (0x019eb640)&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Bad blocks is 1&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;FCB&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32Checksum = 0x00000000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32FingerPrint = 0x20424346&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32Version = 0x01000000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_NANDTiming.m_u8DataSetup = 80&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_NANDTiming.m_u8DataHold = 60&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_NANDTiming.m_u8AddressSetup = 25&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_NANDTiming.m_u8DSAMPLE_TIME = 6&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32PageDataSize = 2048&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32TotalPageSize = 2112&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32SectorsPerBlock = 64&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32NumberOfNANDs = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32TotalInternalDie = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32CellType = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32EccBlockNEccType = 4&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32EccBlock0Size = 512&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32EccBlockNSize = 512&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32EccBlock0EccType = 4&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32MetadataBytes = 10&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32NumEccBlocksPerPage = 3&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32EccBlockNEccLevelSDK = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32EccBlock0SizeSDK = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32EccBlockNSizeSDK = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32EccBlock0EccLevelSDK = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32NumEccBlocksPerPageSDK = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32MetadataBytesSDK = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32EraseThreshold = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32BootPatch = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32PatchSectors = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32Firmware1_startingPage = 512&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32Firmware2_startingPage = 10496&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32PagesInFirmware1 = 2775&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32PagesInFirmware2 = 2775&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32DBBTSearchAreaStartAddress = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32BadBlockMarkerByte = 1999&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32BadBlockMarkerStartBit = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32BBMarkerPhysicalOffset = 2048&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DBBT&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32Checksum = 0x00000000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32FingerPrint = 0x5442444&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32Version = 0x01000000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32NumberBB = 1&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32Number2KPagesBB = 1&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;Firmware: image #0 @ 0x100000 size 0x56b800 - available 0x1380000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;Firmware: image #1 @ 0x1480000 size 0x56b800 - available 0x1380000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;NCB versions differ, 3 is used.&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;------- Start to write the [ FCB ] -----&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x0-0x20000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Writing FCB0 [ @0:0x0 ] (840) *&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x20000-0x40000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Writing FCB1 [ @0:0x20000 ] (840) *&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x40000-0x60000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Writing FCB2 [ @0:0x40000 ] (840) *&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x60000-0x80000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Writing FCB3 [ @0:0x60000 ] (840) *&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd_commit_bcb(FCB): status 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DBBT checksum length : 176&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;-------------- Start to write the DBBT ] -----&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x80000-0xa0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Writing DBBT0 [ @0:0x80000 ] (800) *&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0xa0000-0xc0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Writing DBBT1 [ @0:0xa0000 ] (800) *&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0xc0000-0xe0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Writing DBBT2 [ @0:0xc0000 ] (800) *&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0xe0000-0x100000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Writing DBBT3 [ @0:0xe0000 ] (800) *&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd_commit_bcb(DBBT): status 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: DBBT search area 256&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: PUTTING down DBBT0 BBTN0 @0x82000 (0)&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;---------- Start to write the [ /tmp/pn-switch-develop_V1.00.101.sb ]----&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Writting /tmp/pn-switch-develop_V1.00.101.sb: #0 @0: 0x00100000 - 0x0066b800&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x100000-0x120000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x120000-0x140000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x140000-0x160000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x160000-0x180000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x180000-0x1a0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1a0000-0x1c0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1c0000-0x1e0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1e0000-0x200000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x200000-0x220000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x220000-0x240000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x240000-0x260000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x260000-0x280000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x280000-0x2a0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x2a0000-0x2c0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x2c0000-0x2e0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x2e0000-0x300000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x300000-0x320000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x320000-0x340000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x340000-0x360000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x360000-0x380000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x380000-0x3a0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x3a0000-0x3c0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x3c0000-0x3e0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x3e0000-0x400000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x400000-0x420000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x420000-0x440000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x440000-0x460000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x460000-0x480000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x480000-0x4a0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x4a0000-0x4c0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x4c0000-0x4e0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x4e0000-0x500000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x500000-0x520000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x520000-0x540000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x540000-0x560000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x560000-0x580000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x580000-0x5a0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x5a0000-0x5c0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x5c0000-0x5e0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x5e0000-0x600000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x600000-0x620000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x620000-0x640000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x640000-0x660000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x660000-0x680000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: The last page is not full : 1600&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: We write one page for save guard. *&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Writting /tmp/pn-switch-develop_V1.00.101.sb: #1 @0: 0x01480000 - 0x019eb800&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1480000-0x14a0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x14a0000-0x14c0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x14c0000-0x14e0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x14e0000-0x1500000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1500000-0x1520000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1520000-0x1540000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1540000-0x1560000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1560000-0x1580000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1580000-0x15a0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x15a0000-0x15c0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x15c0000-0x15e0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x15e0000-0x1600000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1600000-0x1620000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1620000-0x1640000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1640000-0x1660000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1660000-0x1680000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;HTLLCLL0x8050800f&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;According to &lt;A href="http://sasamy.narod.ru/IMX23_ROM_Error_Codes.pdf"&gt;this document&lt;/A&gt;​, ​error code 8050800f stands for "ECC failed - data is not valid".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I understand ECC (Error Correction Coding) can fail as a result of brownouts.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;But I can not understand, why ECC failures prevent my device from booting from the NAND flash:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt; 'kobs-ng init' writes the boot stream two times&lt;/LI&gt;&lt;LI&gt;I pulled the power cable after the first boot stream has been sucessfully written&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Why can't the iMX28 gracefully ignore the ECC failure and boot from the first boot stream?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Andreas&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 02 Dec 2015 15:40:01 GMT</pubDate>
    <dc:creator>andreashaas</dc:creator>
    <dc:date>2015-12-02T15:40:01Z</dc:date>
    <item>
      <title>"ECC failed" boot error after pulling power cable while flashing with 'kobs-ng init'</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/quot-ECC-failed-quot-boot-error-after-pulling-power-cable-while/m-p/456698#M71269</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi all,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;we use a iMX28 for a linux based product.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For the firmware upgrade 'kobs-ng init' is called to flash the SB file.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This works quite well, except when the power cable is pulled while flashing:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;# kobs-ng init -v /tmp/pn-switch-develop_V1.00.101.sb --chip_0_size=0x2800000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;MTD CONFIG:&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; chip_0_device_path = "/dev/mtd0"&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; chip_0_size = 41943040&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; chip_1_device_path = "(null)"&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; search_exponent = 2&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; data_setup_time = 80&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; data_hold_time = 60&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; address_setup_time = 25&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; data_sample_time = 6&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; row_address_size = 3&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; column_address_size = 2&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; read_command_code1 = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; read_command_code2 = 48&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; boot_stream_major_versiot_stream_minor_version = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; boot_stream_sub_version = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; ncb_version = 3&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; boot_stream_1_address = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; boot_stream_2_address = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;/tmp/pn-switch-develop_V1.00.101.sb: verifying using key '00000000000000000000000000000000'&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;boot image header:&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_digest = 0c9029a68fc410d58af49ac3db439c0fde09a205&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_signature = STMP&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_majorVersion = 1&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_minorVersion = 1&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_flags = ROM_DISPLAY_PROGRESS (1)&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_imageBlocks = 355172&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_firstBootTagBlock = 9&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_firstBootableSectionID = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_keyCount = 1&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_keyDictionaryBlock = 7&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_headerBlocks = 6&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_sectionCount = 1&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_sectionHeaderSize = 1&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_timestamp = Thu Dec&amp;nbsp; 3 10:19:26 2015&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_productVersion.m_majorsion.m_minor = 0x9909&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_productVersion.m_revision = 0x9909&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_componentVersion.m_major = 0x9909&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_componentVersion.m_minor = 0x9909&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_componentVersion.m_revision = 0x9909&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_driveTag = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;* Using user supplied key='00000000000000000000000000000000'&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;section header #0:&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_identifier = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_offset = 10&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_length = 355160&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_flags = ROM_SECTION_BOOTABLE (0x1)&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;* calculated-mac = 5bfb4000c36534ce809ec68e0408d4e&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;dek dictionary entry #0:&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_mac = 5bfb4000c36534ce809ec687e0408d4e&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_dek = b91ce39a505bff1a2dee2f7e0ac7771f&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;* Key matched at #0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;* session_key = 00000000000000000000000000000000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;LOAD m_address=0x00000000 m_count=0x00002270&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;LOAD m_address=0x00008000 m_count=0x00000020&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;CALL m_address=0x00008000 m_data=0x00000000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;LOAD m_address=0x40000100 m_count=0x00023950&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;LOAD m_address=0x42000000 m_count=0x00545910&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;LOAD m_address=0x00008000 m_count=0x00000020&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;CALL m_address=0x00008000 m_data=0x00000000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;* read SHA1 = 052187aed4a5080756760c04cd5a8ed82a366f4a&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;* calc SHA1 = 052187aed4a5080756760c04cd5a8ed82a366f4a&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;/tmp/pn-switch-develop_V1.00.101.sb: is a valid bootstream for key '00000000000000000000000000000000'&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: opening: "/dev/mtd0"&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: '/dev/mtd0' bad block @ 0x1d80000 (MTD)&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;Cannot open NFC geometry node: "/sys/bus/platform/devices/gpmi-nfc.0/nfc_geometry", but we can calculate it ourselves.NFC geometry :&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;ECC Strength&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 8&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;Page Size in Bytes : 2112&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;Metadata size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 10&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;ECC Chunk Size in byte : 512&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;ECC Chunk count&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 4&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;Block Mark Byte Offset : 1999&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;Block Mark Bit Offset&amp;nbsp; ===================================================&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: opened '/dev/mtd0' - '(null)'&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: max_boot_stream_size_in_bytes = 20447232&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: boot_stream_size_in_bytes = 5682752&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: boot_stream_size_in_pages = 2775&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: #1 0x00100000 - 0x01480000 (0x0066b640)&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: #2 0x01480000 - 0x02800000 (0x019eb640)&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Bad blocks is 1&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;FCB&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32Checksum = 0x00000000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32FingerPrint = 0x20424346&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32Version = 0x01000000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_NANDTiming.m_u8DataSetup = 80&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_NANDTiming.m_u8DataHold = 60&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_NANDTiming.m_u8AddressSetup = 25&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_NANDTiming.m_u8DSAMPLE_TIME = 6&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32PageDataSize = 2048&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32TotalPageSize = 2112&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32SectorsPerBlock = 64&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32NumberOfNANDs = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32TotalInternalDie = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32CellType = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32EccBlockNEccType = 4&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32EccBlock0Size = 512&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32EccBlockNSize = 512&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32EccBlock0EccType = 4&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32MetadataBytes = 10&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32NumEccBlocksPerPage = 3&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32EccBlockNEccLevelSDK = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32EccBlock0SizeSDK = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32EccBlockNSizeSDK = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32EccBlock0EccLevelSDK = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32NumEccBlocksPerPageSDK = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32MetadataBytesSDK = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32EraseThreshold = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32BootPatch = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32PatchSectors = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32Firmware1_startingPage = 512&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32Firmware2_startingPage = 10496&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32PagesInFirmware1 = 2775&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32PagesInFirmware2 = 2775&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32DBBTSearchAreaStartAddress = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32BadBlockMarkerByte = 1999&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32BadBlockMarkerStartBit = 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32BBMarkerPhysicalOffset = 2048&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DBBT&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32Checksum = 0x00000000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32FingerPrint = 0x5442444&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32Version = 0x01000000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32NumberBB = 1&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&amp;nbsp; m_u32Number2KPagesBB = 1&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;Firmware: image #0 @ 0x100000 size 0x56b800 - available 0x1380000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;Firmware: image #1 @ 0x1480000 size 0x56b800 - available 0x1380000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;NCB versions differ, 3 is used.&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;------- Start to write the [ FCB ] -----&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x0-0x20000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Writing FCB0 [ @0:0x0 ] (840) *&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x20000-0x40000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Writing FCB1 [ @0:0x20000 ] (840) *&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x40000-0x60000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Writing FCB2 [ @0:0x40000 ] (840) *&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x60000-0x80000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Writing FCB3 [ @0:0x60000 ] (840) *&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd_commit_bcb(FCB): status 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DBBT checksum length : 176&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;-------------- Start to write the DBBT ] -----&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x80000-0xa0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Writing DBBT0 [ @0:0x80000 ] (800) *&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0xa0000-0xc0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Writing DBBT1 [ @0:0xa0000 ] (800) *&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0xc0000-0xe0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Writing DBBT2 [ @0:0xc0000 ] (800) *&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0xe0000-0x100000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Writing DBBT3 [ @0:0xe0000 ] (800) *&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd_commit_bcb(DBBT): status 0&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: DBBT search area 256&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: PUTTING down DBBT0 BBTN0 @0x82000 (0)&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;---------- Start to write the [ /tmp/pn-switch-develop_V1.00.101.sb ]----&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Writting /tmp/pn-switch-develop_V1.00.101.sb: #0 @0: 0x00100000 - 0x0066b800&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x100000-0x120000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x120000-0x140000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x140000-0x160000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x160000-0x180000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x180000-0x1a0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1a0000-0x1c0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1c0000-0x1e0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1e0000-0x200000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x200000-0x220000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x220000-0x240000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x240000-0x260000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x260000-0x280000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x280000-0x2a0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x2a0000-0x2c0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x2c0000-0x2e0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x2e0000-0x300000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x300000-0x320000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x320000-0x340000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x340000-0x360000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x360000-0x380000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x380000-0x3a0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x3a0000-0x3c0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x3c0000-0x3e0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x3e0000-0x400000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x400000-0x420000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x420000-0x440000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x440000-0x460000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x460000-0x480000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x480000-0x4a0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x4a0000-0x4c0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x4c0000-0x4e0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x4e0000-0x500000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x500000-0x520000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x520000-0x540000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x540000-0x560000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x560000-0x580000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x580000-0x5a0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x5a0000-0x5c0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x5c0000-0x5e0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x5e0000-0x600000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x600000-0x620000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x620000-0x640000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x640000-0x660000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x660000-0x680000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: The last page is not full : 1600&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: We write one page for save guard. *&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: Writting /tmp/pn-switch-develop_V1.00.101.sb: #1 @0: 0x01480000 - 0x019eb800&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1480000-0x14a0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x14a0000-0x14c0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x14c0000-0x14e0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x14e0000-0x1500000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1500000-0x1520000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1520000-0x1540000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1540000-0x1560000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1560000-0x1580000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1580000-0x15a0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x15a0000-0x15c0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x15c0000-0x15e0000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x15e0000-0x1600000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1600000-0x1620000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1620000-0x1640000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1640000-0x1660000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;mtd: erasing @0:0x1660000-0x1680000&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;HTLLCLL0x8050800f&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;According to &lt;A href="http://sasamy.narod.ru/IMX23_ROM_Error_Codes.pdf"&gt;this document&lt;/A&gt;​, ​error code 8050800f stands for "ECC failed - data is not valid".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I understand ECC (Error Correction Coding) can fail as a result of brownouts.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;But I can not understand, why ECC failures prevent my device from booting from the NAND flash:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt; 'kobs-ng init' writes the boot stream two times&lt;/LI&gt;&lt;LI&gt;I pulled the power cable after the first boot stream has been sucessfully written&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Why can't the iMX28 gracefully ignore the ECC failure and boot from the first boot stream?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Andreas&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 02 Dec 2015 15:40:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/quot-ECC-failed-quot-boot-error-after-pulling-power-cable-while/m-p/456698#M71269</guid>
      <dc:creator>andreashaas</dc:creator>
      <dc:date>2015-12-02T15:40:01Z</dc:date>
    </item>
    <item>
      <title>Re: "ECC failed" boot error after pulling power cable while flashing with 'kobs-ng init'</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/quot-ECC-failed-quot-boot-error-after-pulling-power-cable-while/m-p/456699#M71270</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Andreas&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;when procesor voltages fall below specified datasheet ranges,&lt;/P&gt;&lt;P&gt;it may operate unstable and unpredictably, possibly writing wrong data &lt;/P&gt;&lt;P&gt;on wrong nand addresses, so both nand boot streams could be damaged.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards&lt;/P&gt;&lt;P&gt;igor&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 13 Dec 2015 11:50:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/quot-ECC-failed-quot-boot-error-after-pulling-power-cable-while/m-p/456699#M71270</guid>
      <dc:creator>igorpadykov</dc:creator>
      <dc:date>2015-12-13T11:50:18Z</dc:date>
    </item>
  </channel>
</rss>

