Esempio n. 1
0
        public StatusEx DownloadSimple(string OutputPath, FwTools.FwFormat Format,
                                       Bsl430NetDevice Dev, byte[] Password,
                                       int AddrStart, int DataSize)
        {
            using (var dev = new BSL430NET(Dev))
            {
                dev.ProgressChanged += new Bsl430NetEventHandler(delegate
                                                                 (object s, Bsl430NetEventArgs args) {
                    Console.WriteLine($"{args.Progress} {args.Report}");
                });

                dev.SetBaudRate(BaudRate.BAUD_115200);
                dev.SetMCU(MCU.MSP430_F5xx);
                dev.SetInvokeMechanism(InvokeMechanism.SHARED_JTAG);

                StatusEx ret = dev.Download(Password, AddrStart, DataSize, out List <byte> Data);
                string   fw  = FwTools.Create(Data, AddrStart, Format);

                using (StreamWriter wr = new StreamWriter(OutputPath)) {
                    wr.Write(fw);
                }

                Console.WriteLine($"{ret}\n{fw}");
                return(ret);
            }
        }
Esempio n. 2
0
        public async void UploadDetailed()
        {
            // Devices
            string HardcodedDevice = "FTDI1";                     // hardcoded device name
            var    DeviceFromScan  = new Bsl430NetDevice("USB2"); // device from Scan methods
            Mode   GenericDevice   = Mode.UART_Serial;            // not know device yet

            // Input data
            string FirmwarePath = @"firmware.hex";             // firmware file path

            // Dev1 and dev2 use DefaultDevice - default device is entered once into
            // constructor, and then doesnt need to be filled again; the usual way.
            // Dev3 use generic approach, that can be useful when target multiple MCUs
            using (var dev1 = new BSL430NET(HardcodedDevice))
                using (var dev2 = new BSL430NET(DeviceFromScan))
                    using (var dev3 = new BSL430NET(GenericDevice))
                    {
                        // create simple event handler, prints progress (0-100) and report
                        var BslEventHandler = new Bsl430NetEventHandler(delegate
                                                                        (object s, Bsl430NetEventArgs args) {
                            Console.WriteLine($"{args.Progress} {args.Report}");
                        });

                        // assign same event handler for all devices
                        dev1.ProgressChanged += BslEventHandler;
                        dev2.ProgressChanged += BslEventHandler;
                        dev3.ProgressChanged += BslEventHandler;

                        // dev1 settings: fastest speed, F5xx MCU, stanard Invoke (TEST pin)
                        Status stat1Baud   = dev1.SetBaudRate(BaudRate.BAUD_115200);
                        Status stat1Mcu    = dev1.SetMCU(MCU.MSP430_F5xx);
                        Status stat1Invoke = dev1.SetInvokeMechanism(InvokeMechanism.SHARED_JTAG);

                        // dev2 settings: slowest speed, FR6xx MCU, dedicated JTAG pins (TCK pin)
                        Status stat2Baud   = dev2.SetBaudRate(BaudRate.BAUD_9600);
                        Status stat2Mcu    = dev2.SetMCU(MCU.MSP430_FR6xx);
                        Status stat2Invoke = dev2.SetInvokeMechanism(InvokeMechanism.DEDICATED_JTAG);

                        // dev3 settings: middle speed, old G2xx3 MCU -> old protocol ! read below
                        Status stat3Baud   = dev3.SetBaudRate(BaudRate.BAUD_38400);
                        Status stat3Mcu    = dev3.SetMCU(MCU.MSP430_G2xx3);
                        Status stat3Invoke = dev3.SetInvokeMechanism(InvokeMechanism.SHARED_JTAG);

                        // Run Upload of single firmware to 3 MCUs, BSL password is not needed,
                        // as Mass Erase is executed first, clearing memory. Only beware when
                        // 1xx/2xx/4xx old MCU is used, Mass Erase could wipe also Info A with
                        // calibration data. This is not case of modern 5xx/6xx MCUs, however
                        // if you dont want to clear memory first, you must supply BSL password
                        var result1 = Task.FromResult <StatusEx>(dev1.Upload(FirmwarePath));
                        var result2 = Task.FromResult <StatusEx>(dev2.Upload(FirmwarePath));
                        var result3 = await Task.FromResult <StatusEx>(dev3.Upload(FirmwarePath, "COM1"));

                        // use overiden ToString method to output all important result data
                        Console.WriteLine($"Dev1: {result1}\n\n");
                        Console.WriteLine($"Dev2: {result2}\n\n");
                        Console.WriteLine($"Dev3: {result3}");
                    }
        }
