This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28075: [ERROR] C28xx_CPU1: File Loadrer: Verification failed: Memory map prevented reading 0x7821C @Program

Part Number: TMS320F28075
Other Parts Discussed in Thread: UNIFLASH, TMDSEMU200-U, C2000-GANG, C2000WARE

Hi experts,

My customer is using UNIFLASH (v6.1.0.2829) and TMDSEMU200-U and is getting an error on "Verify Image" after a successful write.

  • Load Image  -> [SUCCESS] Program Load completed successfully.
  • Verify Image -> [ERROR] C28xx_CPU1: File Loadrer: Verification failed: Memory map prevented reading 0x7821C @Program

I referred to the following thread as a countermeasure for the error content.

  1. Uniflash: Memory map prevented reading 0x7801C@Program
  2. Verification failed: Values at address 0x84330@Program do not match Please verify target memory and memory map
  • Reset the target -> [INFO] Executing Reset: CPU Reset.  -> However, an error occurs.
  • Check the contents of "0x7821C" -> FFFF, and confirm that it is the Reserved area from TRM.

"Contents of Setting"

The model number of the device is different, but I used F280049CLaunchPad and wrote the sample code for GPIO. The writing was successful and Verify Image succeeded as is (without reconnecting or resetting the device). Therefore, we have asked our customers to check what happens when they use the sample code.

Any advice on how to avoid the error or what I should investigate would be appreciated.

