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.

CCS/MSP432P401R: UART programming using BSL with standard FTDI chip

Part Number: MSP432P401R

Tool/software: Code Composer Studio

Hi,

I have been reading through all the documentation on BSL (http://www.ti.com/tool/MSPBSL)

It talks about how to trigger BLS and program the chip using MSP-FET or MSP-GANG.

This devices are expensive and our board is designed to hobyists, who use standard FTDI chips like this one: 

https://www.digikey.es/product-detail/es/sparkfun-electronics/DEV-14050/1568-1505-ND/6674604?utm_adgroup=Interface+-+Modules&mkwid=sb7t8eVai&pcrid=345234088201&pkw=&pmt=&pdv=c&productid=6674604&slid=&gclid=EAIaIQobChMIvK7Zgsel5AIVAT0MCh29HwJjEAQYBCABEgJxNvD_BwE

We need to find a way of programming the chip using FTDI from CCS or Energia IDE if possible.

Is there any tool for doing this?

If not, do you have any documentation on how to develop it?

Please note that I am using MSP432, not MSP430

Thanks,

Regards

  • The adapter's RX and TX lines would almost certainly work fine with P4xx parts using BSL-Scripter, but the problem is getting BSL invoked in the first place.

    For MSP430 parts that use BSL-Scripter for flashing, a revised version of Scripter has been compiled that causes it to generate the invoke sequence itself rather than relying on an MSP-FET or Rocket to do that, and thus allow use of generic adapters like FTDI:

    https://github.com/drcrane/bslscripter-vs2017/releases

    It does that if the INVOKE option is included on the MODE line, even if P4xx is the specified family.  But of course that sequence is the one for MSP430 parts with shared JTAG pins, and it uses the DTR and RTS outputs of the adapter to generate the sequence.

    It's possible that instead of connecting the RTS line to Test, you could connect it to the GPIO port bit you specify to invoke BSL, and you would specify the High state to invoke, and install a pulldown resistor on that pin to make sure it's low if the FTDI is not connected.  That might work because in the 430 invoke sequence, RTS is brought high about 10 ms before DTR brings /Reset high.

    The problem is that your FTDI adapter, like almost all of them, doesn't bring out RTS.  It has CTS instead.  So that could be a major problem in making hardware invocation from Scripter work unless you want to rewire the adapter, or embed the chip.

    My understanding of the P4xx BSL invocation suggests you could instead simply have a jumper that can be moved from the Normal to the BSL position, feeding your specified invocation port pin either high or low.  The user would move the jumper to BSL, connect the USB adapter, then boot the device, or just hit a Reset button if there is one.  Then run Scripter within 10 seconds.  After flashing, he would move the jumper back to the Normal position.  Or he could simply hold down a pushbutton while powering up or resetting to invoke BSL.

    Or you could have some UI selection that causes your application firmware to enter BSL.

    So I think the adapter should work fine for the Rx and Tx lines, and the 432's method of invoking BSL based on the state of a single I/O port bit (which is much simpler than the 430 hardware invocation), should let you get there pretty easily.  Now this is using Scripter.  I don't know about flashing from CCS or Energia this way, but I suspect it would work the same.  Note that with Scripter at least, you would need to include the PARITY option on the MODE line since the conversion to 8/E/1 is normally done by the MSP-FET or Rocket.  I don't know if CCS or Energia  has such an option.

    If you get this to work, I hope you will come back and describe how you did it.

  • Hi George,

    Thank you for taking the time to reply. Your explanation was really helpful.

    I am having problems getting the device (BSL) to answer BSL-scripter. I am using v3.0.4.1 of the scripter, tried both OS X and Windows

    The device seems to enter BSL mode. The code after the line which invokes BSL is not executed, which indicates that the BSL has been invoked properly to me.

    The FTDI chip seems to be sending the correct command to the device (0xFF) with parity bit.

    The time expired between BSL invocation and 0xFF command is ~3 seconds (a lot less than the BSL timeout)

    The FTDI chip is connected to P1.2 and P1.3

    I have never erased the BSL section of the chip. Only thing I have done is programming the chip using J-Link with CCS. I am attaching the data in memory position 0x0020 2000 so you can check they are fine.

    Please, see below the captures of the data transfer using a logic analyzer and the code I am using to invoque BSL, as well as the script used

    Here is the code I am using to invoque BSL:

    #define BSL_PARAM 0xFC48FFFF // I2C slave address = 0x48, Interface selection = Auto
    #define BSL_API_TABLE_ADDR 0x00202000 // Address of BSL API table
    #define BSL_ENTRY_FUNCTION (*((uint32_t *)BSL_API_TABLE_ADDR))
    
    // Code below is inside main()
    while (1)
        {
            UART_write(uart, "Entering BSL\n", 13);
            ((void (*)())BSL_ENTRY_FUNCTION)((uint32_t)BSL_PARAM);
            UART_write(uart, "Fail\n", 5);
            vTaskDelay( 1000 / portTICK_PERIOD_MS );
        }

    Here is the script i use:

    LOG
    MODE P4xx UART 9600 /dev/tty.usbserial-FTWJXLVX PARITY
    REBOOT_RESET

    This is the data in 0x0020 2000

    J-Link>mem 0x0020 2000
    00000020 = 00 00 00 00 00 00 00 00 00 00 00 00 51 25 00 00
    00000030 = 6B 31 00 00 00 00 00 00 F1 24 00 00 05 55 00 00
    00000040 = 6B 31 00 00 6B 31 00 00 6B 31 00 00 6B 31 00 00
    00000050 = 6B 31 00 00 6B 31 00 00 6B 31 00 00 6B 31 00 00
    00000060 = 6B 31 00 00 6B 31 00 00 6B 31 00 00 6B 31 00 00
    00000070 = 6B 31 00 00 6B 31 00 00 6B 31 00 00 6B 31 00 00
    00000080 = 6B 31 00 00 6B 31 00 00 6B 31 00 00 6B 31 00 00
    00000090 = 6B 31 00 00 6B 31 00 00 6B 31 00 00 6B 31 00 00
    000000A0 = 6B 31 00 00 6B 31 00 00 6B 31 00 00 6B 31 00 00
    000000B0 = 6B 31 00 00 6B 31 00 00 6B 31 00 00 6B 31 00 00
    000000C0 = 6B 31 00 00 6B 31 00 00 6B 31 00 00 6B 31 00 00
    000000D0 = 6B 31 00 00 6B 31 00 00 6B 31 00 00 6B 31 00 00
    000000E0 = 6B 31 00 00 6B 31 00 00 6B 31 00 00 6B 31 00 00
    000000F0 = 6B 31 00 00 6B 31 00 00 6B 31 00 00 6B 31 00 00
    00000100 = 6B 31 00 00 6B 31 00 00 6B 31 00 00 6B 31 00 00
    00000110 = 6B 31 00 00 6B 31 00 00 6B 31 00 00 6B 31 00 00
    00000120 = 6B 31 00 00 6B 31 00 00 6B 31 00 00 6B 31 00 00
    00000130 = 6B 31 00 00 6B 31 00 00 6B 31 00 00 6B 31 00 00
    00000140 = 6B 31 00 00 2D E9 F0 4F 80 46 00 20 B8 F1 01 0F
    00000150 = AD F1 14 0D 01 90 06 D0 B8 F1 02 0F 18 BF B8 F1
    00000160 = 04 0F 40 F0 5E 81 B4 48 C1 68 01 29 40 F0 56 81
    00000170 = 02 24 B8 F1 01 0F C4 60 07 D0 10 20 B8 F1 04 0F
    00000180 = 02 90 04 BF 01 20 01 90 02 E0 08 20 01 24 02 90
    00000190 = 4F F0 00 70 D0 F8 34 08 00 6A 80 47 4F F0 00 71
    000001A0 = B8 F1 01 0F 01 F6 34 01 00 91 21 D1 F0 B1 40 1E
    000001B0 = 19 D0 C0 1E 14 D0 40 1E 0F D0 C0 1E 0A D0 40 1E
    000001C0 = 05 D0 4F F0 FF 30 9C 4A 01 21 D1 60 2B E1 4F F0
    000001D0 = 19 0A 0D E0 4F F0 18 0A 0A E0 4F F0 15 0A 07 E0
    000001E0 = 4F F0 14 0A 04 E0 4F F0 11 0A 01 E0 4F F0 10 0A
    000001F0 = 01 99 20 46 04 F0 DC FF 00 28 E4 D1 B8 F1 02 0F
    00000200 = 18 BF B8 F1 04 0F 40 F0 A5 80 88 48 00 78 01 28
    00000210 = 40 F0 A0 80 87 48 80 1F 86 88 44 89 83 89 C1 88
    00000220 = 02 88 45 88 34 43 23 43 4F F6 FF 74 19 43 84 EA
    00000230 = 01 03 1A 40 29 40 11 43 41 80 C1 88 03 91 19 43
    00000240 = C1 80 86 8C 43 8D 82 8D C1 8C 07 8C 45 8C 33 43
    00000250 = 1A 43 11 43 84 EA 01 02 17 40 29 40 39 43 41 84
    00000260 = C1 8C 04 91 11 43 C1 84 B0 F8 44 70 B0 F8 4A 50
    00000270 = B0 F8 4C 30 B0 F8 46 10 B0 F8 40 20 B0 F8 42 60
    00000280 = 3D 43 2B 43 19 43 84 EA 01 03 1A 40 31 40 11 43
    00000290 = A0 F8 42 10 B0 F8 46 B0 4B EA 03 01 A0 F8 46 10
    000002A0 = B0 F8 64 60 B0 F8 6A 30 B0 F8 6C 20 B0 F8 66 10
    000002B0 = B0 F8 60 70 B0 F8 62 50 33 43 1A 43 11 43 84 EA
    000002C0 = 01 02 17 40 29 40 39 43 A0 F8 62 10 B0 F8 66 90
    000002D0 = 49 EA 02 01 A0 F8 66 10 B0 F8 84 70 B0 F8 8A 30
    000002E0 = B0 F8 8C 20 B0 F8 86 10 B0 F8 80 50 B0 F8 82 60
    000002F0 = A4 46 3B 43 1A 43 11 43 8C EA 01 02 15 40 31 40
    00000300 = 29 43 A0 F8 82 10 B0 F8 86 40 44 EA 02 01 A0 F8
    00000310 = 86 10 B0 F8 24 61 B0 F8 2A 31 B0 F8 2C 21 B0 F8
    00000320 = 26 11 B0 F8 20 71 B0 F8 22 51 33 43 1A 43 63 46
    00000330 = 11 43 4B 40 1F 40 01 EA 05 02 3A 43 A0 F8 22 21
    00000340 = B0 F8 26 51 81 F0 FF 03 45 EA 03 01 01 F0 FF 01
    00000350 = A0 F8 26 11 05 F0 3C F9 B8 F1 01 0F 07 46 21 D0
    00000360 = B8 F1 02 0F 18 D0 32 4E 70 88 00 F0 40 0A BA F1
    00000370 = 40 0F 05 D0 4F F0 00 70 D0 F8 48 08 40 68 80 47
    00000380 = B6 F8 0C 64 06 F0 80 06 80 2E 05 D0 4F F0 00 70
    00000390 = D0 F8 64 08 00 68 80 47 00 98 00 68 80 69 01 46
    000003A0 = 20 20 04 E0 00 98 00 68 80 69 01 46 50 46 88 47
    000003B0 = 21 49 03 20 B8 F1 04 0F C8 60 10 D1 BA F1 40 0F
    000003C0 = 05 D0 4F F0 00 70 D0 F8 48 08 00 68 80 47 80 2E
    000003D0 = 05 D0 4F F0 00 70 D0 F8 64 08 40 68 80 47 B8 F1
    000003E0 = 02 0F 18 BF B8 F1 04 0F 10 D1 10 48 00 78 01 28
    000003F0 = 0C D1 10 48 03 99 01 80 04 9E 06 84 A0 F8 40 B0
    00000400 = A0 F8 60 90 A0 F8 80 40 A0 F8 20 51 0F B1 03 F0
    00000410 = 89 FB 02 98 01 99 04 F0 CB FE D4 E6 6F F0 04 00
    00000420 = 01 E0 6F F0 01 00 05 B0 BD E8 F0 8F 12 5D 00 00
    00000430 = 00 44 00 40 06 4C 00 40 E0 8C 00 20 2D E9 F0 4F
    00000440 = 83 46 DB F8 04 50 DB F8 08 60 0C 46 AD F1 24 0D
    00000450 = 05 F0 16 F8 29 78 49 08 03 D3 05 F0 BD F9 00 20
    00000460 = 45 E1 29 78 41 F0 01 01 29 70 05 F0 B5 F9 B0 8C
    00000470 = C0 F3 84 27 C0 F3 03 18 3F B1 00 F0 07 01 C0 F3
    00000480 = 84 22 40 46 04 F0 84 FF B0 8C 4F F0 00 79 D9 F8
    00000490 = 24 18 CA 69 00 F0 07 00 4F F0 01 0A 13 46 0A FA
    000004A0 = 00 F1 52 46 40 46 98 47 F0 8C 09 F6 24 07 C0 F3
    000004B0 = 84 23 C0 F3 03 18 3B B1 00 F0 07 01 C0 F3 84 22
    000004C0 = 40 46 04 F0 65 FF F0 8C 39 68 CA 69 00 F0 07 00
    000004D0 = 13 46 0A FA 00 F1 52 46 40 46 98 47 0D 20 04 F0
    000004E0 = 4B FE 05 F0 D5 FA 07 46 05 F0 1C FB 69 46 03 F0
    000004F0 = E1 FE 30 7B 5F FA 87 F8 40 28 29 D0 DD F8 08 90
    00000500 = B0 69 31 7D A2 69 4B 46 05 F0 76 F8 B0 F1 FF 3F
    00000510 = 29 D0 B8 F1 00 0F 2E D0 00 27 38 46 69 46 03 F0
    00000520 = C9 FE B0 69 31 7D A2 69 02 9B 05 F0 65 F8 B0 F1
    00000530 = FF 3F 07 D1 E9 6F 0A FA 07 F0 08 43 E8 67 78 1D
    00000540 = 04 F0 1A FE B8 F1 01 08 07 F1 01 07 E5 D1 12 E0
    00000550 = DD F8 10 90 B0 69 31 7D A2 69 4B 46 05 F0 4C F8
    00000560 = B0 F1 FF 3F 07 D1 0D 20 04 F0 A2 FB 28 78 00 F0
    00000570 = FE 00 28 70 73 E7 50 46 04 F0 FE FD 5D 4A 05 F1
    00000580 = 68 00 60 21 5B 46 04 F0 FB FF 05 A8 05 F0 73 F9
    00000590 = B1 68 70 68 06 91 58 49 CD F8 14 B0 05 AA 04 F0
    000005A0 = 83 F8 68 60 68 68 00 28 29 D0 05 A8 05 F0 03 FA
    000005B0 = 60 78 8D F8 14 A0 40 B9 00 20 05 A9 04 F0 12 FA
    000005C0 = A8 65 A8 6D D8 B1 4D 48 00 E0 20 69 28 66 20 78
    000005D0 = C8 B9 00 20 05 A9 04 F0 05 FA 28 64 28 6C 70 B1
    000005E0 = 47 48 A8 64 05 A8 05 F0 64 F9 46 48 CD F8 1C B0
    000005F0 = 00 21 05 AA 02 F0 0C FF A8 60 A8 68 48 B9 58 46
    00000600 = 03 F0 74 F9 2B E7 68 78 00 F0 FB 00 68 70 E0 68
    00000610 = A8 64 F1 69 32 6A 05 F1 14 00 05 F0 30 FA 20 78
    00000620 = 29 78 40 00 01 F0 FD 01 00 F0 02 00 08 43 28 70
    00000630 = 61 78 00 F0 FB 00 89 00 01 F0 04 01 01 43 29 70
    00000640 = 20 7D 01 F0 DF 01 40 01 00 F0 20 00 08 43 28 70
    00000650 = 61 7D 00 F0 F7 00 C9 00 01 F0 08 01 01 43 29 70
    00000660 = A0 7D 01 F0 EF 01 00 01 00 F0 10 00 08 43 28 70
    00000670 = E1 7D 00 F0 BF 00 89 01 01 F0 40 01 01 43 29 70
    00000680 = 60 68 68 64 A0 68 E8 65 A0 69 E8 60 60 7F 2F 78
    00000690 = 28 74 A0 7F 1C 49 68 74 22 7F 07 F0 02 03 07 F0
    000006A0 = 08 00 00 EB C3 00 40 18 AA 74 03 C8 05 F1 2C 03
    000006B0 = 83 E8 03 00 00 24 EC 64 4A 46 6C 63 28 78 6C 65
    000006C0 = 00 F0 7F 00 28 70 68 78 EC 63 00 F0 EF 00 68 70
    000006D0 = 68 78 2C 65 40 F0 08 00 68 70 69 78 AC 63 28 46
    000006E0 = 01 F0 FD 01 69 70 31 46 02 F0 B2 F9 58 46 09 B0
    000006F0 = BD E8 F0 8F 15 4F 00 00 11 28 00 00 9D 5B 00 00
    00000700 = 8D 5B 00 00 C1 5A 00 00 88 5D 00 00 2D E9 F0 47
    00000710 = 9A 4C 06 46 A0 69 00 27 AD F1 68 0D 00 1D B0 42
    00000720 = 40 F2 27 81 96 4D 28 68 00 69 01 46 4F F4 00 30
    00000730 = 88 47 28 68 00 68 03 21 3A 46 03 46 02 20 98 47
    00000740 = 28 68 00 68 03 21 4F F0 80 52 03 46 04 20 98 47
    00000750 = 28 68 00 68 03 21 4F F0 80 52 03 46 08 20 98 47
    00000760 = 28 68 40 68 01 46 38 46 88 47 04 2E 06 D3 60 69
    00000770 = 31 01 01 EB 86 11 A1 F5 A0 71 03 E0 81 48 31 01
    00000780 = 01 EB 86 11 09 18 50 22 68 46 02 F0 7F FF 20 7F
    00000790 = 00 28 63 D0 94 F8 28 30 7B 48 4B B1 41 89 41 F0
    000007A0 = 08 01 41 81 82 89 4F F6 F7 73 03 EA 02 01 81 81
    000007B0 = 94 F8 2A 30 4B B1 41 89 41 F0 01 01 41 81 82 89
    000007C0 = 4F F6 FE 73 03 EA 02 01 81 81 21 6A 4F F4 00 40
    000007D0 = 04 F0 F2 FF DD F8 10 80 B8 F1 05 0F 08 D0 06 98
    000007E0 = 05 28 05 D0 09 98 05 28 02 D0 0A 98 05 28 13 D1
    000007F0 = 38 46 04 F0 D9 FE 94 F8 29 00 40 F2 F7 51 01 F0
    00000800 = C7 FB 00 28 00 F0 B5 80 94 F8 2C 00 20 B1 28 68
    00000810 = 00 6A 01 46 02 20 88 47 B8 F1 00 0F 05 D0 06 98
    00000820 = 18 B1 09 98 08 B1 0A 98 C0 B9 94 F8 2B 00 00 28
    00000830 = 0C BF 63 6A 4F F4 00 73 01 20 04 F0 B5 FE 53 49
    00000840 = 18 46 01 F0 17 FC 00 28 00 F0 93 80 94 F8 2C 00
    00000850 = 20 B1 28 68 00 6A 01 46 01 20 88 47 28 6A 80 69
    00000860 = 01 46 00 98 88 47 00 28 00 F0 83 80 A8 68 0C 9C
    00000870 = 40 6D 21 46 02 46 38 46 90 47 A8 68 40 6D 21 46
    00000880 = 02 46 01 20 90 47 9D F8 34 00 DD F8 10 A0 DD F8
    00000890 = 24 80 DD F8 28 90 06 9C A0 B9 A8 68 C0 68 02 46
    000008A0 = 38 46 01 46 90 47 A8 68 C0 68 01 21 02 46 38 46
    000008B0 = 90 47 A8 68 C0 68 39 46 02 46 01 20 90 47 A8 68
    000008C0 = C0 68 13 E0 A8 68 80 68 02 46 38 46 01 46 90 47
    000008D0 = A8 68 80 68 01 21 02 46 38 46 90 47 A8 68 80 68
    000008E0 = 39 46 02 46 01 20 90 47 A8 68 80 68 02 46 01 20
    000008F0 = 01 46 90 47 03 98 07 28 1C BF 29 68 09 69 03 D1
    00000900 = 28 68 00 6B 01 46 13 98 88 47 28 68 05 9A 00 68
    00000910 = 51 46 03 46 02 20 98 47 28 68 07 9A 00 68 21 46
    00000920 = 03 46 04 20 98 47 28 68 08 9A 00 68 21 46 03 46
    00000930 = 08 20 98 47 28 68 00 68 41 46 01 22 03 46 4F F0
    00000940 = 80 50 98 47 28 68 0B 9A 00 68 49 46 03 46 01 20
    00000950 = 98 47 0E 98 14 90 0F 9F 15 97 10 9C 16 94 12 9B
    00000960 = 18 93 11 9D 17 95 14 A8 05 F0 F4 F8 08 48 01 27
    00000970 = 06 60 38 46 1A B0 BD E8 F0 87 C0 46 04 5D 00 00
    00000980 = 14 08 00 02 E8 8A 00 20 20 4D 00 40 EC 17 09 00
    00000990 = F0 8C 00 20 00 B5 AD F1 24 0D 03 91 02 90 00 20
    000009A0 = 04 90 02 98 05 90 00 20 06 90 05 98 38 B9 20 20
    000009B0 = 80 F3 11 88 BF F3 4F 8F BF F3 6F 8F FE E7 05 98
    000009C0 = 01 6C 00 20 01 B9 01 20 38 B9 20 20 80 F3 11 88
    000009D0 = BF F3 4F 8F BF F3 6F 8F FE E7 04 F0 21 FD 00 21
    000009E0 = 00 22 10 B9 03 98 00 B1 01 22 02 B9 01 21 39 B9
    000009F0 = 20 20 80 F3 11 88 BF F3 4F 8F BF F3 6F 8F FE E7
    00000A00 = 04 F0 0C F9 05 98 80 6B 07 90 07 98 18 B3 07 98
    00000A10 = 05 99 40 1E 88 63 05 98 00 68 18 B9 04 F0 74 FF
    00000A20 = 05 99 88 60 05 98 00 69 08 B9 01 20 00 E0 00 20
    00000A30 = 68 B9 05 98 10 30 02 F0 97 FC 40 B1 49 49 4F F0
    00000A40 = 80 50 08 60 BF F3 4F 8F BF F3 6F 8F FF E7 04 F0
    00000A50 = CF FC 01 20 83 E0 03 98 80 B9 06 99 00 20 01 B9
    00000A60 = 01 20 38 B9 20 20 80 F3 11 88 BF F3 4F 8F BF F3
    00000A70 = 6F 8F FE E7 04 F0 BC FC 00 20 70 E0 04 98 20 B9
    00000A80 = 68 46 04 F0 65 FE 01 20 04 90 04 F0 B1 FC 05 F0
    00000A90 = 27 F8 04 F0 C3 F8 05 98 90 F9 44 00 B0 F1 FF 3F
    00000AA0 = 03 D1 05 99 00 20 81 F8 44 00 05 98 90 F9 45 00
    00000AB0 = B0 F1 FF 3F 03 D1 05 99 00 20 81 F8 45 00 04 F0
    00000AC0 = 97 FC 68 46 03 A9 02 F0 A1 FA 00 28 2B D1 05 98
    00000AD0 = 04 F0 B2 FE 08 B3 05 98 00 68 40 B9 04 F0 9E F8
    00000AE0 = 05 98 80 68 01 F0 E0 F9 06 90 04 F0 81 FC 05 98
    00000AF0 = 03 99 24 30 04 F0 1A FC 05 98 02 F0 DF FA 00 F0
    00000B00 = C9 FD 00 28 7F F4 7C AF 16 49 4F F0 80 50 08 60
    00000B10 = BF F3 4F 8F BF F3 6F 8F 72 E7 05 98 02 F0 CE FA
    00000B20 = 00 F0 B8 FD 6C E7 05 98 02 F0 C8 FA 00 F0 B2 FD
    00000B30 = 05 98 04 F0 81 FE 00 28 3F F4 62 AF 06 98 60 B1
    00000B40 = 04 F0 6C F8 05 98 04 F0 DF FD 07 90 05 98 07 99
    00000B50 = 80 68 00 F0 2D FE 04 F0 4B FC 00 20 FF E7 09 B0
    00000B60 = 00 BD C0 46 04 ED 00 E0 00 B5 AD F1 24 0D 05 93
    00000B70 = 04 92 03 91 02 90 00 20 06 90 02 98 08 90 08 98
    00000B80 = 38 B9 20 20 80 F3 11 88 BF F3 4F 8F BF F3 6F 8F
    00000B90 = FE E7 03 9A 00 20 00 21 1A B9 08 9A 12 6C 02 B1
    00000BA0 = 01 21 01 B9 01 20 38 B9 20 20 80 F3 11 88 BF F3
    00000BB0 = 4F 8F BF F3 6F 8F FE E7 05 9A 00 20 00 21 02 2A
    00000BC0 = 04 D1 08 9A D2 6B 01 2A 00 D0 01 21 01 B9 01 20
    00000BD0 = 38 B9 20 20 80 F3 11 88 BF F3 4F 8F BF F3 6F 8F
    00000BE0 = FE E7 04 F0 1D FC 00 21 00 22 10 B9 04 98 00 B1
    00000BF0 = 01 22 02 B9 01 21 39 B9 20 20 80 F3 11 88 BF F3
    00000C00 = 4F 8F BF F3 6F 8F FE E7 04 F0 08 F8 08 98 08 99
    00000C10 = C0 6B 89 6B 88 42 02 D8 05 98 02 28 28 D1 08 98
    00000C20 = 03 99 05 9A 01 F0 B4 FE 07 90 08 98 40 6A 08 B9
    00000C30 = 01 20 00 E0 00 20 68 B9 08 98 24 30 02 F0 94 FB
    00000C40 = 90 B1 36 49 4F F0 80 50 08 60 BF F3 4F 8F BF F3
    00000C50 = 6F 8F 09 E0 07 98 38 B1 30 49 4F F0 80 50 08 60
    00000C60 = BF F3 4F 8F BF F3 6F 8F 04 F0 C2 FB 01 20 53 E0
    00000C70 = 04 98 18 B9 04 F0 BC FB 00 20 4D E0 06 98 20 B9
    00000C80 = 68 46 04 F0 65 FD 01 20 06 90 04 F0 B1 FB 04 F0
    00000C90 = 27 FF 03 F0 C3 FF 08 98 90 F9 44 00 B0 F1 FF 3F
    00000CA0 = 03 D1 08 99 00 20 81 F8 44 00 08 98 90 F9 45 00
    00000CB0 = B0 F1 FF 3F 03 D1 08 99 00 20 81 F8 45 00 04 F0
    00000CC0 = 97 FB 68 46 04 A9 02 F0 A1 F9 F0 B9 08 98 04 F0
    00000CD0 = 08 FD A0 B1 08 98 04 99 10 30 04 F0 27 FB 08 98
    00000CE0 = 02 F0 EC F9 00 F0 D6 FC 00 28 8D D1 0B 49 4F F0
    00000CF0 = 80 50 08 60 BF F3 4F 8F BF F3 6F 8F 84 E7 08 98
    00000D00 = 02 F0 DC F9 00 F0 C6 FC 7E E7 08 98 02 F0 D6 F9
    00000D10 = 00 F0 C0 FC 00 20 FF E7 09 B0 00 BD 04 ED 00 E0
    00000D20 = 00 B5 AD F1 24 0D 04 92 03 91 02 90 00 20 05 90
    00000D30 = 02 98 06 90 06 98 38 B9 20 20 80 F3 11 88 BF F3
    00000D40 = 4F 8F BF F3 6F 8F FE E7 03 9A 00 20 00 21 1A B9
    00000D50 = 06 9A 12 6C 02 B1 01 21 01 B9 01 20 38 B9 20 20
    00000D60 = 80 F3 11 88 BF F3 4F 8F BF F3 6F 8F FE E7 04 F0
    00000D70 = 57 FB 00 21 00 22 10 B9 04 98 00 B1 01 22 02 B9
    00000D80 = 01 21 39 B9 20 20 80 F3 11 88 BF F3 4F 8F BF F3
    00000D90 = 6F 8F FE E7 03 F0 42 FF 06 98 80 6B 07 90 07 98
    00000DA0 = 00 B3 06 98 03 99 04 F0 33 F9 07 98 06 99 40 1E
    00000DB0 = 88 63 06 98 00 69 08 B9 01 20 00 E0 00 20 68 B9
    00000DC0 = 06 98 10 30 02 F0 D0 FA 40 B1 34 49 4F F0 80 50
    00000DD0 = 08 60 BF F3 4F 8F BF F3 6F 8F FF E7 04 F0 08 FB
    00000DE0 = 01 20 58 E0 04 98 18 B9 04 F0 02 FB 00 20 52 E0
    00000DF0 = 05 98 20 B9 68 46 04 F0 AB FC 01 20 05 90 04 F0
    00000E00 = F7 FA 04 F0 6D FE 03 F0 09 FF 06 98 90 F9 44 00
    00000E10 = B0 F1 FF 3F 03 D1 06 99 00 20 81 F8 44 00 06 98
    00000E20 = 90 F9 45 00 B0 F1 FF 3F 03 D1 06 99 00 20 81 F8
    00000E30 = 45 00 04 F0 DD FA 68 46 04 A9 02 F0 E7 F8 F0 B9
    00000E40 = 06 98 04 F0 F9 FC A0 B1 06 98 04 99 24 30 04 F0
    00000E50 = 6D FA 06 98 02 F0 32 F9 00 F0 1C FC 00 28 99 D1
    00000E60 = 0E 49 4F F0 80 50 08 60 BF F3 4F 8F BF F3 6F 8F
    00000E70 = 90 E7 06 98 02 F0 22 F9 00 F0 0C FC 8A E7 06 98
    00000E80 = 02 F0 1C F9 00 F0 06 FC 06 98 04 F0 D5 FC 00 28
    00000E90 = 80 D0 00 20 FF E7 09 B0 00 BD C0 46 04 ED 00 E0
    00000EA0 = 5C 4A 2D E9 F0 4F 17 68 0E 46 4F EA 80 09 F0 0F
    00000EB0 = AD F1 14 0D 4F 44 80 F0 9F 80 7C 78 3D 78 30 0F
    00000EC0 = 93 46 4D D2 04 F0 DC FA 82 46 70 0C 27 D2 02 2C
    00000ED0 = 0C D1 05 2D 0A D2 16 F4 70 0F 07 D0 4F F0 00 78
    00000EE0 = D8 F8 24 08 00 6C 02 46 02 20 05 E0 4F F0 00 78
    00000EF0 = D8 F8 24 08 42 6C 20 46 29 46 90 47 08 F6 24 08
    00000F00 = 30 0D 39 BF D8 F8 00 00 82 68 D8 F8 00 00 42 68
    00000F10 = 29 46 20 46 90 47 D8 F8 00 00 02 68 11 E0 38 48
    00000F20 = 06 F4 40 31 B1 F5 40 3F 09 D0 06 F4 A0 21 B1 F5
    00000F30 = A0 2F 19 BF 00 68 82 6B 00 68 02 69 01 E0 00 68
    00000F40 = 42 69 20 46 29 46 90 47 DB F8 00 10 51 F8 09 00
    00000F50 = 32 0C 62 F3 17 40 41 F8 09 00 50 46 04 F0 3C FC
    00000F60 = 16 F0 E0 6A 48 D0 7F 78 01 20 06 2C A7 F1 01 07
    00000F70 = 00 FA 07 F8 1B D8 04 F0 83 FA 03 90 21 48 01 78
    00000F80 = 18 EA 01 0F 19 D1 48 EA 01 01 01 70 03 98 04 F0
    00000F90 = 23 FC 68 46 04 F0 6F FC DB F8 10 10 1A 48 01 91
    00000FA0 = C0 5D 1A 49 00 97 6A 46 03 F0 7E FB 10 B9 4F F0
    00000FB0 = FF 30 22 E0 04 F0 64 FA 03 90 4F F0 00 78 14 48
    00000FC0 = D8 F8 24 28 C6 F3 02 61 53 6A 42 5C 29 46 20 46
    00000FD0 = 98 47 D8 F8 24 08 42 6B 29 46 20 46 90 47 DB F8
    00000FE0 = 00 10 51 F8 09 00 20 F0 E0 60 4A EA 00 07 03 98
    00000FF0 = 41 F8 09 70 04 F0 F0 FB 00 20 05 B0 BD E8 F0 8F
    00001000 = 24 08 00 02 70 8D 00 20 02 5E 00 00 4D 42 00 00
    00001010 = FC 5D 00 00 C0 5D 00 00 00 B5 AD F1 14 0D 00 90
    00001020 = 00 20 04 90 04 F0 5C FD 54 48 00 68 08 B9 01 F0
    00001030 = 6D FD 53 48 00 99 00 68 08 42 40 F0 87 80 00 98
    00001040 = E0 B1 00 98 08 30 00 90 00 98 10 F0 07 0F 15 D0
    00001050 = 00 98 00 99 00 F0 07 00 09 1A 08 31 00 91 00 99
    00001060 = 00 20 11 F0 07 0F 00 D1 01 20 38 B9 20 20 80 F3
    00001070 = 11 88 BF F3 4F 8F BF F3 6F 8F FE E7 00 98 00 28
    00001080 = 64 D0 40 48 00 99 00 68 88 42 5F D3 3E 48 02 90
    00001090 = 3D 48 00 68 01 90 04 E0 01 98 02 90 01 98 00 68
    000010A0 = 01 90 01 99 00 98 49 68 88 42 03 D9 01 98 00 68
    000010B0 = 00 28 F1 D1 31 48 01 99 00 68 88 42 46 D0 02 98
    000010C0 = 00 68 08 30 04 90 01 98 02 99 00 68 08 60 01 98
    000010D0 = 00 99 40 68 40 1A 10 28 1E D9 00 99 01 98 40 18
    000010E0 = 03 90 03 99 00 20 11 F0 07 0F 00 D1 01 20 38 B9
    000010F0 = 20 20 80 F3 11 88 BF F3 4F 8F BF F3 6F 8F FE E7
    00001100 = 01 98 00 9A 03 99 40 68 80 1A 48 60 00 98 01 99
    00001110 = 48 60 03 98 02 F0 80 F8 01 98 1A 49 42 68 08 68
    00001120 = 80 1A 08 60 19 48 17 49 00 68 09 68 88 42 03 D9
    00001130 = 14 48 16 49 00 68 08 60 01 99 11 48 4A 68 00 68
    00001140 = 10 43 48 60 01 98 00 21 01 60 FF E7 00 F0 A2 FA
    00001150 = 04 98 08 B9 03 F0 77 FA 04 99 00 20 11 F0 07 0F
    00001160 = 00 D1 01 20 38 B9 20 20 80 F3 11 88 BF F3 4F 8F
    00001170 = BF F3 6F 8F FE E7 04 98 05 B0 00 BD 38 8D 00 20
    00001180 = 44 8D 00 20 3C 8D 00 20 DC 82 00 20 40 8D 00 20
    00001190 = 00 B5 AD F1 24 0D 9F E0 01 98 00 28 00 F1 9C 80
    000011A0 = 03 98 04 90 04 98 40 69 08 B9 01 20 00 E0 00 20
    000011B0 = 18 B9 04 98 00 1D 03 F0 9F FD 05 A8 04 F0 9C F8
    000011C0 = 07 90 6D E0 04 99 91 F8 28 00 40 F0 01 00 81 F8
    000011D0 = 28 00 04 98 02 99 07 9A 02 9B 80 69 09 18 04 98
    000011E0 = 02 F0 DA FE 00 28 77 D0 04 98 00 6A 01 46 04 98
    000011F0 = 88 47 04 98 90 F8 28 00 C0 08 6D D3 00 20 00 90
    00001200 = 04 98 02 9A 80 69 12 18 04 98 00 21 00 23 02 F0
    00001210 = CB FC 06 90 06 98 00 28 5E D1 20 20 80 F3 11 88
    00001220 = BF F3 4F 8F BF F3 6F 8F FE E7 04 99 91 F8 28 00
    00001230 = 20 F0 01 00 81 F8 28 00 4E E0 04 99 91 F8 28 00
    00001240 = 40 F0 01 00 81 F8 28 00 02 98 04 99 88 61 04 98
    00001250 = 81 69 00 20 01 B1 01 20 38 B9 20 20 80 F3 11 88
    00001260 = BF F3 4F 8F BF F3 6F 8F FE E7 04 98 07 99 07 9A
    00001270 = 07 9B 80 69 09 18 04 98 02 F0 8E FE 2C E0 04 98
    00001280 = 90 F8 28 00 80 08 03 D2 04 98 02 F0 4D FA 23 E0
    00001290 = 04 99 91 F8 28 00 20 F0 01 00 81 F8 28 00 1B E0
    000012A0 = 01 98 09 28 18 D8 02 A1 51 F8 20 00 87 46 C0 46
    000012B0 = C5 11 00 00 C5 11 00 00 C5 11 00 00 2B 12 00 00
    000012C0 = 3B 12 00 00 7F 12 00 00 C5 11 00 00 C5 11 00 00
    000012D0 = 2B 12 00 00 3B 12 00 00 05 48 00 68 01 A9 00 22
    000012E0 = FF F7 1E FD 00 28 7F F4 57 AF 09 B0 00 BD C0 46
    000012F0 = 58 8D 00 20 10 B5 AD F1 18 0D 00 20 02 90 41 48
    00001300 = 00 68 00 28 72 D1 40 48 00 68 40 1C 03 90 3E 49
    00001310 = 03 98 08 60 03 98 F8 B9 3C 48 00 68 00 68 08 B9
    00001320 = 01 20 00 E0 00 20 38 B9 20 20 80 F3 11 88 BF F3
    00001330 = 4F 8F BF F3 6F 8F FE E7 34 48 35 49 33 4B 00 68
    00001340 = 33 4A 04 90 09 68 04 98 19 60 32 49 10 60 08 68
    00001350 = 40 1C 08 60 03 F0 7A FE 2F 48 03 99 00 68 88 42
    00001360 = 48 D8 2A 48 00 68 00 68 08 B9 01 20 00 E0 00 20
    00001370 = 20 B1 29 49 4F F0 FF 30 08 60 3B E0 23 48 00 68
    00001380 = C0 68 C0 68 00 90 00 98 40 68 01 90 03 99 01 98
    00001390 = 88 42 03 D9 01 98 20 49 08 60 2B E0 00 98 00 1D
    000013A0 = 03 F0 AA FC 00 98 80 6A 18 B1 00 98 18 30 03 F0
    000013B0 = A3 FC 00 98 19 4A C4 6A 13 68 00 99 01 20 A0 40
    000013C0 = 18 43 10 60 16 4B CA 6A 00 99 90 00 09 1D 00 EB
    000013D0 = 02 10 C0 18 03 F0 76 FE 12 48 00 99 00 68 C9 6A
    000013E0 = C0 6A 88 42 BD D8 01 20 02 90 BA E7 0E 49 08 68
    000013F0 = 40 1C 08 60 0D 48 00 68 08 B1 01 20 02 90 02 98
    00001400 = 06 B0 10 BD A8 8C 00 20 84 8C 00 20 C4 82 00 20
    00001410 = C8 82 00 20 98 8C 00 20 A0 8C 00 20 88 8C 00 20
    00001420 = 00 81 00 20 78 8C 00 20 90 8C 00 20 94 8C 00 20
    00001430 = 00 B5 AD F1 2C 0D 05 93 04 92 03 91 02 90 00 20
    00001440 = 07 90 00 20 09 90 03 98 08 B9 44 48 00 E0 03 98
    00001450 = 08 90 34 20 FF F7 E0 FD 07 90 07 98 08 B9 0C 20
    00001460 = 7A E0 08 98 00 69 00 21 08 B9 00 20 00 E0 01 20
    00001470 = 00 B1 01 21 07 98 01 74 07 99 04 98 48 61 05 98
    00001480 = 07 99 88 61 07 98 00 21 C1 60 07 98 00 21 81 60
    00001490 = 07 98 00 21 C1 61 07 98 00 21 01 62 08 98 07 99
    000014A0 = 00 68 48 60 07 98 00 21 81 62 07 98 00 21 01 63
    000014B0 = 07 98 C1 62 03 98 00 69 70 B9 01 20 00 21 03 22
    000014C0 = 02 F0 8E FE 07 99 88 60 07 98 80 68 20 B9 07 98
    000014D0 = 02 F0 2A F9 0C 20 3F E0 03 F0 A2 FF 00 21 01 28
    000014E0 = 01 D1 00 20 00 E0 01 20 00 B1 01 21 8D F8 28 10
    000014F0 = 9D F8 28 00 08 B1 04 F0 F3 FA 08 98 00 68 00 90
    00001500 = 07 98 17 49 01 90 08 98 07 9B 09 68 00 89 82 10
    00001510 = 14 48 02 F0 03 FD 06 90 06 98 01 28 05 D1 07 98
    00001520 = 07 99 00 68 03 F0 D8 FF 0D E0 07 98 80 68 18 B1
    00001530 = 07 98 80 68 04 F0 FA F8 07 98 02 F0 F5 F8 00 20
    00001540 = 07 90 0C 20 09 90 07 98 02 99 08 60 9D F8 28 00
    00001550 = 08 B1 00 F0 9F F8 09 98 0B B0 00 BD 24 8D 00 20
    00001560 = 10 5E 00 00 95 58 00 00 00 B5 AD F1 1C 0D 03 93
    00001570 = 02 92 01 91 00 90 0A 98 02 99 00 6B 8A 00 A5 21
    00001580 = 02 F0 93 FC 0A 99 02 98 09 6B 40 1E 01 EB 80 01
    00001590 = 04 91 04 98 20 F0 07 00 04 90 04 99 00 20 11 F0
    000015A0 = 07 0F 00 D1 01 20 38 B9 20 20 80 F3 11 88 BF F3
    000015B0 = 4F 8F BF F3 6F 8F FE E7 01 98 E0 B1 00 20 05 90
    000015C0 = 05 98 0C 28 12 D2 01 99 05 9B 05 9A 0A 98 59 5C
    000015D0 = 80 18 80 F8 34 10 01 98 05 99 08 5C 00 B9 05 E0
    000015E0 = 05 98 40 1C 05 90 05 98 0C 28 EC D3 0A 99 00 20
    000015F0 = 81 F8 3F 00 03 E0 0A 99 00 20 81 F8 34 00 08 98
    00001600 = 0A 28 01 D3 09 20 08 90 08 98 0A 99 C8 62 08 98
    00001610 = 0A 99 88 64 0A 98 00 21 C1 64 0A 98 00 1D 04 F0
    00001620 = 57 FA 0A 98 18 30 04 F0 53 FA 0A 98 0A 99 08 61
    00001630 = 08 98 0A 99 C0 F1 0A 00 88 61 0A 98 0A 99 48 62
    00001640 = 0A 98 00 21 01 65 00 20 05 90 05 98 58 B9 05 9A
    00001650 = 0A 98 00 21 00 EB 82 00 41 65 05 98 40 1C 05 90
    00001660 = 05 98 00 28 F3 D0 0A 98 00 21 81 65 0A 99 00 20
    00001670 = 81 F8 5C 00 03 9A 04 98 00 99 03 F0 45 F8 0A 99
    00001680 = 08 60 09 98 18 B1 0A 98 09 99 08 60 FF E7 07 B0
    00001690 = 00 BD FE E7 1F B5 00 20 00 90 00 20 01 90 3A 48
    000016A0 = 00 68 38 B9 20 20 80 F3 11 88 BF F3 4F 8F BF F3
    000016B0 = 6F 8F FE E7 03 F0 B2 FA 33 49 08 68 40 1E 08 60
    000016C0 = 31 48 00 68 00 28 5A D1 30 48 00 68 00 28 56 D0
    000016D0 = 28 E0 2F 48 00 68 C0 68 00 90 00 98 18 30 03 F0
    000016E0 = 0B FB 00 98 00 1D 03 F0 07 FB 00 98 29 4A C4 6A
    000016F0 = 00 99 13 68 01 20 A0 40 18 43 10 60 26 4B CA 6A
    00001700 = 00 99 90 00 00 EB 02 10 09 1D C0 18 03 F0 DA FC
    00001710 = 22 48 00 99 00 68 C9 6A C0 6A 88 42 02 D8 20 49
    00001720 = 01 20 08 60 1F 48 00 68 08 B9 01 20 00 E0 00 20
    00001730 = 00 28 CE D0 00 98 08 B1 03 F0 88 FC 1A 48 00 68
    00001740 = 02 90 02 98 70 B1 FF F7 D5 FD 10 B1 14 49 01 20
    00001750 = 08 60 02 98 40 1E 02 90 02 98 00 28 F3 D1 12 49
    00001760 = 00 20 08 60 0E 48 00 68 48 B1 01 20 01 90 0F 49
    00001770 = 4F F0 80 50 08 60 BF F3 4F 8F BF F3 6F 8F 03 F0
    00001780 = 37 FE 01 98 00 90 1F BD A8 8C 00 20 80 8C 00 20
    00001790 = 94 82 00 20 88 8C 00 20 00 81 00 20 78 8C 00 20
    000017A0 = 94 8C 00 20 88 82 00 20 90 8C 00 20 04 ED 00 E0
    000017B0 = 10 B5 AD F1 18 0D 01 91 00 90 00 98 02 90 01 20
    000017C0 = 05 90 00 98 00 28 74 D0 02 98 C0 6C 38 B9 20 20
    000017D0 = 80 F3 11 88 BF F3 4F 8F BF F3 6F 8F FE E7 02 99
    000017E0 = 01 98 89 6C 88 42 02 D9 01 98 04 90 02 E0 02 98
    000017F0 = 80 6C 04 90 02 99 04 98 C9 6A 88 42 59 D0 02 98
    00001800 = C0 6C 01 28 55 D1 2C 48 02 9A 01 68 00 20 91 42
    00001810 = 00 D0 01 20 38 B9 20 20 80 F3 11 88 BF F3 4F 8F
    00001820 = BF F3 6F 8F FE E7 02 98 C0 6A 03 90 02 99 04 98
    00001830 = C8 62 02 98 80 69 00 08 04 D2 04 98 02 99 C0 F1
    00001840 = 0A 00 88 61 02 98 03 9B 1C 4A 41 69 98 00 00 EB
    00001850 = 03 10 80 18 88 42 01 D1 01 20 00 E0 00 20 40 B3
    00001860 = 02 98 00 1D 03 F0 48 FA 78 B9 02 98 13 49 C2 6A
    00001870 = 90 00 00 EB 02 10 08 58 38 B9 02 98 10 4A C3 6A
    00001880 = 11 68 01 20 98 40 81 43 11 60 02 98 0C 4A C4 6A
    00001890 = 13 68 02 99 01 20 A0 40 18 43 10 60 07 4B CA 6A
    000018A0 = 02 99 90 00 09 1D 00 EB 02 10 C0 18 03 F0 0A FC
    000018B0 = FF E7 06 B0 10 BD C0 46 78 8C 00 20 00 81 00 20
    000018C0 = 88 8C 00 20 0E B5 01 91 00 90 01 98 02 F0 8A FE
    000018D0 = 02 90 5D E0 36 48 00 78 A0 B1 01 20 03 F0 40 FD
    000018E0 = 33 48 00 78 70 B1 33 48 00 78 28 B1 02 98 4F F4
    000018F0 = FA 31 B1 FB F0 F0 59 E0 02 98 4F F4 00 41 B1 FB
    00001900 = F0 F0 53 E0 2C 48 02 99 00 68 B0 FB F1 F0 4D E0
    00001910 = 2A 48 00 78 A0 B1 02 20 03 F0 22 FD 27 48 00 78
    00001920 = 70 B1 24 48 00 78 28 B1 02 98 4F F4 FA 31 B1 FB
    00001930 = F0 F0 3B E0 02 98 4F F4 00 41 B1 FB F0 F0 35 E0
    00001940 = 1F 48 02 99 00 68 B0 FB F1 F0 2F E0 02 98 42 F2
    00001950 = 10 71 B1 FB F0 F0 29 E0 16 48 00 78 28 B1 02 98
    00001960 = 4F F4 FA 31 B1 FB F0 F0 20 E0 02 98 4F F4 00 41
    00001970 = B1 FB F0 F0 1A E0 00 F0 27 F9 02 99 B0 FB F1 F0
    00001980 = 14 E0 02 99 0F 48 B0 FB F1 F0 0F E0 00 20 0D E0
    00001990 = 00 98 00 28 9E D0 40 1E D8 D0 40 1E DC D0 40 1E
    000019A0 = E9 D0 40 1E ED D0 40 1E B2 D0 EF E7 0E BD C0 46
    000019B0 = 00 89 20 42 3C 86 20 42 D8 82 00 20 04 89 20 42
    000019C0 = D4 82 00 20 00 36 6E 01 00 B5 AD F1 24 0D 03 93
    000019D0 = 02 92 01 91 00 90 00 98 06 90 06 98 38 B9 20 20
    000019E0 = 80 F3 11 88 BF F3 4F 8F BF F3 6F 8F FE E7 01 9A
    000019F0 = 00 20 00 21 1A B9 06 9A 12 6C 02 B1 01 21 01 B9
    00001A00 = 01 20 38 B9 20 20 80 F3 11 88 BF F3 4F 8F BF F3
    00001A10 = 6F 8F FE E7 03 9A 00 20 00 21 02 2A 04 D1 06 9A
    00001A20 = D2 6B 01 2A 00 D0 01 21 01 B9 01 20 38 B9 20 20
    00001A30 = 80 F3 11 88 BF F3 4F 8F BF F3 6F 8F FE E7 02 F0
    00001A40 = 5D FB 20 20 EF F3 11 81 80 F3 11 88 05 91 BF F3
    00001A50 = 4F 8F BF F3 6F 8F 06 98 06 99 C0 6B 89 6B 88 42
    00001A60 = 02 D8 03 98 02 28 29 D1 06 98 90 F9 45 00 8D F8
    00001A70 = 1C 00 01 99 03 9A 06 98 00 F0 8A FF 9D F9 1C 00
    00001A80 = B0 F1 FF 3F 11 D1 06 98 40 6A 08 B9 01 20 00 E0
    00001A90 = 00 20 80 B9 06 98 24 30 01 F0 66 FC 58 B1 02 98
    00001AA0 = 48 B1 02 98 01 21 01 60 05 E0 9D F9 1C 00 06 99
    00001AB0 = 40 1C 81 F8 45 00 01 20 04 90 01 E0 00 20 04 90
    00001AC0 = 05 98 80 F3 11 88 04 98 09 B0 00 BD 0E B5 00 90
    00001AD0 = 03 F0 A4 F8 00 98 10 B9 33 48 00 68 00 E0 00 98
    00001AE0 = 01 90 01 98 00 1D 03 F0 07 F9 78 B9 01 98 2F 49
    00001AF0 = C2 6A 90 00 00 EB 02 10 08 58 38 B9 01 98 2C 4A
    00001B00 = C3 6A 11 68 01 20 98 40 81 43 11 60 01 98 80 6A
    00001B10 = 18 B1 01 98 18 30 03 F0 EF F8 01 99 25 48 09 1D
    00001B20 = 03 F0 D0 FA 01 98 90 F8 5C 00 01 28 03 D1 01 99
    00001B30 = 00 20 81 F8 5C 00 03 F0 5B FC 1F 48 00 68 28 B1
    00001B40 = 03 F0 6C F8 03 F0 82 FA 03 F0 52 FC 16 48 01 99
    00001B50 = 00 68 88 42 26 D1 18 48 00 68 B0 B1 17 48 01 68
    00001B60 = 00 20 01 B9 01 20 38 B9 20 20 80 F3 11 88 BF F3
    00001B70 = 4F 8F BF F3 6F 8F FE E7 11 49 4F F0 80 50 08 60
    00001B80 = BF F3 4F 8F BF F3 6F 8F 0C E0 0E 48 09 49 00 68
    00001B90 = 09 68 88 42 03 D1 04 49 00 20 08 60 02 E0 00 F0
    00001BA0 = 25 FC FF E7 0E BD C0 46 78 8C 00 20 00 81 00 20
    00001BB0 = 88 8C 00 20 9C 82 00 20 8C 8C 00 20 A8 8C 00 20
    00001BC0 = 04 ED 00 E0 80 8C 00 20 00 B5 AD F1 1C 0D 03 20
    00001BD0 = 00 21 03 AA 05 AB 01 F0 F5 FD 02 F0 E7 F8 02 90
    00001BE0 = 03 98 08 B9 02 98 63 E0 32 48 00 68 6F F3 9F 20
    00001BF0 = AD F8 18 00 BD F9 18 00 80 0A 05 D3 BD F9 18 00
    00001C00 = 40 F4 7E 40 AD F8 18 00 BD F9 18 00 08 B9 02 98
    00001C10 = 4E E0 29 49 02 98 81 42 10 D1 28 48 00 78 30 B1
    00001C20 = 05 98 C0 6B 00 90 05 98 40 6A 01 90 16 E0 05 98
    00001C30 = C0 69 00 90 05 98 40 68 01 90 0F E0 1F 48 00 78
    00001C40 = 30 B1 05 98 80 6B 00 90 05 98 00 6A 01 90 05 E0
    00001C50 = 05 98 80 69 00 90 05 98 00 68 01 90 01 98 DD ED
    00001C60 = 00 0A C0 F5 40 70 00 EE 10 0A B8 EE C0 1A B7 EE
    00001C70 = 00 0A 01 EE 20 0A DD ED 00 0A BD F9 18 00 01 EE
    00001C80 = 10 0A B8 EE C1 1A 61 EE 20 0A 80 EE 80 0A 02 98
    00001C90 = 00 EE 90 0A B7 EE 00 1A F8 EE 60 0A 31 EE 40 0A
    00001CA0 = 80 EE 80 0A BC EE C0 0A 10 EE 10 0A 04 90 04 98
    00001CB0 = 07 B0 00 BD 04 04 01 40 00 6C DC 02 D8 80 20 42
    00001CC0 = 0E B5 00 90 02 F0 AA FF 00 98 10 B9 30 48 00 68
    00001CD0 = 00 E0 00 98 01 90 01 98 00 1D 03 F0 0D F8 78 B9
    00001CE0 = 01 98 2C 49 C2 6A 90 00 00 EB 02 10 08 58 38 B9
    00001CF0 = 01 98 29 4A C3 6A 11 68 01 20 98 40 81 43 11 60
    00001D00 = 01 98 80 6A 18 B1 01 98 18 30 02 F0 F5 FF 23 49
    00001D10 = 08 68 40 1C 08 60 1E 48 01 99 00 68 88 42 09 D1
    00001D20 = 01 99 1F 48 09 1D 03 F0 CD F9 1E 49 08 68 40 1C
    00001D30 = 08 60 08 E0 1C 49 08 68 40 1E 08 60 01 98 03 F0
    00001D40 = 59 FE 03 F0 83 F9 01 98 03 F0 EC FD 03 F0 50 FB
    00001D50 = 16 48 00 68 D8 B1 0E 48 01 99 00 68 88 42 16 D1
    00001D60 = 13 48 01 68 00 20 01 B9 01 20 38 B9 20 20 80 F3
    00001D70 = 11 88 BF F3 4F 8F BF F3 6F 8F FE E7 0D 49 4F F0
    00001D80 = 80 50 08 60 BF F3 4F 8F BF F3 6F 8F FF E7 0E BD
    00001D90 = 78 8C 00 20 00 81 00 20 88 8C 00 20 9C 8C 00 20
    00001DA0 = B0 82 00 20 7C 8C 00 20 80 8C 00 20 8C 8C 00 20
    00001DB0 = A8 8C 00 20 04 ED 00 E0 00 B5 AD F1 1C 0D 01 91
    00001DC0 = 00 90 00 98 04 90 04 98 38 B9 20 20 80 F3 11 88
    00001DD0 = BF F3 4F 8F BF F3 6F 8F FE E7 04 98 01 6C 00 20
    00001DE0 = 01 B9 01 20 38 B9 20 20 80 F3 11 88 BF F3 4F 8F
    00001DF0 = BF F3 6F 8F FE E7 04 98 02 68 00 21 00 20 1A B9
    00001E00 = 04 9A 92 68 02 B1 01 21 01 B9 01 20 38 B9 20 20
    00001E10 = 80 F3 11 88 BF F3 4F 8F BF F3 6F 8F FE E7 02 F0
    00001E20 = 6D F9 20 20 EF F3 11 81 80 F3 11 88 03 91 BF F3
    00001E30 = 4F 8F BF F3 6F 8F 04 98 80 6B 05 90 04 98 05 99
    00001E40 = C0 6B 88 42 28 D9 04 98 90 F9 45 00 8D F8 18 00
    00001E50 = 04 99 05 98 40 1C 88 63 9D F9 18 00 B0 F1 FF 3F
    00001E60 = 11 D1 04 98 40 6A 08 B9 01 20 00 E0 00 20 80 B9
    00001E70 = 04 98 24 30 01 F0 78 FA 58 B1 01 98 48 B1 01 98
    00001E80 = 01 21 01 60 05 E0 9D F9 18 00 04 99 40 1C 81 F8
    00001E90 = 45 00 01 20 02 90 01 E0 00 20 02 90 03 98 80 F3
    00001EA0 = 11 88 02 98 07 B0 00 BD 1F B5 00 90 00 98 01 90
    00001EB0 = 00 20 02 90 00 98 00 28 61 D0 32 48 01 99 00 68
    00001EC0 = C9 6A C0 6A 88 42 50 D9 01 98 80 69 00 08 06 D2
    00001ED0 = 2C 48 00 68 01 99 C0 6A C0 F1 0A 00 88 61 01 99
    00001EE0 = 01 98 CB 6A 28 4A 41 69 98 00 00 EB 03 10 80 18
    00001EF0 = 88 42 01 D1 01 20 00 E0 00 20 00 28 2D D0 01 98
    00001F00 = 00 1D 02 F0 F9 FE 78 B9 01 98 1F 49 C2 6A 90 00
    00001F10 = 00 EB 02 10 08 58 38 B9 01 98 1C 4A C3 6A 11 68
    00001F20 = 01 20 98 40 81 43 11 60 16 48 00 68 01 99 C0 6A
    00001F30 = C8 62 16 4A 01 98 13 68 C4 6A 01 99 01 20 A0 40
    00001F40 = 18 43 11 4B 10 60 CA 6A 01 99 90 00 00 EB 02 10
    00001F50 = 09 1D C0 18 03 F0 B6 F8 04 E0 0A 48 00 68 01 99
    00001F60 = C0 6A C8 62 01 20 02 90 09 E0 06 48 01 99 00 68
    00001F70 = 89 6C C0 6A 88 42 02 D9 01 20 02 90 FF E7 02 98
    00001F80 = 00 90 1F BD 78 8C 00 20 00 81 00 20 88 8C 00 20
    00001F90 = 00 B5 AD F1 14 0D 00 91 8D F8 0C 00 2D 49 46 F6
    00001FA0 = 5A 10 08 60 03 F0 7C FD 00 F0 01 00 02 90 01 20
    00001FB0 = 03 F0 D2 FC 00 F0 AC F9 01 90 00 98 00 21 08 B9
    00001FC0 = 00 20 00 E0 01 20 00 B1 01 21 8D F8 0D 10 22 49
    00001FD0 = 01 20 08 70 21 48 21 4A 01 99 00 68 20 F4 E0 00
    00001FE0 = 01 43 11 60 9D F8 0C 00 18 B1 1D 49 01 20 08 70
    00001FF0 = 02 E0 1B 49 00 20 08 70 1A 49 01 20 08 70 09 E0
    00002000 = 9D F8 0D 00 18 B1 00 98 40 1E 00 90 06 D0 16 49
    00002010 = 01 20 08 70 15 48 00 78 00 28 F1 D1 9D F8 0C 00

    I have seen in another post, that I can trigger the BSL also by erasing main memory and test scripter after that.

    However, how can I do this using CSS with Jlink? 

    I can run the erase command in JLink commander, Erase internal flash of selected device, but I am worried it would also delete the BSL section

    Hopefully you can help me with this

    Regards

  • Adrian, you've gone way beyond what I know anything about.  I've never worked with MSP432 parts, and know very little about them.  If you are invoking BSL in firmware, I don't know why that wouldn't work with Scripter.  I assume you have TX and RX connected correctly, but you might try reversing them, just in case.  And your Scripter version is pretty old, although I don't know if that makes any difference.  Otherwise, I don't know what to suggest.  Maybe the TI guys will have some ideas about what to try.

  • Sorry, I was wrong in the previous post about the scripter version, I am using the latest one (3.4.0.1)

    RX and TX are connected properly.

    Let's see if some from TI can help me here

    Thanks

  • Hello Adrian,

    Did the link provided by George help?

    Adrian Santos said:
    However, how can I do this using CSS with Jlink? 

    I haven't tried this with JLink, but follow the steps under section 8.1 Factory Reset Without Password in this Users Guide to perform Factory Reset which will mass erase the flash.

    Thanks,

    Sai

  • Hi Sai

    The link provided by George was really helpful. I am now able to invoque BSL from software. 

    I am now using the MSPEXP432P401R launchpad instead of my custom board. 

    The device replies with an ACK (0x00) to the first message (0xFF), which indicates the BSL is running. But it does not reply to any command afterwards.

    I am posting one example below (I have tested other commands with no success either).

    After sending the command TX BSL VERSION, the device does not reply. The data sent from bsl-scripter is correct as you can see in this screenshot:

    I am using the following code to invoque BSL:

       /* Make sure our MPU settings don't cause problems in the BSL. */
          MPU_disableModule();
    
      /* The BSL does not initialize some hardware it uses. It requires
       * the Systick (to determine UART baud rate) and Timer A0 (to set
       * the 10-second timeout). Prepare these for use by BSL. */
      SysTick_disableInterrupt();
      SysTick_disableModule();
      Timer_A_stopTimer(TIMER_A0_BASE);
    
    
      /* Need to reset UART A0 for firmware update. Be sure to make the
       * corresponding GPIOs input pins. */
      UART_disableModule(EUSCI_A0_BASE);
      GPIO_setAsInputPin(GPIO_PORT_P1, GPIO_PIN2);
      GPIO_setAsInputPin(GPIO_PORT_P1, GPIO_PIN3);
    
      Interrupt_disableMaster();
      for (int i=0; i < 240; i++) NVIC->IP[i] = 0; // This is critical! However SLAU622H does not mention this for SW invocation.
      NVIC->ICER[0] = 0xFFFF;
      NVIC->ICER[1] = 0xFFFF;
      NVIC->ICPR[0] = 0xFFFF;
      NVIC->ICPR[1] = 0xFFFF;
    
      BSL_INVOKE(BSL_UART_INTERFACE);

    It would be great to get some support on this from TI, because this feature is essential for our product, and if we are not able to make it work, we would have to switch to a different MCU manufacturer
    This issue has been open for several weeks and George is the only one who has replied

    Thanks

  • Adrian, I'm sorry I wasn't able to get you to a solution.  And I see this thread has been marked "TI thinks resolved."  Sure fooled me.

    I would just say that I would be surprised if the Launchpad works for BSL.  Maybe it's different for MPS432, but that was generally unsuccessful for MSP430 parts.  There was an issue early on with parity not getting through.  I can't tell from your scope capture, but are you sure the parity bits actually arrive at the Rx pin on the chip?  Well, I need to stop commenting on parts I've never used.

    Anyway, if you ever get a solution to allow use of FTDI adapters, I hope you will post it here.  We have solutions for the older MSP430 parts that use BSLDEMO, and for the newer ones that use Scripter.  It would be nice to have a solution for the MPS432 parts. 

  • Hello Adrian,

    Adrian Santos said:
    After sending the command TX BSL VERSION, the device does not reply. The data sent from bsl-scripter is correct as you can see in this screenshot

    How are you establishing communication between the MSP432P4 MCU and the PC (on which the BSL Scripter is running)? Through the BSL Rocket or FTDI chip or something else?

    Thanks,

    Sai 

  • I am using a standard FTDI chip, connected directly to the BSL UART
    I am setting parity option on the bsl-scripter
    As you can see in the logic analyzer screenshot I attached to my previous post, the bits sent from the PC using BSL scripter are correct, they follow the protocol stated in the BSL manual, however, the BSL is not responding to any command, only to the connection start message (0xFF), to which it answers correctly (0x00)
    This test has been done on a brand new MSPEXP432P401R , as well as on a custom board


  • Hi George,

    Your input has been really helpful, it is much appreciated.

    Yes, the parity bits are arriving to the chip. The logic analyzer capture is decoded with even parity setting.

    George Hug said:
    Anyway, if you ever get a solution to allow use of FTDI adapters, I hope you will post it here. 

    Absolutely, hope we are able to solve this

  • Hello Adrian,

    One more question, if you replace the FTDI chip with BSL Rocket in your setup, does the communication work?

    Thanks,

    Sai 

  • Hi Sai,

    We don't have any  BSL rocket, if you want to send us a sample we can try it, and return it after we do the test.

    What would the difference be between using BLS rocket VS standard FTDI chip with Partity set on bls-scripter?

    Regards

  • Just a couple thoughts.  Are you sending a password before the TX BSL VERSION command?  That's a protected command I think.

    Also, the FTDI is set to output 3.3V on Tx?

  • Hi Adrian,

    I am sorry if I miss this information in the thread, have you got the device programmed at the moment? The factory BSL of MSP432 will be invoked by the bootcode when the interrupt vector area is empty (address 0x0-0x100). In case this area is already programmed, the BSL would not be invoked during reset cycle.

    One option to enable hardware invoke is to configure a pin, and set the polarity invocation on it. Let say you use the P3.0 with high polarity. When high polarity is applied during reset, bootcode will read this and it will execute the bootloader, instead of the program that has been programmed into the device. you can refer to the section 2.3 under this user's guide: http://www.ti.com/lit/ug/slau690f/slau690f.pdf or section 4.8.6.2.1 (BSL_PARAMS) under http://www.ti.com/lit/ug/slau356i/slau356i.pdf

  • Hi,

    I am doing software invocation of the BSL, not hardware invocation.  You can see the code I am using above.

    I think invocation works correctly  because I get a response to the connection from the BSL, which I wouldn't get if the BSL wasn't running. But then, it doesn't reply tl any command

  • Adrian, it's been a week since your last post, and it appears you aren't really getting any help from TI.  Perhaps you should do what you stated in an earlier post and use another manufacturer's part.  As you know, similar chips from other sources are routinely flashed with FTDI adapters.  I've never understood why, but TI seems willing to be completely uncompetitive in this area, at least for MSP430 and MSP432 parts.  So maybe you need to go with something else.

  • Hi Adrian,

    Thank you for your patience. I just wanted to leave a note to let you know that we have not forgotten about you and are continuing to find a solution to this issue. 

    Thanks,

    Seong

  • That's great news.


    I hope you are able to find a solution soon.

    As I said in a previous post, if you can send us a BSL Rocket to test wether it makes any difference, I will test using it.

    Thanks

  • Adrian,

    The BSL Rocket is actually a collaboration between Olimex LTD and TI. We do not sell them, but it can be ordered from Olimex here. Unfortunately, I do not have a spare board I can ship to you. 

    BR,

    Seong 

  • Adrian,

    Thank you for your patience. Please bear with us as we try to provide feedback by the end of this week at the latest. 

    Were you able to get a BSL Rocket?

    BR,

    Seong

  • Hi,

    No, we were not able to get one

  • Hi Adrian,

    apologize for the late response. I tried to test your case using MSP-EXP432P401R Launchpad.

    I run very simple application in CCS like this:


    #define BSL_PARAM          0xFC48FFFF // I2C slave address = 0x48, Interface selection = Auto
    #define BSL_API_TABLE_ADDR 0x00202000 // Address of BSL API table
    #define BSL_ENTRY_FUNCTION (*((uint32_t *)BSL_API_TABLE_ADDR))
    int i=0;


    void main(void)
    {
        volatile uint32_t i;

        WDTCTL = WDTPW | WDTHOLD;                    /* Stop watchdog timer */

        // The following code toggles P1.0 port
        P1DIR |= BIT0;                               /* Configure P1.0 as output */

        while(1)
        {
            P1OUT ^= BIT0;                           /* Toggle P1.0 */
            //for(i=10000; i>0; i--);                  /* Delay */

            __disable_interrupt();

            // Setup interrupt priorities into 0x00 before entering bootloader
            for ( i=0; i < 240; i++)
            {
                NVIC->IP[i] = 0;
            }

            NVIC->ICER[0] = 0xFFFF;
            NVIC->ICPR[0] = 0xFFFF;
            NVIC->ICER[1] = 0xFFFF;
            NVIC->ICPR[1] = 0xFFFF;
            // Call the BSL with given BSL parameters
            ((void (*)())BSL_ENTRY_FUNCTION)((uint32_t)BSL_PARAM);

        }
    }

    when then using the Application COM Port from Launchpad, i communicate directly using BSL Scripter 3.4.0.1 with the script:

    MODE P4xx UART 9600 COM10 PARITY
    TX_BSL_VERSION_32
    RX_PASSWORD_32 .\pass256_wrong.txt
    RX_PASSWORD_32 .\pass256_default.txt
    TX_BSL_VERSION_32

    Could you please try this very simple test and see if it is working? if it is , that means there is some initialization conflict between your application and BSL application.

    Looking at the snippet you had:

      /* Need to reset UART A0 for firmware update. Be sure to make the
       * corresponding GPIOs input pins. */
      UART_disableModule(EUSCI_A0_BASE);
      GPIO_setAsInputPin(GPIO_PORT_P1, GPIO_PIN2);
      GPIO_setAsInputPin(GPIO_PORT_P1, GPIO_PIN3);

    The pin of P1.2 and P1.3 will be initailized by BSL. so what we need to do is simply disable the interrupt and clear the NVIC registers.

     
  • Adrian,

    Any updates on this?

    BR,

    Seong

  • Hi,

    In my previous application, the UART was being initialized before the BSL invocation code was executed, I modified the application so the UART was not initialized before the BSL invocation and now it works (using the code I posted before), and the device can be programmed successfully from BSL scripter.


    Does the BSL invocation code I was using not deinitialize and reset the UART port? I wold think this linedoes so:

    /* Need to reset UART A0 for firmware update. Be sure to make the
       * corresponding GPIOs input pins. */
      UART_disableModule(EUSCI_A0_BASE);

    Also, something important you should be aware of. Your code to invoque the BSL does not compile in C++, this was already mentioned and I posted a solution in the following post:
    https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/835833

    Please modify the documentation accordingly.

    Regards

  • When you say it works now, does that mean using a Launchpad,  or does it work in your circuit using an FTDI adapter?  If it's the latter, it would be very helpful if you could reply here with the compleate guide to using those adapters with the MSP432P401R if using software invocation. As it stands, the answer appears to be strung out among other threads here and on StackOverflow, and it would be good to have the whole story in one place.

  • It works with a standard FTDI chip conected to the UART port of the MCU. I only tested using the launchapd but I'm bypassing the USB to Uart converter present in the launchpad and usingmy own instead, so it should be no different in my custom board.

    I will test again using my custom board and post a guide here, but I need to finish some other things first before getting back onto this project.

    Please keep the issue open until I am able to do so, probably during the next week.

  • Hi Adrian,

    Were you able to resolve your issue?

    Thanks,

    Riz

  • Hi,

    I have made it work but there are a couple of issues

    Please see my previous post.

  • I have found some time to put together a basic guide on how to program MSP432P401R through UART using a standard FTDI chip
    It is quite possible that I am missing some things, so please let me know so I can modify it.


    1. Connect the FTDI chip to the UART port of the MCU, I am using UCA0 in my case

    2. The following code performs the software invocation of the BSL. Once executed, the device will reset in BLS mode and you have a short interval (~10 seconds) to communicate with it. 

      /* Make sure our MPU settings don't cause problems in the BSL. */
      MPU_disableModule();
    
      /* The BSL does not initialize some hardware it uses. It requires
       * the Systick (to determine UART baud rate) and Timer A0 (to set
       * the 10-second timeout). Prepare these for use by BSL. */
      SysTick_disableInterrupt();
      SysTick_disableModule();
      Timer_A_stopTimer(TIMER_A0_BASE);
    
    
      /* Need to reset UART A0 for firmware update. Be sure to make the
       * corresponding GPIOs input pins. */
      UART_disableModule(EUSCI_A0_BASE);
      GPIO_setAsInputPin(GPIO_PORT_P1, GPIO_PIN2);
      GPIO_setAsInputPin(GPIO_PORT_P1, GPIO_PIN3);
    
      Interrupt_disableMaster();
      for (int i=0; i < 240; i++) NVIC->IP[i] = 0; // This is critical! However SLAU622H does not mention this for SW invocation.
      NVIC->ICER[0] = 0xFFFF;
      NVIC->ICER[1] = 0xFFFF;
      NVIC->ICPR[0] = 0xFFFF;
      NVIC->ICPR[1] = 0xFFFF;
    
      BSL_INVOKE(BSL_UART_INTERFACE);

    3. If using C++, SimpleLink SDK "msp432p401m.h" will throw a compilation error. This has been notified on this other post but I believe there was no follow up from TI. Modify it as follows, and it should compile:

    line 6869:
    
    current version --> wrong:
    
    #define BSL_INVOKE(x)                            ((void (*)())BSL_ENTRY_FUNCTION)((uint32_t) x) /*!< Invoke the BSL with parameters */
    
    OK version:
    
    #define BSL_INVOKE(x)                            ((void (*)(uint32_t))BSL_ENTRY_FUNCTION)((uint32_t) x) /*!< Invoke the BSL with parameters */

    4. Run the following script with bsl-scripter to communicate with the device and load the .hex or .txt file

    //
    //Script example MSP432 UART BSL
    //Device : MSP432P401R
    //Comm Bridge: XDS110 - MSP432LP BackChannelUART
    //   for this setting, the parity need to be
    //   set from Scripter side
    //   When MSP-BSL Rocket is used, parity will be
    //   generated by the Rocket
    //
    //Download blink application to
    //MSP432 device through UART BSL
    //
    LOG
    MODE P4xx UART 9600 /dev/tty.usbmodem1421 PARITY
    RX_PASSWORD_32 pass256_default.txt
    MASS_ERASE
    RX_DATA_BLOCK_32 Blink_LED.txt
    //RX_DATA_BLOCK_32 Blink_LED.hex
    TX_BSL_VERSION_32
    TX_DATA_BLOCK_32 0x0000 0x4000 ReadBlock_MSP432P401R.txt
    //TX_DATA_BLOCK_32 0x0000 0x4000 ReadBlock_MSP432P401R.hex
    REBOOT_RESET

  • That's great, Adrian.  Thanks very much for the comprehensive guide.  I can't think of anything that's missing.

    To be clear, since you're using software invocation of BSL, you used only the Rx and Tx pins of the FTDI chip. Is that right?  So that leaves the hardware invocation option with FTDI still an open question.  But it's great  to have this working option for those who want to use generic USB adapters.

**Attention** This is a public forum