Esempio n. 3
0
        public ScanResult <USB_HID_Device> ScanUSB()
        {
            using (var dev = new BSL430NET(Mode.USB_HID))
            {
                var scan = dev.Scan <USB_HID_Device>();

                Console.WriteLine(scan.Status);
                Console.WriteLine(scan.Devices);

                return(scan);
            }
        }
Esempio n. 4
0
        public ScanResult <Serial_Device> ScanSerial()
        {
            using (var dev = new BSL430NET(Mode.UART_Serial))
            {
                var scan = dev.Scan <Serial_Device>();

                Console.WriteLine(scan.Status);
                Console.WriteLine(scan.Devices);

                return(scan);
            }
        }
Esempio n. 5
0
        public ScanResult <FTDI_Device> ScanFTDI()
        {
            using (var dev = new BSL430NET(Mode.UART_FTD2XX))
            {
                var scan = dev.Scan <FTDI_Device>();

                Console.WriteLine(scan.Status);
                Console.WriteLine(scan.Devices);

                return(scan);
            }
        }
Esempio n. 6
0
        public ScanResult <Libftdi_Device> ScanLibftdi()
        {
            using (var dev = new BSL430NET(Mode.UART_libftdi))
            {
                var scan = dev.Scan <Libftdi_Device>();

                Console.WriteLine(scan.Status);
                Console.WriteLine(scan.Devices);

                return(scan);
            }
        }
Esempio n. 7
0
            public CommFTD2XX(BSL430NET root = null, Bsl430NetDevice device = null) : base(root, Mode.UART_FTD2XX)
            {
                int check = FTDICheckDriver();

                if (check == -1)
                {
                    throw new Bsl430NetException(323);  // mising or wrong dll
                }
                //if (check == 0)
                //throw new Bsl430NetException(333);  // missing or wrong driver
                DefaultDevice = device;
            }
Esempio n. 8
0
            public Core(BSL430NET _root, Mode _mode)
            {
                mode = _mode;
                root = _root;
                if (_mode == Mode.USB_HID)
                {
                    invoke = InvokeMechanism.MANUAL;
                }

                report = new Report {
                    Name = "START"
                };
            }
Esempio n. 9
0
        public async void EraseDetailed()
        {
            // Devices
            string HardcodedDevice = "FTDI1";                     // hardcoded device name
            var    DeviceFromScan  = new Bsl430NetDevice("USB2"); // device from Scan methods
            Mode   GenericDevice   = Mode.UART_Serial;            // not know device yet

            // For Erase there is no need for input data

            // Dev1 and dev2 use DefaultDevice - default device is entered once into
            // constructor, and then doesnt need to be filled again; the usual way.
            // Dev3 use generic approach, that can be useful when target multiple MCUs
            using (var dev1 = new BSL430NET(HardcodedDevice))
                using (var dev2 = new BSL430NET(DeviceFromScan))
                    using (var dev3 = new BSL430NET(GenericDevice))
                    {
                        // create simple event handler, prints progress (0-100) and report
                        var BslEventHandler = new Bsl430NetEventHandler(delegate
                                                                        (object s, Bsl430NetEventArgs args) {
                            Console.WriteLine($"{args.Progress} {args.Report}");
                        });

                        // assign same event handler for all devices
                        dev1.ProgressChanged += BslEventHandler;
                        dev2.ProgressChanged += BslEventHandler;
                        dev3.ProgressChanged += BslEventHandler;

                        // dev1 settings: F6xx MCU, dedicated JTAG pins (TCK pin)
                        Status stat1Mcu    = dev1.SetMCU(MCU.MSP430_F6xx);
                        Status stat1Invoke = dev1.SetInvokeMechanism(InvokeMechanism.DEDICATED_JTAG);

                        // dev2 settings: F5xx MCU, shared JTAG pins (TEST pin)
                        Status stat2Mcu    = dev2.SetMCU(MCU.MSP430_F5xx);
                        Status stat2Invoke = dev2.SetInvokeMechanism(InvokeMechanism.SHARED_JTAG);

                        // dev3 settings: old G2xx3 MCU - careful to not wipe Info A! set LOCK A bit
                        Status stat3Mcu    = dev3.SetMCU(MCU.MSP430_G2xx3);
                        Status stat3Invoke = dev3.SetInvokeMechanism(InvokeMechanism.SHARED_JTAG);

                        // Run Mass Erase of 3 MCUs - whole memory is wiped. Beware when 1xx/2xx/4xx
                        // old MCU is used and LOCK A is NOT set, Info A with calib data is wiped!
                        var result1 = Task.FromResult <StatusEx>(dev1.Erase());
                        var result2 = Task.FromResult <StatusEx>(dev2.Erase());
                        var result3 = await Task.FromResult <StatusEx>(dev3.Erase("COM1"));

                        // use overiden ToString method to output all important result data
                        Console.WriteLine($"Dev1: {result1}\n\n");
                        Console.WriteLine($"Dev2: {result2}\n\n");
                        Console.WriteLine($"Dev3: {result3}");
                    }
        }