Best regards,
O.H

  • Hi,

    Is customer programming the password as part of the image?  If yes, they need to unlock the device before they can do a standalone verify.

    Please check.

    Thanks and regards,

    Vamsi

  • Hi Vamsi,

    Thank you for your reply.

    Is customer programming the password as part of the image?  If yes, they need to unlock the device before they can do a standalone verify.

    Except for Z2-BOOTCTRL, all of them (LINKPOINTER, OPTSECLOCK, Z1-OTPBOOTCTRL, CSMPSWD, GRABSELECT/RAM, EXEONLYSECT/RAM) are set to 0xFFFFFFF (Reserved contains 0 or F). So we assume that the security function is turned off.

    Also, since the value of 0x7821C is actually readable, we believe that the password is not necessary.

    Best regards,
    O.H

  • Hi O.H,

    You said you are using F28004x.  Default values for passwords are not all 1s (0xFFFFFFFF) on this device.  Please check.

    If customer is not using F28004x and still observed the above issue in F28075, then please check to make sure whether the memory is accessible or not (if it all shows up as 0s, then it is locked).

     Based on your reply, I will ask our security expert to take a look at this.

    Thanks and regards,

    Vamsi 

  • Hi Vamsi Gudivada,

    Sorry, forget about the F28004x, we just tested it ourselves.

    Once again, the customer is using F28075. The results of the Memory Browser are attached below. Some of the values are "0000", but basically it seems to be readable.

    Best regards,
    O.H

  • Hi O.H,

    Thank you for the clarification and the images.

    I assigned this to our security expert for review.

    Thanks and regards,
    Vamsi

  • Hi O.H,

    Could you share the screenshots for DCSM OTP content (for both zones)?

    Thanks and regards,
    Vamsi

  • Hi Vamsi Gudivada,

    Thank you for assigning this to security expert.

    The results of the survey were shared with us by a customer and are described below.

    "Check if Verify can be executed in UniFlash"

    • [Contents]
      They have Verified "the sample code" and the "application code created by the customer" with UniFlash and C2000-GANG. For each of them, they compared four patterns of writing the OTP area in hex.

      (1) Sample code: No OTP area written (no change) *Attachment: gpio_toggle_cpu01.hex)
      (2) Sample code: OTP is written *Attachment: gpio_toggle_cpu01_change.hex)
      (3) Customer program: OTP is written (original code used by the customer)
      (4) Customer program: No OTP area written (Deleted from the original code)

    • [Result]
      (1) SUCCESS, (2) ERROR, (3) ERROR, (4) SUCCESS.

    • [Consideration]
      The difference between SUCCESS and ERROR seems to be caused by the presence or absence of a code related to the writing of 0x5857FF5A in Z2-BOOTCTRL (0x7821E) in the OTP area.

    • [Contents of the OTP write location].
      :02000000040007F3
      :08821C00FFFFFFFFFF5A585756

    • [About the write file]
      Build with CCSv9 and create a hex file with --intel hex format. In the Summary of Flags set in Project Properties>C2000 HEX Utility, "--memwidth=16 --romwidth=16 --intel" is listed.

    "Comparison of C2000-GANG and UniFlash (Part 1)"

    • After writing the above programs (1) to (4) with C2000-GANG, they verified them with C2000-GANG.

    • [Result]
      SUCCESS was achieved in all cases (1) to (4).

    "Comparison of C2000-GANG and UniFlash (Part 2)"

    • After writing the programs (1) to (4) with Uniflash, Verify was performed with C2000-GANG.

    • [Result]
      SUCCESS was achieved for all programs (1) to (4).

    "Question"

    • There are four things they would like to confirm from the above results.

      1. Difference between C2000-GANG and UniFlash VerifyImage (Is there any compatibility between C2000-GANG Verify and UniFlash Verify?)
      2. The difference between "VerifyImage" and "Verify Flash after Program" in the Download Settings of Uniflash.
      3. Why can't they Verify with UniFlash if there is writing in the OTP area? (READ MEMORY can do it)
      4. Is there any way to verify with UniFlash even if there is writing in the OTP area?

    "Version information"

    • [CCS]
      Code Composer Studio Version : 9.1.0.00010
      Compiler ver : TI v18.12.2.LTS
      C2000Ware : 2.00.00.02

    • [C2000-GANG]
      GUI-software :G28x:01.01.02.00
      DLL :D280:01.01.02.00

    • [UniFlash]
      6.1.0.2829

    • [Sample code]
      C:\ti\c2000\C2000Ware_2_00_00_02\device_support\f2807x\examples\cpu1\gpio_toggle
    Could you share the screenshots for DCSM OTP content (for both zones)?

    The contents of Zone 1 (= 0x78000 - 0x781F0) and Zone 2 (0x78200 - 0x783F0) are attached below.
    (Are the areas to be captured correct...?)

    Best regards,
    O.H

    :020000040008F2
    :0400000000482D1176
    :20200000FFFFA80000000001FFFEA802000000000000FFFEA804000000000000FFFEA8061E
    :1420100000002E400008FFFEA80800002E4000080000000023
    :20201C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE63006004D
    :20202C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF017
    :20203C00E20000BDE63006002942561676256F00761BFFF0E20000BDE630060029425616D6
    :20204C0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BD2F
    :20205C00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F004B
    :20206C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE6300600FD
    :20207C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0C7
    :20208C00E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002942561686
    :20209C0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDDF
    :2020AC00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F00FB
    :2020BC00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE6300600AD
    :2020CC002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF077
    :2020DC00E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002942561636
    :2020EC0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BD8F
    :2020FC00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F00AB
    :20210C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE63006005C
    :20211C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF026
    :20212C00E20000BDE63006002942561676256F00761BFFF0E20000BDE630060029425616E5
    :20213C0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BD3E
    :20214C00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F005A
    :20215C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE63006000C
    :20216C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0D6
    :20217C00E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002942561695
    :20218C0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDEE
    :20219C00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F000A
    :2021AC00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE6300600BC
    :2021BC002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF086
    :2021CC00E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002942561645
    :2021DC0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BD9E
    :2021EC00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F00BA
    :2021FC00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE63006006C
    :20220C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF035
    :20221C00E20000BDE63006002942561676256F00761BFFF0E20000BDE630060029425616F4
    :20222C0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BD4D
    :20223C00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F0069
    :20224C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE63006001B
    :20225C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E5
    :20226C00E20000BDE63006002942561676256F00761BFFF0E20000BDE630060029425616A4
    :20227C0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDFD
    :20228C00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F0019
    :20229C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE6300600CB
    :2022AC002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF095
    :2022BC00E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002942561654
    :2022CC0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDAD
    :2022DC00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F00C9
    :2022EC00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE63006007B
    :2022FC002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF045
    :20230C00E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002942561603
    :20231C0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BD5C
    :20232C00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F0078
    :20233C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002A
    :20234C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0F4
    :20235C00E20000BDE63006002942561676256F00761BFFF0E20000BDE630060029425616B3
    :20236C0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BD0C
    :20237C00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F0028
    :20238C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE6300600DA
    :20239C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0A4
    :2023AC00E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002942561663
    :2023BC0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDBC
    :2023CC00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F00D8
    :2023DC00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE63006008A
    :2023EC002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF054
    :2023FC00E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002942561613
    :20240C0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BD6B
    :20241C00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F0087
    :20242C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE630060039
    :20243C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF003
    :20244C00E20000BDE63006002942561676256F00761BFFF0E20000BDE630060029425616C2
    :20245C0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BD1B
    :20246C00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F0037
    :20247C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE6300600E9
    :20248C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0B3
    :20249C00E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002942561672
    :2024AC0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDCB
    :2024BC00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F00E7
    :2024CC00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE630060099
    :2024DC002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF063
    :2024EC00E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002942561622
    :2024FC0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BD7B
    :20250C00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F0096
    :20251C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE630060048
    :20252C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF012
    :20253C00E20000BDE63006002942561676256F00761BFFF0E20000BDE630060029425616D1
    :20254C0076256F00761BFFF0E20000BDE630060029425616E28000BEFFF176177602761BAD
    :20255C00FFF0E20000BDE63006002942561676256F00764826357622FF6976482BB4761F89
    :20256C00174C1A3C00011A3C00021A3C00088F05D1B692C460088F007BDD761F1746A8364F
    :20257C00A838A83C761F174C183CFFFE183CFFFD183CFFF7761A9A01D400D5019B0CFF69B4
    :20258C00764826437648259100067622761F174C1A2200011A2200041A2200081A220010F1
    :20259C001A2200201A2300011A2300041A2400011A2600011A2600021A2600041A260008F6
    :2025AC001A2600101A2600201A2600401A2600801A2601001A2602001A2604001A26080010
    :2025BC001A2800011A2800021A2800041A2800081A2800101A2800201A2A00011A2A0002A9
    :2025CC001A2A00041A2E00011A2E00021A3000011A3000021A3000041A3000081A32000190
    :2025DC001A3200021A3200041A3400011A3400021A3600011A3600021A3800011A38000258
    :2025EC001A3900011A3C00011A3C00021A3C00081A3E00011A3E00021A3E00041A3E0008FF
    :2025FC001A3E00101A3E00201A3E00401A3E0080761F174D1A0300011A0300021A03000418
    :20260C00761AFF69000676220200761F174C1E221E241E261E281E2A1E2E1E301E321E348E
    :20261C001E361E381E3A1E3C1E3E761F174D1E02761AFF6900067622761F01C0CC25FF00F1
    :20262C0050559625CC25FF0050AA9625761AFF690006FE027622761F01C092299007964174
    :20263C00924150689629761AFF69FE820006E20304BDFE207D527C519750964F56BF015F15
    :20264C00761F1748884F920890030EA90FA6601588509214907F0EA90FA6600F8851CC1474
    :20265C000300FFC70EA90FA6600888529222903F0EA90FA6FFE101C7884F920890030EA995
    :20266C000FA661116F0A764829426F0D7648294E6F0A7648295A6F07924F61F9520161FABB
    :20267C00520261F27622761F174888509214907F0EA90FA660088851CC140300FFC70EA971
    :20268C000FA66123761F1744922C761F1748180EFFFDF67877001822FFC02B60926052057F
    :20269C006714761F1748180EFFFEF614770056030851CA500EA91E1492169001520160FD6D
    :2026AC000A609260520568EE9252523F61089C01CD22FFC0903FCAA896226F06CD22FFC0C0
    :2026BC00903FCAA89622761F01C09222965392299654922A965576222B2ACC25FF00505544
    :2026CC009625CC25FF0050AA962576083B3092BE96562B2256BF2829761F17441A2C00017F
    :2026DC00761F17481A0E0002F6147700FF69764826277622925F5201FFE0011D761F1748FF
    :2026EC00CC160002FFC052016016180EFFFDF6787700180EFFFEF614770056030851CA50EB
    :2026FC000EA91E1492169001520160FD1A0E0002F6147700761F0030920C9657060A1E447F
    :20270C00920E9658920F9659761F174D923C9007965DCC3C0038FFC2965E761F00309214DE
    :20271C00965A06121E469216965B9217965C761F00301A0C00103B01FF2FE0001E0A180E6A
    :20272C00FF001A0C00201A0C80001A0C40006F16761F174DCC3CFFF85001963C6F15761F83
    :20273C00174DCC3CFFF85002963C6F0E761F174DCC3CFFF85003963C6F07924F61F1520160
    :20274C0061F6520261E6761F00301A1480001A1440001A1400108F000800A8121816FF00DE
    :20275C001A140020761F00301A0C0010761F00301A140010761F00301A0C0020761F003041
    :20276C001A1400201A1480001814FFEF761F0030180CFFEF761F00304F146D05761F003001
    :20277C004F0C6CF9761F00301A0C0010761F00301A1400103B01FF2FE000761F0030030865
    :20278C001E489257960C06441E0A9258960E9259960F925D761F174D9007CD3CFFF8CAA8BB
    :20279C00963C925E9007FF82CD3CFFC7CAA8963C925A761F0030961406461E12925B9616C0
    :2027AC00925C9617E2C40051E8020401FF6976482C89E2C401507700E71000407700E203B0
    :2027BC00004C761F17489222903F60039A016F059222903F560301A93B0185A9BDA90F1251
    :2027CC007700770077007700E68900007700E203004EE8022801E284004876482C89E6CF0F
    :2027DC000004E2AF014EE2AF004C76482C89E72001007700E203004A9B009A01E801EE608E
    :2027EC00E2AF014AE80E6668E6940001AD14620AE805EE60E80E6668E6940001AD146402E4
    :2027FC009A00520061029B01975F925F5201FFE1FEE7761F1744182CFFFE761F01C0CC255B
    :20280C00FF0050559625CC25FF0050AA96251A540028925496299255962ACC53FFFE9622F2
    :20281C0040566D02291041566D022920F6C87700761F17489252CD22FFC0903FCAA896225B
    :20282C00761AFEA0FF69E2AF04BE0006FE107D467C45974496432B482B49761F17488843B1
    :20283C00920A90030EA90FA6601F8844921E907F0EA90FA660198845CC1E0300FFC70EA9BB
    :20284C000FA660128846922490030EA90FA6FFE100CB6F0A764829666F0D764829706F0A05
    :20285C007648297C6F07924361F6520161F7520461F87622761F17481818FFFD761AF67847
    :20286C007700761F174D923C9007964DCC3C0038FFC2964E761F00309214964A06121E42EC
    :20287C009216964B9217964C7622761F174DCC3CFFF85006963C183CFFC7761F00301A1463
    :20288C000010020A1E122B162B171814BFFF761F17481A240003761A6F347622761F17487F
    :20289C001818FFFEF614770056030845CA440EA91E1E1A180001761A92209001520160FD11
    :2028AC0076221A180002F6147700761F00301A1400201814FFEF2B471B4703E8670E761FC9
    :2028BC0000304F146C061A14800056BF01496F050A471B4703E868F41A1400100A48761A5C
    :2028CC00924852056703924961C99249600876220200761F17481E1E761A76252B4F6F1912
    :2028DC0076221818FFFDF67877001818FFFEF614770056030845CA440EA91E1E922090019B
    :2028EC00520160FD1A180002F61477000A4F761A761F174841206C04924F520A68E276229A
    :2028FC009246CD24FFFC9003CAA89624761F174D924D9007CD3CFFF8CAA8963C924E90070F
    :20290C00FF82CD3CFFC7CAA8963C924A761F0030961406421E12924B9616924C96171A1412
    :20291C000020761AFE90FF69000676220200761F17C019011E10020019011E120200190139
    :20292C001E14020019011E160200761F17C119011E10020019011E12020019011E140200B6
    :20293C0019011E16761A9A00FF6900067622761F1748CC08FFFC500296081A080010761A88
    :20294C00FF6900067622761F17481808FFF71808FFFC1A080010761AFF6900067622761FE3
    :20295C0017481808FFEFCC08FFFC50019608761AFF6900067622761F17481808FFF7180A6E
    :20296C00FFFC761AFF6900067622761F17481808FFEFCC0AFFFC5001960A761AFF690006F8
    :20297C007622761F1748CC0AFFFC5002960A761AFF6900067622761F174D1836FFFC761A84
    :20298C007621FF6900067622761F174DCC36FFFC50019636761A7621FF6900067622761FB9
    :20299C00174DCC36FFFC50029636761F1748180EFFFD180EFFFE761A7621FF690006762236
    :2029AC00761F174D1A360003761AFF697648260F7622761F1748180EFFFD180EFFFE761A73
    :2029BC007621FF690006FE0476220200761F01F01E3C761F01F11E3C761F01F21E3C761F22
    :2029CC0001F31E3C761F01F41E3C761F01F51E3C8F007C00A8422B43924352C0670F2901EA
    :2029DC00BE00901F520661065603014307428AA9C2C40A43924352C068F58F007F00A84287
    :2029EC002B4392435218670C2901BE005603014307428AA9C2C40A439243521868F8761AA8
    :2029FC00FE84FF690006FE0E7C4B974A9649901F964C9249900F964D92499007964E2901CA
    :202A0C008F007C009249FFC4FF84560301A9560100A4A842924B520F666C924CFFC356038D
    :202A1C0001A9074209061E44924CFFC3560301A9074209201E46924CFFC2560301A90742D2
    :202A2C0009281E487622FF6902038A44FF5A5603014D16A9563BFF55FF5A92ABC0C492AA26
    :202A3C00C0CC0203FF5A8A465603014D16A9563BFF55FF5A92ABC0C492AAC0CC0203FF5A35
    :202A4C00924BFFC188A98A46A9A989A6FF5A5603014D16A9563BFF5A92AB98C492AA98CC69
    :202A5C000203894B8A44FF5A5603014D16A9563BFF5A92AB98C492AA98CC0203FF5A8A48A1
    :202A6C005603024E16A9563BFF55FF5A92ABC0C492AAC0CC0203894A8A48FF5A5603024E6F
    :202A7C0016A9563BFF5A92AB98C492AA98CC761AFE8EFF690006FE187C5797569655901F5E
    :202A8C000EA91E4E9255900F0EA91E502D4E0201563B1E5229018F007C009255FFC4FF847B
    :202A9C00560301A9560100A4A842020A07421E44020C07421E46021007421E4802120742A2
    :202AAC001E4A064EFF43FF30074209021E4C76228A440652FF55C0C4C1CC92565201601F42
    :202ABC008A44065298C499CC42576C068A4A065298C499CC6F068A4A0652FF55C0C4C1CC15
    :202ACC009257900561078A460652FF55C0C4C1CC6F238A46065298C499CC6F1E8A44065249
    :202ADC00FF55C0C4C1CC40576C078A460652FF55C0C4C1CC6F058A46065298C499CC4157E9
    :202AEC006C068A48065298C499CC6F068A480652FF55C0C4C1CC92579030FFC30EA91E54D5
    :202AFC00FF6902038A4CFF5A5603015016A9563BFF55FF5A92ABC0C492AAC0CC0654610C27
    :202B0C00A354560301508A4C16A9563BFF5A92AB98C492AA98CC761AFE98FF690006FE0AB4
    :202B1C00974A9649901F0EA91E462D460201563B1E4829018F007C009249FFC4FF845603F3
    :202B2C0001A9560100A4A842023C07421E447622924A61068A44064898C499CC6F068A4416
    :202B3C000648FF55C0C4C1CC761AFE8AFF690006FE0296417622761F01E49603761AFF69C6
    :202B4C00FE820006FE0296417622761F01E49604761AFF69FE820006FE0296417622761FDE
    :202B5C0001E49605761AFF69FE820006FE0296417622761F01E4960C761AFF69FE82000652
    :202B6C00FE0296417622761F01E4960D761AFF69FE820006762228A9FFFF28A87FFF761FF5
    :202B7C0001F21E0C761F01F302081E0C761F01F402201E0C3B01761F01F5FF29FFFF1E0C72
    :202B8C00761AFF69000676228F3FFC1C761F01F0A80C28A90E0028A8FC00761F01F11E0C17
    :202B9C0028A943E728A81EF0761F01F21E0C761F01F302081E0C761F01F402001E0C3B01DF
    :202BAC00761F01F5FF29FFFF1E0C761AFF690006FE02761F17400608290118A907009100B3
    :202BBC00FF4796415205600476482B8F6F065206600476482B766F01FE820006FE04964348
    :202BCC00FFC429018F007F00FF81560301A9560100A4A8429243901F2DA906C456221EA626
    :202BDC0092A690019644FE840006FE0697469645FFC429018F007F00FF81560301A956011D
    :202BEC0000A4A84202011EA69245901F2DA906A6563B1E449246600406441EE46F03064435
    :202BFC001ED4FE8600067648256576482C743B10FF6976482D9076260000762F000076486A
    :202C0C002DB876482C1B0006FE022B411B4103E863050A411B4103E864FDFE82000628A953
    :202C1C00AAAA28A8AAAA761F01FC1E008F000AAAA80876482C1028A9555528A855551E0070
    :202C2C008F001555A80876482C106FEA28A9AAAA28A8AAAA761F01FC1E0228A9555528A846
    :202C3C0055551E048F000AAAA80A8F001555A80C76482C1028A9AAAA28A8AAAA1E0428A9D4
    :202C4C00555528A855551E028F000AAAA80C8F001555A80A76482C106FDA28A9AAAA28A84A
    :202C5C00AAAA761F01FC1E0228A9555528A855551E048F000AAAA80A8F001555A80C8F000A
    :202C6C001FFF020019011E06A80E76482C106FFA76220200761F01F01E061E08761F01F1E0
    :202C7C001E06761F01F019011E0A8F001FFF761F01F1A80A761AFF6900063ABDB2BDAABD9B
    :202C8C00A2BDFE022901BFA90F12FF58615B5CA8917F08A800801E4293A4FFD65CA8BFA9E7
    :202C9C000F1661675DA8917F08A8008059A858A993A5FFD65DA893A471A518A8010097A687
    :202CAC0018A400FF18A500FFDC7F92A49EA596A7644D08A9FF01623E93A192A0FF3659A8E2
    :202CBC0058A90642FF35F60E1FA15BA901A3F60A1FA1562D04A22DA336A0FF40F60B1FA180
    :202CCC00FF339B00FF30FF540CA295A3FF4008A70001F61FFF770920FF4008A70001F61F0C
    :202CDC00FF77FF5A92A7652208A9FF016313A9A9FF46917F5BA85AA925A695A7FF960CA22B
    :202CEC0095A3BDA90F12FE8282BE86BE8BBE8EBE00069B00FF5708A8FF7FFF5A93A660F267
    :202CFC0028A8800071AA92AB6FEDFF2000006FEAFF5A93A418A80100FF965CA8A9A908A850
    :202D0C00FF7F1CA88000CBA46FDD28AD0400FF69561F5616561AE61002002940761F0000A2
    :202D1C002902761B76482E4152006142762228A9200028A800080901611B76C82000290447
    :202D2C006F0F9B0024A9DF016C04290424A8DF011EA6F7A1248606A781A109011EA724A907
    :202D3C006303FF5C3B0459A9DF010009FFEC28A9FFFF28A8FFFF090161058F3FFFFF76480A
    :202D4C002DDE761A76482E4328A9FFFF28A8FFFF0901610E76FFFFFF6F06DF01C3BD1EA77A
    :202D5C003E67C5BE24A9DF0124A8FF5860F776482E1F76482D6977006F00B2BD761F02A01D
    :202D6C0059A99200610D28ABFFFF28AAFFFF28A9FFFF28A8FFFF0FAB6103767FFFFF761F61
    :202D7C0002A0C5063E67761F02A0060461041EA792A13E67761F02A0060261031EA73E67D5
    :202D8C0076482D678BBE00063B10761F00331820FFFE2B222B242B262B282B2A2B2C2B2EF9
    :202D9C002B302B322B342B362B382B232B252B272B292B2B2B2D2B2F2B312B332B352B3774
    :202DAC002B39FF690006761F00331A2000012821FFFF2910FF690006FE068F090000A842BE
    :202DBC008F000D00A844020607421E42020607441E4476222B45924552DD670D83448A42F4
    :202DCC00A0A9C4840902A8421E44C2C50A45924552DD68F5761A761F00331A200001FF69CB
    :202DDC00FE860006B2BDAABDA2BDFE0882A4D1005ACB6F155CAD2901560303A107A3DC8834
    :202DEC0009025CA483A9020876482E02064261068A44834676482E025ACBD90192A254A13C
    :202DFC0066EAFE8882BE86BE8BBE00065200A8ABC5A4610788A9DE815C857C87000EFFFE19
    :202E0C0088A90FA6610F5300610D9DFF5CA876BFFFFE92859687000EFFFE92859687000C3E
    :202E1C00FFF8A9A4000628ABFFFF28AAFFFF28A9FFFF28A8FFFF0FAB6004BE00D4006F09E6
    :202E2C0028ABFFFF28AAFFFFA9A488C409028AA992A676482BFF0006761F02A0A8080006FB
    :102E3C00761F02A0A806000600069A0100060006EE
    :08600000190156C3FFFF000661
    :020000040009F1
    :20000000254400082544000825440008254400082544000825440008254400082544000858
    :200010002544000825440008254400082544000825440008201C00082026000820300008B1
    :20002000203A000820440008204E00082058000820620008206C0008207600082080000898
    :20003000208A000820940008209E000820A8000820B2000820BC000820C6000820D0000808
    :2000400020DA000820E400082544000820EE000820F8000821020008210C0008211600084C
    :2000500021200008212A000821340008213E00082148000821520008215C00082166000830
    :2000600021700008217A000821840008218E00082198000821A2000821AC000821B60008A0
    :2000700021C0000821CA000821D4000821DE000821E8000821F20008254400082544000882
    :2000800021FC0008220600082210000825440008254400082544000825440008254400089C
    :20009000221A000822240008222E00082238000822420008224C0008225600082260000818
    :2000A000226A000822740008227E00082288000822920008229C0008254400082544000850
    :2000B00022A6000822B0000822BA000822C4000822CE000822D8000822E2000822EC000898
    :2000C00022F6000823000008230A000823140008231E00082328000823320008233C000801
    :2000D0002346000823500008235A000823640008236E00082378000823820008238C000870
    :2000E0002396000823A0000823AA000823B4000823BE000823C8000823D2000823DC0008E0
    :2000F00023E6000823F0000823FA0008254400082544000824040008240E0008241800080F
    :200100002544000825440008254400082544000824220008242C00082436000824400008A7
    :20011000244A000824540008245E00082468000825440008254400082544000825440008F7
    :2001200024720008247C000824860008249000082544000825440008254400082544000847
    :20013000254400082544000825440008254400082544000825440008254400082544000827
    :20014000249A000824A4000825440008254400082544000825440008254400082544000863
    :2001500024AE000824B800082544000825440008254400082544000825440008254400082B
    :200160002544000825440008254400082544000825440008254400082544000825440008F7
    :200170002544000825440008254400082544000825440008254400082544000825440008E7
    :2001800025440008254400082544000825440008254400082544000824C20008254400085A
    :200190002544000825440008254400082544000824CC000824D6000824E0000824EA00086F
    :2001A0002544000825440008254400082544000825440008254400082544000825440008B7
    :2001B00024F4000824FE00082508000825120008251C00082526000825300008253A000811
    :00000001FF
    
    :020000040007F3
    :08821C00FFFFFFFFFF5A585756
    :020000040008F2
    :0400000000482D1176
    :20200000FFFFA80000000001FFFEA802000000000000FFFEA804000000000000FFFEA8061E
    :1420100000002E400008FFFEA80800002E4000080000000023
    :20201C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE63006004D
    :20202C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF017
    :20203C00E20000BDE63006002942561676256F00761BFFF0E20000BDE630060029425616D6
    :20204C0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BD2F
    :20205C00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F004B
    :20206C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE6300600FD
    :20207C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0C7
    :20208C00E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002942561686
    :20209C0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDDF
    :2020AC00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F00FB
    :2020BC00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE6300600AD
    :2020CC002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF077
    :2020DC00E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002942561636
    :2020EC0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BD8F
    :2020FC00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F00AB
    :20210C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE63006005C
    :20211C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF026
    :20212C00E20000BDE63006002942561676256F00761BFFF0E20000BDE630060029425616E5
    :20213C0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BD3E
    :20214C00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F005A
    :20215C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE63006000C
    :20216C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0D6
    :20217C00E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002942561695
    :20218C0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDEE
    :20219C00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F000A
    :2021AC00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE6300600BC
    :2021BC002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF086
    :2021CC00E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002942561645
    :2021DC0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BD9E
    :2021EC00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F00BA
    :2021FC00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE63006006C
    :20220C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF035
    :20221C00E20000BDE63006002942561676256F00761BFFF0E20000BDE630060029425616F4
    :20222C0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BD4D
    :20223C00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F0069
    :20224C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE63006001B
    :20225C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E5
    :20226C00E20000BDE63006002942561676256F00761BFFF0E20000BDE630060029425616A4
    :20227C0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDFD
    :20228C00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F0019
    :20229C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE6300600CB
    :2022AC002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF095
    :2022BC00E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002942561654
    :2022CC0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDAD
    :2022DC00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F00C9
    :2022EC00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE63006007B
    :2022FC002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF045
    :20230C00E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002942561603
    :20231C0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BD5C
    :20232C00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F0078
    :20233C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002A
    :20234C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0F4
    :20235C00E20000BDE63006002942561676256F00761BFFF0E20000BDE630060029425616B3
    :20236C0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BD0C
    :20237C00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F0028
    :20238C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE6300600DA
    :20239C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0A4
    :2023AC00E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002942561663
    :2023BC0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDBC
    :2023CC00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F00D8
    :2023DC00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE63006008A
    :2023EC002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF054
    :2023FC00E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002942561613
    :20240C0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BD6B
    :20241C00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F0087
    :20242C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE630060039
    :20243C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF003
    :20244C00E20000BDE63006002942561676256F00761BFFF0E20000BDE630060029425616C2
    :20245C0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BD1B
    :20246C00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F0037
    :20247C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE6300600E9
    :20248C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0B3
    :20249C00E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002942561672
    :2024AC0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDCB
    :2024BC00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F00E7
    :2024CC00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE630060099
    :2024DC002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF063
    :2024EC00E20000BDE63006002942561676256F00761BFFF0E20000BDE63006002942561622
    :2024FC0076256F00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BD7B
    :20250C00E63006002942561676256F00761BFFF0E20000BDE63006002942561676256F0096
    :20251C00761BFFF0E20000BDE63006002942561676256F00761BFFF0E20000BDE630060048
    :20252C002942561676256F00761BFFF0E20000BDE63006002942561676256F00761BFFF012
    :20253C00E20000BDE63006002942561676256F00761BFFF0E20000BDE630060029425616D1
    :20254C0076256F00761BFFF0E20000BDE630060029425616E28000BEFFF176177602761BAD
    :20255C00FFF0E20000BDE63006002942561676256F00764826357622FF6976482BB4761F89
    :20256C00174C1A3C00011A3C00021A3C00088F05D1B692C460088F007BDD761F1746A8364F
    :20257C00A838A83C761F174C183CFFFE183CFFFD183CFFF7761A9A01D400D5019B0CFF69B4
    :20258C00764826437648259100067622761F174C1A2200011A2200041A2200081A220010F1
    :20259C001A2200201A2300011A2300041A2400011A2600011A2600021A2600041A260008F6
    :2025AC001A2600101A2600201A2600401A2600801A2601001A2602001A2604001A26080010
    :2025BC001A2800011A2800021A2800041A2800081A2800101A2800201A2A00011A2A0002A9
    :2025CC001A2A00041A2E00011A2E00021A3000011A3000021A3000041A3000081A32000190
    :2025DC001A3200021A3200041A3400011A3400021A3600011A3600021A3800011A38000258
    :2025EC001A3900011A3C00011A3C00021A3C00081A3E00011A3E00021A3E00041A3E0008FF
    :2025FC001A3E00101A3E00201A3E00401A3E0080761F174D1A0300011A0300021A03000418
    :20260C00761AFF69000676220200761F174C1E221E241E261E281E2A1E2E1E301E321E348E
    :20261C001E361E381E3A1E3C1E3E761F174D1E02761AFF6900067622761F01C0CC25FF00F1
    :20262C0050559625CC25FF0050AA9625761AFF690006FE027622761F01C092299007964174
    :20263C00924150689629761AFF69FE820006E20304BDFE207D527C519750964F56BF015F15
    :20264C00761F1748884F920890030EA90FA6601588509214907F0EA90FA6600F8851CC1474
    :20265C000300FFC70EA90FA6600888529222903F0EA90FA6FFE101C7884F920890030EA995
    :20266C000FA661116F0A764829426F0D7648294E6F0A7648295A6F07924F61F9520161FABB
    :20267C00520261F27622761F174888509214907F0EA90FA660088851CC140300FFC70EA971
    :20268C000FA66123761F1744922C761F1748180EFFFDF67877001822FFC02B60926052057F
    :20269C006714761F1748180EFFFEF614770056030851CA500EA91E1492169001520160FD6D
    :2026AC000A609260520568EE9252523F61089C01CD22FFC0903FCAA896226F06CD22FFC0C0
    :2026BC00903FCAA89622761F01C09222965392299654922A965576222B2ACC25FF00505544
    :2026CC009625CC25FF0050AA962576083B3092BE96562B2256BF2829761F17441A2C00017F
    :2026DC00761F17481A0E0002F6147700FF69764826277622925F5201FFE0011D761F1748FF
    :2026EC00CC160002FFC052016016180EFFFDF6787700180EFFFEF614770056030851CA50EB
    :2026FC000EA91E1492169001520160FD1A0E0002F6147700761F0030920C9657060A1E447F
    :20270C00920E9658920F9659761F174D923C9007965DCC3C0038FFC2965E761F00309214DE
    :20271C00965A06121E469216965B9217965C761F00301A0C00103B01FF2FE0001E0A180E6A
    :20272C00FF001A0C00201A0C80001A0C40006F16761F174DCC3CFFF85001963C6F15761F83
    :20273C00174DCC3CFFF85002963C6F0E761F174DCC3CFFF85003963C6F07924F61F1520160
    :20274C0061F6520261E6761F00301A1480001A1440001A1400108F000800A8121816FF00DE
    :20275C001A140020761F00301A0C0010761F00301A140010761F00301A0C0020761F003041
    :20276C001A1400201A1480001814FFEF761F0030180CFFEF761F00304F146D05761F003001
    :20277C004F0C6CF9761F00301A0C0010761F00301A1400103B01FF2FE000761F0030030865
    :20278C001E489257960C06441E0A9258960E9259960F925D761F174D9007CD3CFFF8CAA8BB
    :20279C00963C925E9007FF82CD3CFFC7CAA8963C925A761F0030961406461E12925B9616C0
    :2027AC00925C9617E2C40051E8020401FF6976482C89E2C401507700E71000407700E203B0
    :2027BC00004C761F17489222903F60039A016F059222903F560301A93B0185A9BDA90F1251
    :2027CC007700770077007700E68900007700E203004EE8022801E284004876482C89E6CF0F
    :2027DC000004E2AF014EE2AF004C76482C89E72001007700E203004A9B009A01E801EE608E
    :2027EC00E2AF014AE80E6668E6940001AD14620AE805EE60E80E6668E6940001AD146402E4
    :2027FC009A00520061029B01975F925F5201FFE1FEE7761F1744182CFFFE761F01C0CC255B
    :20280C00FF0050559625CC25FF0050AA96251A540028925496299255962ACC53FFFE9622F2
    :20281C0040566D02291041566D022920F6C87700761F17489252CD22FFC0903FCAA896225B
    :20282C00761AFEA0FF69E2AF04BE0006FE107D467C45974496432B482B49761F17488843B1
    :20283C00920A90030EA90FA6601F8844921E907F0EA90FA660198845CC1E0300FFC70EA9BB
    :20284C000FA660128846922490030EA90FA6FFE100CB6F0A764829666F0D764829706F0A05
    :20285C007648297C6F07924361F6520161F7520461F87622761F17481818FFFD761AF67847
    :20286C007700761F174D923C9007964DCC3C0038FFC2964E761F00309214964A06121E42EC
    :20287C009216964B9217964C7622761F174DCC3CFFF85006963C183CFFC7761F00301A1463
    :20288C000010020A1E122B162B171814BFFF761F17481A240003761A6F347622761F17487F
    :20289C001818FFFEF614770056030845CA440EA91E1E1A180001761A92209001520160FD11
    :2028AC0076221A180002F6147700761F00301A1400201814FFEF2B471B4703E8670E761FC9
    :2028BC0000304F146C061A14800056BF01496F050A471B4703E868F41A1400100A48761A5C
    :2028CC00924852056703924961C99249600876220200761F17481E1E761A76252B4F6F1912
    :2028DC0076221818FFFDF67877001818FFFEF614770056030845CA440EA91E1E922090019B
    :2028EC00520160FD1A180002F61477000A4F761A761F174841206C04924F520A68E276229A
    :2028FC009246CD24FFFC9003CAA89624761F174D924D9007CD3CFFF8CAA8963C924E90070F
    :20290C00FF82CD3CFFC7CAA8963C924A761F0030961406421E12924B9616924C96171A1412
    :20291C000020761AFE90FF69000676220200761F17C019011E10020019011E120200190139
    :20292C001E14020019011E160200761F17C119011E10020019011E12020019011E140200B6
    :20293C0019011E16761A9A00FF6900067622761F1748CC08FFFC500296081A080010761A88
    :20294C00FF6900067622761F17481808FFF71808FFFC1A080010761AFF6900067622761FE3
    :20295C0017481808FFEFCC08FFFC50019608761AFF6900067622761F17481808FFF7180A6E
    :20296C00FFFC761AFF6900067622761F17481808FFEFCC0AFFFC5001960A761AFF690006F8
    :20297C007622761F1748CC0AFFFC5002960A761AFF6900067622761F174D1836FFFC761A84
    :20298C007621FF6900067622761F174DCC36FFFC50019636761A7621FF6900067622761FB9
    :20299C00174DCC36FFFC50029636761F1748180EFFFD180EFFFE761A7621FF690006762236
    :2029AC00761F174D1A360003761AFF697648260F7622761F1748180EFFFD180EFFFE761A73
    :2029BC007621FF690006FE0476220200761F01F01E3C761F01F11E3C761F01F21E3C761F22
    :2029CC0001F31E3C761F01F41E3C761F01F51E3C8F007C00A8422B43924352C0670F2901EA
    :2029DC00BE00901F520661065603014307428AA9C2C40A43924352C068F58F007F00A84287
    :2029EC002B4392435218670C2901BE005603014307428AA9C2C40A439243521868F8761AA8
    :2029FC00FE84FF690006FE0E7C4B974A9649901F964C9249900F964D92499007964E2901CA
    :202A0C008F007C009249FFC4FF84560301A9560100A4A842924B520F666C924CFFC356038D
    :202A1C0001A9074209061E44924CFFC3560301A9074209201E46924CFFC2560301A90742D2
    :202A2C0009281E487622FF6902038A44FF5A5603014D16A9563BFF55FF5A92ABC0C492AA26
    :202A3C00C0CC0203FF5A8A465603014D16A9563BFF55FF5A92ABC0C492AAC0CC0203FF5A35
    :202A4C00924BFFC188A98A46A9A989A6FF5A5603014D16A9563BFF5A92AB98C492AA98CC69
    :202A5C000203894B8A44FF5A5603014D16A9563BFF5A92AB98C492AA98CC0203FF5A8A48A1
    :202A6C005603024E16A9563BFF55FF5A92ABC0C492AAC0CC0203894A8A48FF5A5603024E6F
    :202A7C0016A9563BFF5A92AB98C492AA98CC761AFE8EFF690006FE187C5797569655901F5E
    :202A8C000EA91E4E9255900F0EA91E502D4E0201563B1E5229018F007C009255FFC4FF847B
    :202A9C00560301A9560100A4A842020A07421E44020C07421E46021007421E4802120742A2
    :202AAC001E4A064EFF43FF30074209021E4C76228A440652FF55C0C4C1CC92565201601F42
    :202ABC008A44065298C499CC42576C068A4A065298C499CC6F068A4A0652FF55C0C4C1CC15
    :202ACC009257900561078A460652FF55C0C4C1CC6F238A46065298C499CC6F1E8A44065249
    :202ADC00FF55C0C4C1CC40576C078A460652FF55C0C4C1CC6F058A46065298C499CC4157E9
    :202AEC006C068A48065298C499CC6F068A480652FF55C0C4C1CC92579030FFC30EA91E54D5
    :202AFC00FF6902038A4CFF5A5603015016A9563BFF55FF5A92ABC0C492AAC0CC0654610C27
    :202B0C00A354560301508A4C16A9563BFF5A92AB98C492AA98CC761AFE98FF690006FE0AB4
    :202B1C00974A9649901F0EA91E462D460201563B1E4829018F007C009249FFC4FF845603F3
    :202B2C0001A9560100A4A842023C07421E447622924A61068A44064898C499CC6F068A4416
    :202B3C000648FF55C0C4C1CC761AFE8AFF690006FE0296417622761F01E49603761AFF69C6
    :202B4C00FE820006FE0296417622761F01E49604761AFF69FE820006FE0296417622761FDE
    :202B5C0001E49605761AFF69FE820006FE0296417622761F01E4960C761AFF69FE82000652
    :202B6C00FE0296417622761F01E4960D761AFF69FE820006762228A9FFFF28A87FFF761FF5
    :202B7C0001F21E0C761F01F302081E0C761F01F402201E0C3B01761F01F5FF29FFFF1E0C72
    :202B8C00761AFF69000676228F3FFC1C761F01F0A80C28A90E0028A8FC00761F01F11E0C17
    :202B9C0028A943E728A81EF0761F01F21E0C761F01F302081E0C761F01F402001E0C3B01DF
    :202BAC00761F01F5FF29FFFF1E0C761AFF690006FE02761F17400608290118A907009100B3
    :202BBC00FF4796415205600476482B8F6F065206600476482B766F01FE820006FE04964348
    :202BCC00FFC429018F007F00FF81560301A9560100A4A8429243901F2DA906C456221EA626
    :202BDC0092A690019644FE840006FE0697469645FFC429018F007F00FF81560301A956011D
    :202BEC0000A4A84202011EA69245901F2DA906A6563B1E449246600406441EE46F03064435
    :202BFC001ED4FE8600067648256576482C743B10FF6976482D9076260000762F000076486A
    :202C0C002DB876482C1B0006FE022B411B4103E863050A411B4103E864FDFE82000628A953
    :202C1C00AAAA28A8AAAA761F01FC1E008F000AAAA80876482C1028A9555528A855551E0070
    :202C2C008F001555A80876482C106FEA28A9AAAA28A8AAAA761F01FC1E0228A9555528A846
    :202C3C0055551E048F000AAAA80A8F001555A80C76482C1028A9AAAA28A8AAAA1E0428A9D4
    :202C4C00555528A855551E028F000AAAA80C8F001555A80A76482C106FDA28A9AAAA28A84A
    :202C5C00AAAA761F01FC1E0228A9555528A855551E048F000AAAA80A8F001555A80C8F000A
    :202C6C001FFF020019011E06A80E76482C106FFA76220200761F01F01E061E08761F01F1E0
    :202C7C001E06761F01F019011E0A8F001FFF761F01F1A80A761AFF6900063ABDB2BDAABD9B
    :202C8C00A2BDFE022901BFA90F12FF58615B5CA8917F08A800801E4293A4FFD65CA8BFA9E7
    :202C9C000F1661675DA8917F08A8008059A858A993A5FFD65DA893A471A518A8010097A687
    :202CAC0018A400FF18A500FFDC7F92A49EA596A7644D08A9FF01623E93A192A0FF3659A8E2
    :202CBC0058A90642FF35F60E1FA15BA901A3F60A1FA1562D04A22DA336A0FF40F60B1FA180
    :202CCC00FF339B00FF30FF540CA295A3FF4008A70001F61FFF770920FF4008A70001F61F0C
    :202CDC00FF77FF5A92A7652208A9FF016313A9A9FF46917F5BA85AA925A695A7FF960CA22B
    :202CEC0095A3BDA90F12FE8282BE86BE8BBE8EBE00069B00FF5708A8FF7FFF5A93A660F267
    :202CFC0028A8800071AA92AB6FEDFF2000006FEAFF5A93A418A80100FF965CA8A9A908A850
    :202D0C00FF7F1CA88000CBA46FDD28AD0400FF69561F5616561AE61002002940761F0000A2
    :202D1C002902761B76482E4152006142762228A9200028A800080901611B76C82000290447
    :202D2C006F0F9B0024A9DF016C04290424A8DF011EA6F7A1248606A781A109011EA724A907
    :202D3C006303FF5C3B0459A9DF010009FFEC28A9FFFF28A8FFFF090161058F3FFFFF76480A
    :202D4C002DDE761A76482E4328A9FFFF28A8FFFF0901610E76FFFFFF6F06DF01C3BD1EA77A
    :202D5C003E67C5BE24A9DF0124A8FF5860F776482E1F76482D6977006F00B2BD761F02A01D
    :202D6C0059A99200610D28ABFFFF28AAFFFF28A9FFFF28A8FFFF0FAB6103767FFFFF761F61
    :202D7C0002A0C5063E67761F02A0060461041EA792A13E67761F02A0060261031EA73E67D5
    :202D8C0076482D678BBE00063B10761F00331820FFFE2B222B242B262B282B2A2B2C2B2EF9
    :202D9C002B302B322B342B362B382B232B252B272B292B2B2B2D2B2F2B312B332B352B3774
    :202DAC002B39FF690006761F00331A2000012821FFFF2910FF690006FE068F090000A842BE
    :202DBC008F000D00A844020607421E42020607441E4476222B45924552DD670D83448A42F4
    :202DCC00A0A9C4840902A8421E44C2C50A45924552DD68F5761A761F00331A200001FF69CB
    :202DDC00FE860006B2BDAABDA2BDFE0882A4D1005ACB6F155CAD2901560303A107A3DC8834
    :202DEC0009025CA483A9020876482E02064261068A44834676482E025ACBD90192A254A13C
    :202DFC0066EAFE8882BE86BE8BBE00065200A8ABC5A4610788A9DE815C857C87000EFFFE19
    :202E0C0088A90FA6610F5300610D9DFF5CA876BFFFFE92859687000EFFFE92859687000C3E
    :202E1C00FFF8A9A4000628ABFFFF28AAFFFF28A9FFFF28A8FFFF0FAB6004BE00D4006F09E6
    :202E2C0028ABFFFF28AAFFFFA9A488C409028AA992A676482BFF0006761F02A0A8080006FB
    :102E3C00761F02A0A806000600069A0100060006EE
    :08600000190156C3FFFF000661
    :020000040009F1
    :20000000254400082544000825440008254400082544000825440008254400082544000858
    :200010002544000825440008254400082544000825440008201C00082026000820300008B1
    :20002000203A000820440008204E00082058000820620008206C0008207600082080000898
    :20003000208A000820940008209E000820A8000820B2000820BC000820C6000820D0000808
    :2000400020DA000820E400082544000820EE000820F8000821020008210C0008211600084C
    :2000500021200008212A000821340008213E00082148000821520008215C00082166000830
    :2000600021700008217A000821840008218E00082198000821A2000821AC000821B60008A0
    :2000700021C0000821CA000821D4000821DE000821E8000821F20008254400082544000882
    :2000800021FC0008220600082210000825440008254400082544000825440008254400089C
    :20009000221A000822240008222E00082238000822420008224C0008225600082260000818
    :2000A000226A000822740008227E00082288000822920008229C0008254400082544000850
    :2000B00022A6000822B0000822BA000822C4000822CE000822D8000822E2000822EC000898
    :2000C00022F6000823000008230A000823140008231E00082328000823320008233C000801
    :2000D0002346000823500008235A000823640008236E00082378000823820008238C000870
    :2000E0002396000823A0000823AA000823B4000823BE000823C8000823D2000823DC0008E0
    :2000F00023E6000823F0000823FA0008254400082544000824040008240E0008241800080F
    :200100002544000825440008254400082544000824220008242C00082436000824400008A7
    :20011000244A000824540008245E00082468000825440008254400082544000825440008F7
    :2001200024720008247C000824860008249000082544000825440008254400082544000847
    :20013000254400082544000825440008254400082544000825440008254400082544000827
    :20014000249A000824A4000825440008254400082544000825440008254400082544000863
    :2001500024AE000824B800082544000825440008254400082544000825440008254400082B
    :200160002544000825440008254400082544000825440008254400082544000825440008F7
    :200170002544000825440008254400082544000825440008254400082544000825440008E7
    :2001800025440008254400082544000825440008254400082544000824C20008254400085A
    :200190002544000825440008254400082544000824CC000824D6000824E0000824EA00086F
    :2001A0002544000825440008254400082544000825440008254400082544000825440008B7
    :2001B00024F4000824FE00082508000825120008251C00082526000825300008253A000811
    :00000001FF
    

  • OH,

    Just to summarize:  Data got programmed in to OTP as needed (in both Uniflash and C2000-GANG cases).  C2000-GANG is able to verify it successfully.  But Uniflash failed to verify that.  And the only field that is programmed in the DCSM OTP is Z2-BOOTCTRL.

    Did I get that correct?

    Please ask for the OTP dump.

    Also, can they send the file through which they assigned value to the Z2-BOOTCTRL?

    Thanks and regards,
    Vamsi

  • OH,

    As you can see, this is not a flash program error.  This is a read error.

    I discussed this with our CCS team.  Gel file's memory map defined the OTP space in the data page.  Hence, the memory map is not allowing the reads at the failing OTP address on the Program page.  To avoid this, you can suggest the customer to map the OTP data to data page in the linker cmd file and see if that helps.  

    Thanks and regards,

    Vamsi

  • Hi Vamsi Gudivada,

    Sorry for the late reply. And thanks for the support.

    Just to summarize:  Data got programmed in to OTP as needed (in both Uniflash and C2000-GANG cases).  C2000-GANG is able to verify it successfully.  But Uniflash failed to verify that.  And the only field that is programmed in the DCSM OTP is Z2-BOOTCTRL.

    Did I get that correct?

    Yes. You are right.

    Please ask for the OTP dump.

    Also, can they send the file through which they assigned value to the Z2-BOOTCTRL?

    Do you want me to run Memory Browser's Export and extract "The contents of Zone 1 (= 0x78000 - 0x781F0) and Zone 2 (0x78200 - 0x783F0)" instead of a screenshot?  If the problem persists after implementing the workaround, I would like to ask the customer for help.

    The file uses the previous "gpio_toggle_cpu01_change.hex" above. The first two lines of the file contain the addition of Z2-BOOTCTRL.

    As you can see, this is not a flash program error.  This is a read error.

    I discussed this with our CCS team.  Gel file's memory map defined the OTP space in the data page.  Hence, the memory map is not allowing the reads at the failing OTP address on the Program page.  To avoid this, you can suggest the customer to map the OTP data to data page in the linker cmd file and see if that helps. 

    I have asked you to change the linker command file. I will let you know the result later.

    Let me confirm the above explanation: I have confirmed that Zone 2 (0x78200 - 0x783F0) is defined in the data area in the Gel file (f28075.gel). I confirmed that nothing is defined in the default settings of the linker. However, from the Uniflash Memory Browser, I was able to read the OTP even though its contents were written.
    Could you please provide additional explanation as to why they are able to read from the Memory Borwser, but not allowed to read in Verify?

    1. Difference between C2000-GANG and UniFlash VerifyImage (Is there any compatibility between C2000-GANG Verify and UniFlash Verify?)
    2. The difference between "VerifyImage" and "Verify Flash after Program" in the Download Settings of Uniflash.

    Also, could you tell me about the above question?

    1. The simple interpretation is that the algorithm of Verify is different? Or does it mean that the Flash content can be Verified because the target configuration file is not used (i.e. Gel file is not used) in C2000-GANG?

    2. Does this mean that when the "Load image", Uniflash is automatically informed that Zone 2 (0x78200 - 0x783F0) is the data area, and as a result Verify succeeds?

    Best regards,
    O.H

  • Hi O.H,

    1. A screen shot and the export - both help.  

    2. In Uniflash memory window, they can change between the data and program pages.  For Uniflash standalone memory read (Verify image), we (C2000) do not deliver any code.  We deliver code only for the flash-specific verify (this uses flash API and is tied to "Verify Flash after program").  I believe the CCS/Uniflash memory read algos check for the page in which they are allowed to be read (I can enquire and confirm if needed).  This verify is not tied to flash wrapper.  It simply reads any memory (RAM or ROM or Flash) and compares it against the provided image.      

    3. Uniflash standalone "verify image" option: As explained above, this option does not invoke the Flash algorithms from Flash tool and hence any system/Flash initialization will not happen - which can cause Flash read issues. 

    GANG SW does not use the TI CCS/Uniflash algos or the gel file for memory reads.  It is a 3rd party tool.  It uses the flash API for verify.

    Verify Flash after Program:  This is not standalone.  This requires a program operation as a prerequisite.  And this verify uses the flash API algos.  Also, this means that device and flash (wait-states, power mode etc.) are initialized before this verify.  Hence, device would be in a good initialized state. 

    When a program load to flash is initiated, Uniflash programs and verifies immediately after the program operation.  

    If my previous suggestion (changing the page in linker) does not help, here are couple of things they can try:  

    1. Do a checksum (in plugin) test before the verify.  This invokes the flash tool to initialize the flash for reads.

    2. Disable "Run Target after program load" option if it is enabled.  If they are not doing an program operation, this may not make any difference.  When this is disabled, CPU will not execute the programmed code after program - this keeps the device in known initialized state after the program operation.  This helps to remove any effect on the device from the application execution.

    3. Try enabling the "Keep the core connected" option.  After a flash program or erase or flash-API based verify operation, the core will not get disconnected with this option enabled.  That way, flash is in initialized state and hence standalone verify will get the benefit. However, if they are not doing any program operation, this may not help.

    Thanks and regards,
    Vamsi

  • Hi Vamsi Gudivada,

    The customer has confirmed that "Verify image" succeeds by changing the contents of the linker command file. Attached are the linker command files before and after the change.

    However, they only have a board that has already been rewritten by their program, so when they check the OTP area, they can only get the values that have been set. I asked the customer to extract the data in TI-TXT format, but he said it was the same as the information on the Memory Browser screen that I attached before.

    In the hex file generated by modifying the linker command file, there is no description of going to write 0x5857FF5A to the OTP address (0x7821E). (*1) Therefore, we assume that the OTP function has not been set up. The same program as the previous one (4) is generated.

    (*1) Check by grep in hex with FF5A5857, referring to the description of the relevant two lines (below). The two lines can be found in the attached file "gpio_toggle_cpu01_cahnge.hex".
    :020000040007F3
    :08821C00FFFFFFFFFF5A585756

    (4) Customer program: No OTP area written (Deleted from the original code)

    In other words, they have mapped the OTP address to be the data page, but there is no code in hex to write to the OTP area, so I assume that Verify is successful.

    Is the above guess correct?

    Best regards,
    O.H

    /* this linker command file is to be included if user wants to use the DCSM feature on the device
     * DCSM  means Dual Zone Code Security Module.
     * This linker command file works as an addendum ot the already existing Flash/RAM linker command file
     * that the project has.
     * The sections in the *_ZoneSelectBlock.asm source file is linked as per the commands given in the file
     * NOTE - please note fill=0xFFFF, this helps if users include this file in the project by mistake and
     * doesn't provide the needed proper *_ZoneSelectBlock.asm sources .
     * Please refer to the Blinky DCSM example in the controlsuite examples for proper usage of this.
     *
     * Once users are confident that they want to program the passwords in OTP, the DSECT section type can be removed.
     *
    */
    
    MEMORY
    {
    PAGE 0 :  /* Program Memory */
    
       /* Z1 OTP.  LinkPointers */
       DCSM_OTP_Z1_LINKPOINTER   : origin = 0x78000, length = 0x00000C
       /* Z1 OTP.  PSWDLOCK/RESERVED */
       DCSM_OTP_Z1_PSWDLOCK	    : origin = 0x78010, length = 0x000004
       /* Z1 OTP.  CRCLOCK/RESERVED */
       DCSM_OTP_Z1_CRCLOCK	    : origin = 0x78014, length = 0x000004
       /* Z1 OTP.  RESERVED/BOOTCTRL */
       DCSM_OTP_Z1_BOOTCTRL	    : origin = 0x7801C, length = 0x000004
    
       /* DCSM Z1 Zone Select Contents (!!Movable!!) */
       /* Z1 OTP.  Z1 password locations / Flash and RAM partitioning */
       DCSM_ZSEL_Z1_P0	        : origin = 0x78020, length = 0x000010
    
       /* Z2 OTP.  LinkPointers */
       DCSM_OTP_Z2_LINKPOINTER	: origin = 0x78200, length = 0x00000C
       /* Z2 OTP.  GPREG1/GPREG2 */
       DCSM_OTP_Z2_GPREG	        : origin = 0x7820C, length = 0x000004
       /* Z2 OTP.  PSWDLOCK/RESERVED */
       DCSM_OTP_Z2_PSWDLOCK	    : origin = 0x78210, length = 0x000004
       /* Z2 OTP.  CRCLOCK/RESERVED */
       DCSM_OTP_Z2_CRCLOCK	    : origin = 0x78214, length = 0x000004
       /* Z2 OTP.  GPREG3/BOOTCTRL */
       DCSM_OTP_Z2_BOOTCTRL	    : origin = 0x7821C, length = 0x000004
    
       /* DCSM Z1 Zone Select Contents (!!Movable!!) */
       /* Z2 OTP.  Z2 password locations / Flash and RAM partitioning  */
       DCSM_ZSEL_Z2_P0	        : origin = 0x78220, length = 0x000010
    
    }
    
    SECTIONS
    {
       dcsm_otp_z1_linkpointer 	: > DCSM_OTP_Z1_LINKPOINTER		PAGE = 0, type = DSECT
       dcsm_otp_z1_pswdlock		: > DCSM_OTP_Z1_PSWDLOCK		PAGE = 0, type = DSECT
       dcsm_otp_z1_crclock		: > DCSM_OTP_Z1_CRCLOCK			PAGE = 0, type = DSECT
       dcsm_otp_z1_bootctrl		: > DCSM_OTP_Z1_BOOTCTRL		PAGE = 0, type = DSECT
       dcsm_zsel_z1				: > DCSM_ZSEL_Z1_P0				PAGE = 0, type = DSECT
    
       dcsm_otp_z2_linkpointer	: > DCSM_OTP_Z2_LINKPOINTER		PAGE = 0, type = DSECT
       dcsm_otp_z2_pswdlock		: > DCSM_OTP_Z2_PSWDLOCK		PAGE = 0, type = DSECT
       dcsm_otp_z2_crclock		: > DCSM_OTP_Z2_CRCLOCK			PAGE = 0, type = DSECT
       dcsm_otp_z2_bootctrl		: > DCSM_OTP_Z2_BOOTCTRL		PAGE = 0
       dcsm_zsel_z2				: > DCSM_ZSEL_Z2_P0				PAGE = 0, type = DSECT
    }
    
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */
    
    /* this linker command file is to be included if user wants to use the DCSM feature on the device
     * DCSM  means Dual Zone Code Security Module.
     * This linker command file works as an addendum ot the already existing Flash/RAM linker command file
     * that the project has.
     * The sections in the *_ZoneSelectBlock.asm source file is linked as per the commands given in the file
     * NOTE - please note fill=0xFFFF, this helps if users include this file in the project by mistake and
     * doesn't provide the needed proper *_ZoneSelectBlock.asm sources .
     * Please refer to the Blinky DCSM example in the controlsuite examples for proper usage of this.
     *
     * Once users are confident that they want to program the passwords in OTP, the DSECT section type can be removed.
     *
    */
    
    MEMORY
    {
    PAGE 0 :  /* Program Memory */
    
       /* Z1 OTP.  LinkPointers */
       DCSM_OTP_Z1_LINKPOINTER   : origin = 0x78000, length = 0x00000C
       /* Z1 OTP.  PSWDLOCK/RESERVED */
       DCSM_OTP_Z1_PSWDLOCK	    : origin = 0x78010, length = 0x000004
       /* Z1 OTP.  CRCLOCK/RESERVED */
       DCSM_OTP_Z1_CRCLOCK	    : origin = 0x78014, length = 0x000004
       /* Z1 OTP.  RESERVED/BOOTCTRL */
       DCSM_OTP_Z1_BOOTCTRL	    : origin = 0x7801C, length = 0x000004
    
       /* DCSM Z1 Zone Select Contents (!!Movable!!) */
       /* Z1 OTP.  Z1 password locations / Flash and RAM partitioning */
       DCSM_ZSEL_Z1_P0	        : origin = 0x78020, length = 0x000010
    
       /* Z2 OTP.  LinkPointers */
       DCSM_OTP_Z2_LINKPOINTER	: origin = 0x78200, length = 0x00000C
       /* Z2 OTP.  GPREG1/GPREG2 */
       DCSM_OTP_Z2_GPREG	        : origin = 0x7820C, length = 0x000004
       /* Z2 OTP.  PSWDLOCK/RESERVED */
       DCSM_OTP_Z2_PSWDLOCK	    : origin = 0x78210, length = 0x000004
       /* Z2 OTP.  CRCLOCK/RESERVED */
       DCSM_OTP_Z2_CRCLOCK	    : origin = 0x78214, length = 0x000004
       /* Z2 OTP.  GPREG3/BOOTCTRL */
    /*   DCSM_OTP_Z2_BOOTCTRL	    : origin = 0x7821C, length = 0x000004*/
    
       /* DCSM Z1 Zone Select Contents (!!Movable!!) */
       /* Z2 OTP.  Z2 password locations / Flash and RAM partitioning  */
       DCSM_ZSEL_Z2_P0	        : origin = 0x78220, length = 0x000010
       
    PAGE 1 :
    
       /* Z2 OTP.  GPREG3/BOOTCTRL */
       DCSM_OTP_Z2_BOOTCTRL	    : origin = 0x7821C, length = 0x000004
    
    }
    
    SECTIONS
    {
       dcsm_otp_z1_linkpointer 	: > DCSM_OTP_Z1_LINKPOINTER		PAGE = 0, type = DSECT
       dcsm_otp_z1_pswdlock		: > DCSM_OTP_Z1_PSWDLOCK		PAGE = 0, type = DSECT
       dcsm_otp_z1_crclock		: > DCSM_OTP_Z1_CRCLOCK			PAGE = 0, type = DSECT
       dcsm_otp_z1_bootctrl		: > DCSM_OTP_Z1_BOOTCTRL		PAGE = 0, type = DSECT
       dcsm_zsel_z1				: > DCSM_ZSEL_Z1_P0				PAGE = 0, type = DSECT
    
       dcsm_otp_z2_linkpointer	: > DCSM_OTP_Z2_LINKPOINTER		PAGE = 0, type = DSECT
       dcsm_otp_z2_pswdlock		: > DCSM_OTP_Z2_PSWDLOCK		PAGE = 0, type = DSECT
       dcsm_otp_z2_crclock		: > DCSM_OTP_Z2_CRCLOCK			PAGE = 0, type = DSECT
       dcsm_otp_z2_bootctrl		: > DCSM_OTP_Z2_BOOTCTRL		PAGE = 1
       dcsm_zsel_z2				: > DCSM_ZSEL_Z2_P0				PAGE = 0, type = DSECT
    }
    
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */
    

  • Hi OH,

    Please confirm whether I got your correctly or not:  After changing the memory definition to page 1, verify succeed but the corresponding data is missing in the image (and hence it won't make it in to the OTP).  Did I get that correct? 

    If yes, I may have to loop in our compiler team to know why the data is missing in the output.  Please confirm.

    Note: You can edit the gel file to add OTP in page 0. This will allow OTP reads in page 0.

    Please note: I will not be available for the next two weeks.  I will assign this to another expert that can help you further.

    Thanks and regards,
    Vamsi

  • Hi Vamsi Gudivada,

    Please confirm whether I got your correctly or not:  After changing the memory definition to page 1, verify succeed but you the corresponding data is missing in the image (and hence it won't make it in to the OTP).  Did I get that correct? 

    Yes, that's right.

    Thanks for assigning me to another expert.

    Best regards,
    O.H

  • Hello O.H.

    This thread has been assigned to our UniFlash expert for continued discussion.

    Thanks

    ki

  • O.H,

    Can you summarize the current issue again for me? I tried reading through the thread, but I'm still not sure what the remaining issue is.

    The customer recompiled their program so that the OTP data is now programmed to page1 instead of page0. And when they load this program, it doesn't actually write the OTP?

    Thanks,

    Ricky

  • Hello Ki, Ricky Lau,

    Thanks to both of you for your help.

    Can you summarize the current issue again for me? I tried reading through the thread, but I'm still not sure what the remaining issue is.

    The problem is that the code does not include what to write to the OTP.

    The original problem resulted in the following using a hex file that contained what to write to the OTP.

    • Load Image  -> [SUCCESS] Program Load completed successfully.
    • Verify Image -> [ERROR] C28xx_CPU1: File Loadrer: Verification failed: Memory map prevented reading 0x7821C @Program

    The customer recompiled their program so that the OTP data is now programmed to page1 instead of page0. Using the modified hex file, the "Load Image" and "Verify Image" passed for the board that had already been written.

    However, since the OTP has already been written, we cannot determine if the OTP has been rewritten. It seems that the code does not contain any content to be written to the OTP.

    Check by grep in hex with FF5A5857, referring to the description of the relevant two lines (below). The two lines can be found in the attached file "gpio_toggle_cpu01_cahnge.hex".
    :020000040007F3
    :08821C00FFFFFFFFFF5A585756

    Best regards,
    O.H

  • O.H,

    Is the hex file only used for looking at the sections being written, or is customer planning to use it for programming devices as well?

    Hex format do not have concept of pages, so I wondering if the hex file was generated to only including the data on page0 and therefore it did not include the data written to 0x7821C on page1.

    If you have the .out file, you can generate the Object File Dump (ofd) information to confirm that it is writing to the 0x7821C section.

    Thanks,

    Ricky

  • Hi Ricky,

    Is the hex file only used for looking at the sections being written, or is customer planning to use it for programming devices as well?

    It is the latter. The customer wants to use a hex file to write to the device and the same file to Verify.

    Hex format do not have concept of pages, so I wondering if the hex file was generated to only including the data on page0 and therefore it did not include the data written to 0x7821C on page1.

    If you have the .out file, you can generate the Object File Dump (ofd) information to confirm that it is writing to the 0x7821C section.

    If I want to unify the files used for Write and Verify, is the only way to do so is to change them to .out files?

    If they use a hex file, they use one that is modified to put 0x7821C on page 0 for Write and page1 for Verify. After that, the contents of 0x7821C can be checked from the Memory Browser...

    Best regards,
    O.H

  • O.H.

    From what I can see, hex formats do not have page information, so it will map everything to page 0.

    There are 2 options I can see:

    1. The reason verify is initially failing is because the F28075 GEL file does not allow reads to the OTP memory ranges (ie; 0x78200) on page 0. We can manually update the gel file to allow reads.

    2. Instead of using "Verify Image" button in UniFlash, go into "Settings & Utilities" and change the "Download Settings" radio button from "Erase and Program" to "Verify Only" and click "Load Image" instead. This will run through the flash based verify sequence.

    I can provide additional information on these 2 solutions as needed, depending on which one fits into the customers flow.

    Thanks,

    Ricky

  • Hi Ricky,

    Thank you for suggesting the solution. Since method 2 is simpler, I will ask the customer to try it.

    1. The reason verify is initially failing is because the F28075 GEL file does not allow reads to the OTP memory ranges (ie; 0x78200) on page 0. We can manually update the gel file to allow reads.

    We have checked the F28075.gel used by UniFlash.
    C:\ti\uniflash_6.2.0\deskdb\content\TICloudAgent\win\ccs_base\emulation\gel

    As you said, 0x78000 was allowed to be read in page1 (Data memory maps), but 0x78000 was not allowed to be read in page0 (Program memory maps).

    Does this mean that I should edit this manually? Specifically, add the following code to page0 (Program memory maps).

    hotmenu F2807x_Memory_Map()
    {
        /* GEL_MapReset(); */
        GEL_MapOn();
    
    
        /* Program memory maps */
    ~~~~~~~~~~~~
    ~~~~~~~~~~~~
        GEL_MapAddStr(0x00013000,0, 0x1000, "R|W|AS2",0);                    /*   GS7 RAM (with PARITY) (8KBytes)                         */
        GEL_MapAddStr(0x00070000,0, 0x400, "R|AS2",0);                       /*   TI OTP BANK0 (2 KBytes)                                 */
        //add
        GEL_MapAddStr(0x00078000,1, 0x400, "R|AS2",0);                       /*   USER OTP BANK0 (2 KBytes)  
        //
        GEL_MapAddStr(0x00080000,0, 0x40000, "R|AS2",0);                     /*   FLASH BANK0 (512 KBytes)  
    ~~~~~~~~~~~~
    ~~~~~~~~~~~~

    Best regards,
    O.H

    /********************************************************************/
    /* f28075.gel                                                      */
    /* Version 4.00.0                                                   */
    /*                                                                  */
    /* This GEL file is to be used with the TMS320F28075 DSP.          */
    /* Changes may be required to support specific hardware designs.    */
    /*                                                                  */
    /* Code Composer Studio supports six reserved GEL functions that    */
    /* automatically get executed if they are defined. They are:        */
    /*                                                                  */
    /* StartUp()              - Executed whenever CCS is invoked        */
    /* OnReset()              - Executed after Debug->Reset CPU         */
    /* OnRestart()            - Executed after Debug->Restart           */
    /* OnPreFileLoaded()      - Executed before File->Load Program      */
    /* OnFileLoaded()         - Executed after File->Load Program       */
    /* OnTargetConnect()      - Executed after Debug->Connect           */
    /*                                                                  */
    /********************************************************************/
    
    StartUp()
    {
    
    }
    
    OnReset(int nErrorCode)
    {
        *(int *)0x7029 = 0x68;  		/* Disable WD */
        
        SetupDCSM();  						/* Initialize DCSM */
    	
    	Device_Config();
        
        CLA_Clock_Enable();
        
        if (GEL_IsInRealtimeMode())     /* If in real-time-mode */
    	{
    	}
    	else                            /* Put device into C28x Mode */
    	{
    	  C28x_Mode();   
    	}
    
    }
    
    OnRestart(int nErrorCode)
    {
    /* CCS will call OnRestart() when you do a Debug->Restart and   */
    /* after you load a new file.  Between running interrupt based  */
    /* programs, this function will clear interrupts and help keep  */
    /* the processor from going off into invalid memory.            */
        if (GEL_IsInRealtimeMode())     /* If in real-time-mode */
    	{
    	}
    	else                            /* Put device into C28x Mode */
    	{
    	  C28x_Mode();   
    	}
         IER = 0;
         IFR = 0;
    }
    
    OnPreFileLoaded()
    {
    	GEL_Reset();
    }
    
    OnFileLoaded(int nErrorCode, int bSymbolsOnly)
    {
     if (!bSymbolsOnly) {
         Device_Cal();
     }
    }
    
    OnTargetConnect()
    {
    
        *(int *)0x5F412 =0x000F;      /* RAM INIT FOR M0/M1/D0/D1 Memory  */
        *(int *)0x5F432 =0x003F;      /* RAM INIT FOR LS0..LS5  Memory    */
        *(int *)0x5F452 =0x00FF;      /* RAM INIT FOR GS0..GS7 Memory    */
    
        if (GEL_IsInRealtimeMode())     /* If in real-time-mode */
        {
        }
        else                            /* Put device into C28x Mode */
        {
            C28x_Mode();   
        }
    
        F2807x_Memory_Map();        /* Initialize the CCS memory map */
    
    /* Check to see if CCS has been started-up with the DSP already */
    /* running in real-time mode.  The user can add whatever        */
    /* custom initialization stuff they want to each case.          */
    
        if (GEL_IsInRealtimeMode())     /* Do real-time mode target initialization */
        {
    
        }
        else                            /* Do stop-mode target initialization */
        {
            GEL_Reset();                /* Reset DSP */
        }
    }
    
    
    /********************************************************************/
    /* These functions are useful to engage/disengage realtime          */
    /* emulation mode during debug.  They save the user from having to  */
    /* manually perform these steps in CCS.                             */
    /********************************************************************/
    menuitem "Realtime Emulation Control";
    
    hotmenu Run_Realtime_with_Reset()
    {
        GEL_Reset();                /* Reset the DSP */
        ST1 = ST1 & 0xFFFD;         /* clear DBGM bit in ST1 */
        GEL_EnableRealtime();       /* Enable Realtime mode */
        GEL_Run();                  /* Run the DSP */
    }
    hotmenu Run_Realtime_with_Restart()
    {
        GEL_Restart();              /* Reset the DSP */
        ST1 = ST1 & 0xFFFD;         /* clear DBGM bit in ST1 */
        GEL_EnableRealtime();       /* Enable Realtime mode */
        GEL_Run();                  /* Run the DSP */
    }
    hotmenu Full_Halt()
    {
        GEL_DisableRealtime();      /* Disable Realtime mode */
        GEL_Halt();                 /* Halt the DSP */
    }
    hotmenu Full_Halt_with_Reset()
    {
        GEL_DisableRealtime();      /* Disable Realtime mode */
        GEL_Halt();                 /* Halt the DSP */
        GEL_Reset();                /* Reset the DSP */
    }
    
    /*********************************************************************/
    /*                         F28075 Memory Map                        */
    /*                                                                   */
    /*********************************************************************/
    menuitem "Initialize Memory Map";
    
    hotmenu F2807x_Memory_Map()
    {
        /* GEL_MapReset(); */
        GEL_MapOn();
    
    
        /* Program memory maps */
        GEL_MapAddStr(0x00000000,0, 0x400, "R|W|AS2",0);                     /*   M0 RAM (with ECC) (2 KByte)                             */
        GEL_MapAddStr(0x00000400,0, 0x400, "R|W|AS2",0);                     /*   M1 RAM (with ECC) (2 KByte)                             */
        GEL_MapAddStr(0x00008000,0, 0x800, "R|W|AS2",0);                     /*   LS0 RAM (with PARITY) (4KBytes)                         */
        GEL_MapAddStr(0x00008800,0, 0x800, "R|W|AS2",0);                     /*   LS1 RAM (with PARITY) (4KBytes)                         */
        GEL_MapAddStr(0x00009000,0, 0x800, "R|W|AS2",0);                     /*   LS2 RAM (with PARITY) (4KBytes)                         */
        GEL_MapAddStr(0x00009800,0, 0x800, "R|W|AS2",0);                     /*   LS3 RAM (with PARITY) (4KBytes)                         */
        GEL_MapAddStr(0x0000A000,0, 0x800, "R|W|AS2",0);                     /*   LS4 RAM (with PARITY) (4KBytes)                         */
        GEL_MapAddStr(0x0000A800,0, 0x800, "R|W|AS2",0);                     /*   LS5 RAM (with PARITY) (4KBytes)                         */
        GEL_MapAddStr(0x0000B000,0, 0x800, "R|W|AS2",0);                     /*   D0 RAM (with ECC or PARITY) (4KBytes)                   */
        GEL_MapAddStr(0x0000B800,0, 0x800, "R|W|AS2",0);                     /*   D1 RAM (with ECC or PARITY) (4KBytes)                   */
        GEL_MapAddStr(0x0000C000,0, 0x1000, "R|W|AS2",0);                    /*   GS0 RAM (with PARITY) (8KBytes)                         */
        GEL_MapAddStr(0x0000D000,0, 0x1000, "R|W|AS2",0);                    /*   GS1 RAM (with PARITY) (8KBytes)                         */
        GEL_MapAddStr(0x0000E000,0, 0x1000, "R|W|AS2",0);                    /*   GS2 RAM (with PARITY) (8KBytes)                         */
        GEL_MapAddStr(0x0000F000,0, 0x1000, "R|W|AS2",0);                    /*   GS3 RAM (with PARITY) (8KBytes)                         */
        GEL_MapAddStr(0x00010000,0, 0x1000, "R|W|AS2",0);                    /*   GS4 RAM (with PARITY) (8KBytes)                         */
        GEL_MapAddStr(0x00011000,0, 0x1000, "R|W|AS2",0);                    /*   GS5 RAM (with PARITY) (8KBytes)                         */
        GEL_MapAddStr(0x00012000,0, 0x1000, "R|W|AS2",0);                    /*   GS6 RAM (with PARITY) (8KBytes)                         */
        GEL_MapAddStr(0x00013000,0, 0x1000, "R|W|AS2",0);                    /*   GS7 RAM (with PARITY) (8KBytes)                         */
        GEL_MapAddStr(0x00070000,0, 0x400, "R|AS2",0);                       /*   TI OTP BANK0 (2 KBytes)                                 */
        GEL_MapAddStr(0x00080000,0, 0x40000, "R|AS2",0);                     /*   FLASH BANK0 (512 KBytes)                                */
        GEL_MapAddStr(0x00100000,0, 0x200000, "R|W|AS2",0);                  /*   EMIF-1 (Prog + Data) (4 MBytes) CS2n - ASYNC Access     */
        GEL_MapAddStr(0x00300000,0, 0x80000, "R|W|AS2",0);                   /*   EMIF-1 (Prog + Data) (1 MBytes) CS3n - ASYNC Access     */
        GEL_MapAddStr(0x00380000,0, 0x60000, "R|W|AS2",0);                   /*   EMIF-1 (Prog + Data) (1 MBytes) CS4n - ASYNC Access     */
        GEL_MapAddStr(0x003F0000,0, 0x8000, "R|AS2",0);                      /*   Secure ROM (64 KBytes)                                  */
        GEL_MapAddStr(0x003F8000,0, 0x8000, "R|AS2",0);                      /*   Boot ROM (master) (64 KBytes)                           */
        
        /* Data memory maps */
        GEL_MapAddStr(0x00000000,1, 0x400, "R|W|AS2",0);                     /*   M0 RAM (with ECC) (2 KByte)                             */
        GEL_MapAddStr(0x00000400,1, 0x400, "R|W|AS2",0);                     /*   M1 RAM (with ECC) (2 KByte)                             */
        GEL_MapAddStr(0x00000800,1, 0xC80, "R|W|AS2",0);                     /*   Peripheral Space                                        */
        GEL_MapAddStr(0x00001480,1, 0x80, "R|W|AS2",0);                      /*   CLA1toCPU1 MSG RAM (with PARITY) (256 bytes)            */
        GEL_MapAddStr(0x00001500,1, 0x80, "R|W|AS2",0);                      /*   CPU1toCLA1 MSG RAM (with PARITY) (256 bytes)            */
        GEL_MapAddStr(0x00003000,1, 0x1000, "R|W|AS2",0);                    /*   Configurable Logic Registers (8 KBytes)                 */
        GEL_MapAddStr(0x00004000,1, 0x2000, "R|W|AS2",0);                    /*   Peripheral Space                                        */
        GEL_MapAddStr(0x00006000,1, 0x1000, "R|W|AS2",0);                    /*   High Speed Serial Port Registers (8 KBytes)             */
        GEL_MapAddStr(0x00007000,1, 0x1000, "R|W|AS2",0);                    /*   System Configuration Registers (2 KBytes)               */
        GEL_MapAddStr(0x00008000,1, 0x800, "R|W|AS2",0);                     /*   LS0 RAM (with PARITY) (4KBytes)                         */
        GEL_MapAddStr(0x00008800,1, 0x800, "R|W|AS2",0);                     /*   LS1 RAM (with PARITY) (4KBytes)                         */
        GEL_MapAddStr(0x00009000,1, 0x800, "R|W|AS2",0);                     /*   LS2 RAM (with PARITY) (4KBytes)                         */
        GEL_MapAddStr(0x00009800,1, 0x800, "R|W|AS2",0);                     /*   LS3 RAM (with PARITY) (4KBytes)                         */
        GEL_MapAddStr(0x0000A000,1, 0x800, "R|W|AS2",0);                     /*   LS4 RAM (with PARITY) (4KBytes)                         */
        GEL_MapAddStr(0x0000A800,1, 0x800, "R|W|AS2",0);                     /*   LS5 RAM (with PARITY) (4KBytes)                         */
        GEL_MapAddStr(0x0000B000,1, 0x800, "R|W|AS2",0);                     /*   D0 RAM (with ECC or PARITY) (4KBytes)                   */
        GEL_MapAddStr(0x0000B800,1, 0x800, "R|W|AS2",0);                     /*   D1 RAM (with ECC or PARITY) (4KBytes)                   */
        GEL_MapAddStr(0x0000C000,1, 0x1000, "R|W|AS2",0);                    /*   GS0 RAM (with PARITY) (8KBytes)                         */
        GEL_MapAddStr(0x0000D000,1, 0x1000, "R|W|AS2",0);                    /*   GS1 RAM (with PARITY) (8KBytes)                         */
        GEL_MapAddStr(0x0000E000,1, 0x1000, "R|W|AS2",0);                    /*   GS2 RAM (with PARITY) (8KBytes)                         */
        GEL_MapAddStr(0x0000F000,1, 0x1000, "R|W|AS2",0);                    /*   GS3 RAM (with PARITY) (8KBytes)                         */
        GEL_MapAddStr(0x00010000,1, 0x1000, "R|W|AS2",0);                    /*   GS4 RAM (with PARITY) (8KBytes)                         */
        GEL_MapAddStr(0x00011000,1, 0x1000, "R|W|AS2",0);                    /*   GS5 RAM (with PARITY) (8KBytes)                         */
        GEL_MapAddStr(0x00012000,1, 0x1000, "R|W|AS2",0);                    /*   GS6 RAM (with PARITY) (8KBytes)                         */
        GEL_MapAddStr(0x00013000,1, 0x1000, "R|W|AS2",0);                    /*   GS7 RAM (with PARITY) (8KBytes)                         */
        GEL_MapAddStr(0x00040000,1, 0x8000, "R|W|AS4",0);                    /*   Peripheral Space                                        */       
        GEL_MapAddStr(0x00048800,1, 0x1800, "R|W|AS4",0);                    /*   Peripheral Space                                        */  
        GEL_MapAddStr(0x0004A800,1, 0x15800, "R|W|AS4",0);                   /*   Peripheral Space                                        */
        GEL_MapAddStr(0x00070000,1, 0x400, "R|AS2",0);                       /*   TI OTP BANK0 (2 KBytes)                                 */
        GEL_MapAddStr(0x00078000,1, 0x400, "R|AS2",0);                       /*   USER OTP BANK0 (2 KBytes)                               */
        GEL_MapAddStr(0x00080000,1, 0x40000, "R|AS2",0);                     /*   FLASH BANK0 (512 KBytes)                                */
        GEL_MapAddStr(0x01070000,1, 0x80, "R|AS2",0);                        /*   TI OTP BANK0 ECC (2 KBytes)                             */
        GEL_MapAddStr(0x01071000,1, 0x80, "R|AS2",0);                        /*   USER OTP BANK0 ECC (2 KBytes)                           */
        GEL_MapAddStr(0x01080000,1, 0x8000, "R|AS2",0);                      /*   FLASH BANK0 ECC (512 KBytes)                            */
        GEL_MapAddStr(0x00100000,1, 0x200000, "R|W|AS2",0);                  /*   EMIF-1 (Prog + Data) (4 MBytes) CS2n - ASYNC Access     */
        GEL_MapAddStr(0x00300000,1, 0x80000, "R|W|AS2",0);                   /*   EMIF-1 (Prog + Data) (1 MBytes) CS3n - ASYNC Access     */
        GEL_MapAddStr(0x00380000,1, 0x60000, "R|W|AS2",0);                   /*   EMIF-1 (Prog + Data) (1 MBytes) CS4n - ASYNC Access     */
        GEL_MapAddStr(0x003F0000,1, 0x8000, "R|AS2",0);                      /*   Secure ROM (64 KBytes)                                  */
        GEL_MapAddStr(0x003F8000,1, 0x8000, "R|AS2",0);                      /*   Boot ROM (master) (64 KBytes)                           */
        GEL_MapAddStr(0x80000000,1, 0x10000000, "R|W|AS2",0);                /*   EMIF-1 (Data) (0.5 GBytes) CS0n - SDRAM                 */
        
        GEL_MapAddStr(0x01000D00,1, 0x200, "R|W|AS2",0);                     /* Redundant PIE Vector Table                                */
    
        /* Peripheral memory maps */
        GEL_MapAddStr(0x00048000,3, 0x800, "R|W|AS4",0);                     /*   CANA Registers                                          */   
        GEL_MapAddStr(0x0004A000,3, 0x800, "R|W|AS4",0);                     /*   CANB Registers                                          */
        
        GEL_TextOut("\nMemory Map Initialization Complete\n"); 
    
    }
    
    /********************************************************************/
    /* The ESTOP0 fill functions are useful for debug.  They fill the   */
    /* RAM with software breakpoints that will trap runaway code.       */
    /********************************************************************/
    hotmenu Fill_F2807x_RAM_with_ESTOP0()
    {
        GEL_MemoryFill(0x000000,1,0x000800,0x7625);      /* Fill M0/M1  */
        GEL_MemoryFill(0x008000,1,0x000800,0x7625);      /* Fill L0     */
        GEL_MemoryFill(0x008800,1,0x001000,0x7625);      /* Fill L1/L2  */
        GEL_MemoryFill(0x009800,1,0x001000,0x7625);      /* Fill L3/L4  */
        GEL_MemoryFill(0x00A800,1,0x000800,0x7625);	     /* Fill L5     */
        
        GEL_MemoryFill(0x00B000,1,0x001000,0x7625);	     /* Fill D0/D1  */
    
        GEL_MemoryFill(0x00C000,1,0x008000,0x7625);	     /* Fill G0-G7 */
        
    }
    
    /********************************************************************/
    /*              TI OTP and USER OTP Memory Dump                     */
    /********************************************************************/
    menuitem "OTP Dump";
    hotmenu OTP_Dump()
    {
                    GEL_MemorySave(0x00070000,1, 0x400, "TI_OTP_Bank0.dat");
                    
                    GEL_MemorySave(0x00078000,1, 0x400, "USER_OTP_Bank0.dat");
                    
                    GEL_TextOut("\n********************************************************************** 
                                 \nTI OTP and USER OTP Memory Dump Complete!  
                                 \nFile Output Directory: <CCS Install Directory>\\ccs<version>\\eclipse 
                                 \n                       (e.g. C:\\ti\\ccsv6\\eclipse)
                                 \n**********************************************************************\n"); 
    }
    
    /********************************************************************/
    menuitem "Watchdog";
    hotmenu Disable_WD()
    {
        *0x7029 = *0x7029 | 0x0068;                /* Set the WDDIS bit */
        *0x7025 = 0x0055;                          /* Service the WD    */
        *0x7025 = 0x00AA;                          /*  once to be safe. */
        GEL_TextOut("\nWatchdog Timer Disabled");
    }
    
    
    
    /********************************************************************/
    menuitem "Addressing Modes";
    
    hotmenu C28x_Mode()
    {
        ST1 = ST1 & (~0x0100);      /*   AMODE = 0  */
        ST1 = ST1 | 0x0200;         /* OBJMODE = 1  */
    }
    
    hotmenu C24x_Mode()
    {
        ST1 = ST1 | 0x0100;         /*   AMODE = 1  */
        ST1 = ST1 | 0x0200;         /* OBJMODE = 1  */
    }
    
    hotmenu C27x_Mode()
    {
        ST1 = ST1 & (~0x0100);      /*   AMODE = 0  */
        ST1 = ST1 & (~0x0200);      /* OBJMODE = 0  */
    }
    
    
    
    /********************************************************************/
    /* CLA Clock Enable                                                 */
    /* Allows debugger to enable CLA breakpoints (esp. after Reset)     */
    /********************************************************************/
    menuitem "CLA Clock Enable"
    hotmenu CLA_Clock_Enable()
    {
     *0x5D322|= 0x1;   /* Set PCLKCR0 bit 0 */
    }
    
    
    /********************************************************************/
    /* Load the Device Calibration values from TI OTP                   */
    /********************************************************************/
    menuitem "Device Calibration"
    hotmenu Device_Cal()
    {
       /* Currently disabled until trims are established */
    
    }
    
    /********************************************************************/
    /* EMU Boot Mode - Set Boot Mode During Debug                       */
    /********************************************************************/
    menuitem "EMU Boot Mode Select"
    hotmenu EMU_BOOT_SARAM()
    {
        *0xD00 = 0x0A5A;
    }
    hotmenu EMU_BOOT_FLASH()
    {
        *0xD00 = 0x0B5A;
    }
    
    menuitem "SETUP EMIF"
    hotmenu SetupEmif1()
    {
    
        *(long int *)0x7C08 =  0xAA0000AA;  	/* GPIO SETUP */
        *(long int *)0x7C46 =  0xAAAAAAAA; 		/* GPIO SETUP */
        *(long int *)0x7C48 =  0x800002AA;		/* GPIO SETUP */
        *(long int *)0x7C82 =  0xFFFFFC00;		/* GPIO SETUP */
        *(long int *)0x7C84 =  0xCFF;			/* GPIO SETUP */
        *(long int *)0x7C86 =  0xAAAAAAAA;		/* GPIO SETUP */
        *(long int *)0x7C88 =  0x2FFFA8AA;		/* GPIO SETUP */
    
        *(long int *)0x5D324 =  0x3;			/* ENABLE EMIF CLOCK*/
        *(long int *)0x47002 =  0x0;			/* EMIF1 WAIT SETUP */
        *(long int *)0x47008 =  0x181;			/* EMIF-CS2 SETUP */
        *(long int *)0x4700A =  0x181;			/* EMIF-CS3 SETUP */
        *(long int *)0x4700C =  0x181;			/* EMIF-CS4 SETUP */
    }
    
    hotmenu SetupDCSM()
    {
        int i;
    	unsigned long LinkPointer;
    	unsigned long *Z1_ZoneSelBlockPtr;
    	unsigned long *Z2_ZoneSelBlockPtr;
    	int bitpos = 28;
    	int zerofound = 0;
    
    	XAR0 = *(unsigned long *)0x703F0;         /* Dummy read of SECDC REGISTER   */
    				
    	XAR0 = *(unsigned long *)0x78000;         /* Dummy read of Z1 - LinkPointer1 */
    	XAR0 = *(unsigned long *)0x78004;         /* Dummy read of Z1 - LinkPointer2 */
    	XAR0 = *(unsigned long *)0x78008;         /* Dummy read of Z1 - LinkPointer3 */
    	XAR0 = *(unsigned long *)0x78200;         /* Dummy read of Z2 - LinkPointer1 */
    	XAR0 = *(unsigned long *)0x78204;         /* Dummy read of Z2 - LinkPointer2 */
    	XAR0 = *(unsigned long *)0x78208;         /* Dummy read of Z2 - LinkPointer3 */
    	
    	XAR0 = *(unsigned long *)0x78010;         /* Dummy read of Z1 - PSWDLOCK  */	
    	XAR0 = *(unsigned long *)0x78210;         /* Dummy read of Z2 - PSWDLOCK  */	
    
    	XAR0 = *(unsigned long *)0x78014;         /* Dummy read of Z1 - CRCLOCK  */	
    	XAR0 = *(unsigned long *)0x78214;         /* Dummy read of Z2 - CRCLOCK  */	
    
    	XAR0 = *(unsigned long *)0x78018;         /* Dummy read of Z1 - JTAGLOCK  */	
    	XAR0 = *(unsigned long *)0x78218;         /* Dummy read of Z2 - JTAGLOCK  */	
    
    	XAR0 = *(unsigned long *)0x7801E;         /* Dummy read of Z1 - BOOTCTRL  */
    	XAR0 = *(unsigned long *)0x7821E;         /* Dummy read of Z2 - BOOTCTRL  */
    
    	LinkPointer = *(unsigned long *)0x5F000;         /* Read Z1-Linkpointer out of Z1-LINKPOINTER register */
    	LinkPointer = LinkPointer << 3;                              /* Bits 31,30 and 29 as most-sigificant 0 are invalid LinkPointer options */
    	while ((zerofound == 0) && (bitpos > -1))
    	{
    	    if ((LinkPointer & 0x80000000) == 0)
    		{
    		    zerofound = 1;
    			Z1_ZoneSelBlockPtr = (unsigned long *)(0x78000 + ((bitpos + 3)*16));			
    		}
    		else
    		{
    		    bitpos--;
    			LinkPointer = LinkPointer << 1;
    		}
    	}
    	if (zerofound == 0)
    	{
    	    Z1_ZoneSelBlockPtr = (unsigned long *)0x78020;
    	}
    
    	bitpos = 28;
    	zerofound = 0;
    	LinkPointer = *(unsigned long *)0x5F040;         /* Read Z2-Linkpointer out of Z1-LINKPOINTER register */
    	LinkPointer = LinkPointer << 3;                              /* Bits 31 and 30 as most-sigificant 0 are invalid LinkPointer options */
    	while ((zerofound == 0) && (bitpos > -1))
    	{
    	    if ((LinkPointer & 0x80000000) == 0)
    		{
    		    zerofound = 1;
    			Z2_ZoneSelBlockPtr = (unsigned long *)(0x78200 + ((bitpos + 3)*16));			
    		}
    		else
    		{
    		    bitpos--;
    			LinkPointer = LinkPointer << 1;
    		}
    	}
    	if (zerofound == 0)
    	{
    	    Z2_ZoneSelBlockPtr = (unsigned long *)0x78220;
    	}
    		
    	/* Perform dummy reads of the Zone Select Block locations */
    	for (i = 0; i < 8; i++)
    	{
    	    XAR0 =  *Z1_ZoneSelBlockPtr;
    	    XAR0 =  *Z2_ZoneSelBlockPtr; 
    		Z1_ZoneSelBlockPtr++;
    		Z2_ZoneSelBlockPtr++;
    	}		
    }
    
    menuitem "Device Configuration"
    hotmenu Device_Config()
    {
        *(unsigned long *)0x0005D008   = *(unsigned long *)0x00070200;    // LOAD PARTIDL Value
        *(unsigned long *)0x0005D00A   = *(unsigned long *)0x00070202;    // LOAD PARTIDH Value
    	
    	*(unsigned long *)0x0005D010   = *(unsigned long *)0x00070204;    // LOAD DC0 Value
        *(unsigned long *)0x0005D012   = *(unsigned long *)0x00070206;    // LOAD DC1 Value 
        *(unsigned long *)0x0005D014   = *(unsigned long *)0x00070208;    // LOAD DC2 Value 
        *(unsigned long *)0x0005D016   = *(unsigned long *)0x0007020A;    // LOAD DC3 Value 
        *(unsigned long *)0x0005D018   = *(unsigned long *)0x0007020C;    // LOAD DC4 Value
        *(unsigned long *)0x0005D01A   = *(unsigned long *)0x0007020E;    // LOAD DC5 Value
        *(unsigned long *)0x0005D01C   = *(unsigned long *)0x00070210;    // LOAD DC6 Value
        *(unsigned long *)0x0005D01E   = *(unsigned long *)0x00070212;    // LOAD DC7 Value
        *(unsigned long *)0x0005D020   = *(unsigned long *)0x00070214;    // LOAD DC8 Value
        *(unsigned long *)0x0005D022   = *(unsigned long *)0x00070216;    // LOAD DC9 Value
        *(unsigned long *)0x0005D024   = *(unsigned long *)0x00070218;    // LOAD DC10 Value
        *(unsigned long *)0x0005D026   = *(unsigned long *)0x0007021A;    // LOAD DC11 Value
        *(unsigned long *)0x0005D028   = *(unsigned long *)0x0007021C;    // LOAD DC12 Value
        *(unsigned long *)0x0005D02A   = *(unsigned long *)0x0007021E;    // LOAD DC13 Value
        *(unsigned long *)0x0005D02C   = *(unsigned long *)0x00070220;    // LOAD DC14 Value
        *(unsigned long *)0x0005D02E   = *(unsigned long *)0x00070222;    // LOAD DC15 Value
    //    *(unsigned long *)0x0005D030   = *(unsigned long *)0x00070224;    // LOAD DC16 Value (Reserved)
        *(unsigned long *)0x0005D032   = *(unsigned long *)0x00070226;    // LOAD DC17 Value
        *(unsigned long *)0x0005D034   = *(unsigned long *)0x00070228;    // LOAD DC18 Value
        *(unsigned long *)0x0005D036   = *(unsigned long *)0x0007022A;    // LOAD DC19 Value
        *(unsigned long *)0x0005D038   = *(unsigned long *)0x0007022C;    // LOAD DC20 Value
        
        *(unsigned long *)0x0005D060   = *(unsigned long *)0x0007022E;    // LOAD PERCNF Value
    }
    
    /*** End of file ***/
    

  • O.H

    Yes, that is what I was suggesting. This should get around the verification error the customer was seeing. You will also need to move the section back to page 0 before recompiling the hex file.

    After that, we will need to check with the C2000 team to see if we can update the GEL file officially so it gets into a future CCS/UniFlash build. From what I can see, GEL files for newer C2000 devices does give read access to 0x78000 on page 0, so maybe we can do the same for F2807x.

    Thanks,

    Ricky

  • Hi Ricky,

    Thanks for the reply. I understood.

    If the customer still has problems after trying the solution, I will contact you again.

    Best regards,
    O.H

  • Hi Ricky,

    I'm sorry. There was a mistake in the additional code I suggested last time: the page parameter was still set to 1. The customer was able to "Verify Image" successfully by adding the following code.

    //add
    GEL_MapAddStr(0x00078000,0, 0x400, "R|AS2",0); /* USER OTP BANK0 (2 KBytes)
    //

    After that, we will need to check with the C2000 team to see if we can update the GEL file officially so it gets into a future CCS/UniFlash build.

    I would appreciate it if you could let me know if you decide to fix this in a future update.

    Best regards,
    O.H

  • O.H, Ricky.

    I am back to office.  Thank you for closing this.  I already notified the gel owner to fix it for this.  

    I am closing this ticket. 

    Thanks and regards,
    Vamsi