Esempio n. 10
0
            public CommUSB(BSL430NET root = null, Bsl430NetDevice device = null) : base(root, Mode.USB_HID)
            {
                int check = USBCheckLibrary();

                if (check == -1)
                {
                    throw new Bsl430NetException(623);  // mising or wrong dll
                }
                if (check == -2)
                {
                    throw new Bsl430NetException(633);  // dll load exception
                }
                DefaultDevice = device;
            }
Esempio n. 11
0
            public CommSerial(BSL430NET root = null, Bsl430NetDevice device = null) : base(root, Mode.UART_Serial)
            {
                int check = SerialCheckLibrary();

                if (check == -1)
                {
                    throw new Bsl430NetException(723);  // mising or wrong dll
                }
                if (check == -2)
                {
                    throw new Bsl430NetException(733);  // dll load exception
                }
                DefaultDevice = device;
            }
Esempio n. 12
0
            public CommLibftdi(BSL430NET root = null, Bsl430NetDevice device = null) : base(root, Mode.UART_libftdi)
            {
                int check = LibftdiCheckLibrary();

                if (check == -1)
                {
                    throw new Bsl430NetException(523);  // mising or wrong dll
                }
                if (check == -2)
                {
                    throw new Bsl430NetException(533);  // dll load exception
                }
                DefaultDevice = device;
            }
Esempio n. 13
0
        public void Upload(Mock mock, List <byte[]> dataOut, TestData.Fw fw, StatusEx res)
        {
            var buff = new TestExtensions.XferOutQueue(dataOut);

            SetupXfer(mock as Mock <Main.Core>, buff);

            using (var dev = new BSL430NET(mock.Object))
            {
                dev.SetBaudRate(BaudRate.BAUD_115200);
                dev.SetMCU(MCU.MSP430_F5xx);
                StatusEx stat = dev.Upload(TestData.GetFwPath(fw));

                Assert.NotNull(stat);
                Assert.True(res.OK);
            }
        }
Esempio n. 14
0
        public ScanAllResult ScanAll()
        {
            using (var dev = new BSL430NET())
            {
                var scan = dev.ScanAllEx();

                Console.WriteLine(scan.FtdiDevices.Status);
                Console.WriteLine(scan.LibftdiDevices.Status);
                Console.WriteLine(scan.UsbDevices.Status);
                Console.WriteLine(scan.SerialDevices.Status);

                Console.WriteLine(scan.FtdiDevices.Devices);
                Console.WriteLine(scan.LibftdiDevices.Devices);
                Console.WriteLine(scan.UsbDevices.Devices);
                Console.WriteLine(scan.SerialDevices.Devices);

                return(scan);
            }
        }
Esempio n. 15
0
        public StatusEx EraseSimple(Bsl430NetDevice Dev)
        {
            using (var dev = new BSL430NET(Dev))
            {
                dev.ProgressChanged += new Bsl430NetEventHandler(delegate
                                                                 (object s, Bsl430NetEventArgs args) {
                    Console.WriteLine($"{args.Progress} {args.Report}");
                });

                dev.SetBaudRate(BaudRate.BAUD_115200);
                dev.SetMCU(MCU.MSP430_F5xx);
                dev.SetInvokeMechanism(InvokeMechanism.SHARED_JTAG);

                StatusEx ret = dev.Erase();

                Console.WriteLine($"{ret}");
                return(ret);
            }
        }
Esempio n. 16
0
        public void ScanAllEx()
        {
            using (var dev = new BSL430NET())
            {
                var ret = dev.ScanAllEx(ScanOptions.None);

                Assert.NotNull(ret.FtdiDevices);
                Assert.NotNull(ret.LibftdiDevices);
                Assert.NotNull(ret.UsbDevices);
                Assert.NotNull(ret.SerialDevices);
                Assert.NotNull(ret.FtdiDevices.Status);
                Assert.NotNull(ret.LibftdiDevices.Status);
                Assert.NotNull(ret.UsbDevices.Status);
                Assert.NotNull(ret.SerialDevices.Status);
                Assert.True(ret.FtdiDevices.Status.OK);
                Assert.True(ret.LibftdiDevices.Status.OK);
                Assert.True(ret.UsbDevices.Status.OK);
                Assert.True(ret.SerialDevices.Status.OK);
            }
        }
Esempio n. 17
0
        public void Download(Mock mock, List <byte[]> dataOut, byte[] pw, int addr_start, int size, StatusEx res)
        {
            var buff = new TestExtensions.XferOutQueue(dataOut);

            SetupXfer(mock as Mock <Main.Core>, buff);

            using (var dev = new BSL430NET(mock.Object))
            {
                dev.SetBaudRate(BaudRate.BAUD_115200);
                dev.SetMCU(MCU.MSP430_F5xx);
                StatusEx stat = dev.Download(pw ?? Enumerable.Repeat((byte)0xFF, 16).ToArray(),
                                             addr_start,
                                             size,
                                             out List <byte> data_ret);

                Assert.NotNull(stat);
                Assert.NotNull(data_ret);
                Assert.True(res.OK);
                Assert.True(data_ret.Count == 2);
                Assert.True(data_ret[0] == dataOut[3][5]);
                Assert.True(data_ret[1] == dataOut[3][6]);
            }
        }
Esempio n. 18
0
        public void StartStop()
        {
            if (!this.InProgress)
            {
                this.InProgress = true;
                this.State      = ProcessState.UNKNOWN;

                Task task = new Task(delegate { this.model.ProcessContainerTask(this.currentTab); });
                task.Start();
            }
            else
            {
                var result = MessageBox.Show("Do you really want to force abort main process thread?\n\nIt is not recommended to break firmware ops, as the device will most likely not work correctly! Moreover, aborting thread which uses unmanaged resources will surely cause memory and that could make system unstable.", "BSL430.NET", MessageBoxButton.YesNo, MessageBoxImage.Warning);

                if (result == MessageBoxResult.Yes)
                {
                    try
                    {
                        BSL430NET.Interrupt();
                    }
                    catch (Exception) { }
                }
            }
        }
Esempio n. 19
0
        public async void DownloadDetailed()
        {
            // Devices
            string HardcodedDevice = "FTDI1";                     // hardcoded device name
            var    DeviceFromScan  = new Bsl430NetDevice("USB2"); // device from Scan methods
            Mode   GenericDevice   = Mode.UART_Serial;            // not know device yet

            // Input data

            // Output firmware file paths
            string OutputPath1 = @"firmware1.hex";             // firmware output path 1
            string OutputPath2 = @"firmware2.txt";             // firmware output path 2
            string OutputPath3 = @"firmware3.s19";             // firmware output path 3

            // Output firmware file formats
            FwTools.FwFormat OutputFormat1 = FwTools.FwFormat.INTEL_HEX;  // Intel-HEX
            FwTools.FwFormat OutputFormat2 = FwTools.FwFormat.TI_TXT;     // TI-TXT
            FwTools.FwFormat OutputFormat3 = FwTools.FwFormat.SREC;       // SREC

            // First address - from where to start
            int AddrStart1 = 0x8000;                           // start address 1 - 0x8000
            int AddrStart2 = 0x9999;                           // start address 2 - 0x9999
            int AddrStart3 = 0xAACC;                           // start address 3 - 0xAACC

            // Byte size - how many bytes to download
            int DataSize1 = 32768;                             // byte size 1 - 0x8000 hex
            int DataSize2 = 1000;                              // byte size 2 - 1000 dec
            int DataSize3 = 1;                                 // byte size 3 - single byte

            // BSL password, crucial parameter (read doc)
            byte[] Password1 = Enumerable.Repeat((byte)0xFF, 32).ToArray(); // standard 32 len
            byte[] Password2 = Enumerable.Repeat((byte)0xFF, 16).ToArray(); // F543x Non A only
            byte[] Password3 = Enumerable.Repeat((byte)0xFF, 20).ToArray(); // 20 byte old MCUs

            // Dev1 and dev2 use DefaultDevice - default device is entered once into
            // constructor, and then doesnt need to be filled again; the usual way.
            // Dev3 use generic approach, that can be useful when target multiple MCUs
            using (var dev1 = new BSL430NET(HardcodedDevice))
                using (var dev2 = new BSL430NET(DeviceFromScan))
                    using (var dev3 = new BSL430NET(GenericDevice))
                    {
                        // create simple event handler, prints progress (0-100) and report
                        var BslEventHandler = new Bsl430NetEventHandler(delegate
                                                                        (object s, Bsl430NetEventArgs args) {
                            Console.WriteLine($"{args.Progress} {args.Report}");
                        });

                        // assign same event handler for all devices
                        dev1.ProgressChanged += BslEventHandler;
                        dev2.ProgressChanged += BslEventHandler;
                        dev3.ProgressChanged += BslEventHandler;

                        // dev1 settings: fastest speed, F6xx MCU, standard 32 byte password
                        Status stat1Baud   = dev1.SetBaudRate(BaudRate.BAUD_115200);
                        Status stat1Mcu    = dev1.SetMCU(MCU.MSP430_F6xx);
                        Status stat1Invoke = dev1.SetInvokeMechanism(InvokeMechanism.DEDICATED_JTAG);

                        // dev2 settings: slowest speed, F543x MCU Non A -> 16 byte password!
                        Status stat2Baud   = dev2.SetBaudRate(BaudRate.BAUD_9600);
                        Status stat2Mcu    = dev2.SetMCU(MCU.MSP430_F543x_NON_A);
                        Status stat2Invoke = dev2.SetInvokeMechanism(InvokeMechanism.SHARED_JTAG);

                        // dev3 settings: middle speed, old G2xx3 MCU -> 20 byte password, old protocol
                        Status stat3Baud   = dev3.SetBaudRate(BaudRate.BAUD_38400);
                        Status stat3Mcu    = dev3.SetMCU(MCU.MSP430_G2xx3);
                        Status stat3Invoke = dev3.SetInvokeMechanism(InvokeMechanism.SHARED_JTAG);

                        // Run Download of 3 firmwares to 3 MCUs, BSL password is required,
                        // Beware when 1xx/2xx/4xx old MCU is used, incorrect password could
                        // wipe also Info A with calibration data. This is not case when
                        // LOCK A bit is set, preventing erase, or if modern 5xx/6xx MCUs used
                        var result1 = Task.FromResult <StatusEx>(
                            dev1.Download(Password1, AddrStart1, DataSize1, out List <byte> Data1));
                        var result2 = Task.FromResult <StatusEx>(
                            dev2.Download(Password2, AddrStart2, DataSize2, out List <byte> Data2));
                        var result3 = await Task.FromResult <StatusEx>(
                            dev3.Download(Password3, AddrStart3, DataSize3, out List <byte> Data3, "COM1"));

                        // After download create firmare string from raw data
                        string fw1 = FwTools.Create(Data1, AddrStart1, OutputFormat1);
                        string fw2 = FwTools.Create(Data2, AddrStart2, OutputFormat2);
                        string fw3 = FwTools.Create(Data3, AddrStart3, OutputFormat3);

                        // Finally write ready firmwares to disk
                        using (StreamWriter wr1 = new StreamWriter(OutputPath1))
                            using (StreamWriter wr2 = new StreamWriter(OutputPath2))
                                using (StreamWriter wr3 = new StreamWriter(OutputPath3))
                                {
                                    wr1.Write(fw1);
                                    wr2.Write(fw2);
                                    wr3.Write(fw3);
                                }

                        // use overiden ToString method to output all important result data
                        Console.WriteLine($"Dev1: {result1}\n{fw1}\n\n");
                        Console.WriteLine($"Dev2: {result2}\n{fw2}\n\n");
                        Console.WriteLine($"Dev3: {result3}\n{fw3}");
                    }
        }