recommendations for secure bootloaders


Results 1 to 10 of 10

Threaded View

  1. #2
    Join Date
    Sep 2009
    Posts
    755


    Did you find this post helpful? Yes | No

    Default Re: recommendations for secure bootloaders

    I just finish my first bootloader and it use simple data encription. I isn't so hard to make one. I put bootloader on end of program memory(DEFINE RESET_ORG), so main app isn't affected with bootloader. If you want to jump to bootloader just execute @ GOTO 1EC00h in main app.
    Code for bootloader is simple. Here is part of code for PIC:
    Code:
        DEFINE RESET_ORG 1EC00h
        'Var definition and 
        'Set registers
        BlockSize       VAR BYTE BANKA SYSTEM
        'Get BLOCK SIZE from ASM
        @ MovLW BLOCK_SIZE 
        @ MovWF BlockSize
        MemSize=79999' Used first 80000 bytes of FLASH
        PAUSE 6
        FOR Adr=0 TO MemSize STEP BlockSize 
            ERASECODE Adr
        NEXT Adr
        FOR Adr=0 TO MemSize STEP 128
                Err=0
                FwReceive:
                Err=Err+1
                IF Err=5THEN 'If PC doesn't respond, do something...
                   
                ENDIF
                HSEROUT2 ["A:",DEC6 Adr,13,10] 'Send address to PC
                HSERIN2 100, FwReceive, [WAIT("D:"), Tmp0, Tmp1] 'Receive same byte twice, to eliminate communication errors..
                IF Tmp0<>Tmp1 THEN GOTO FwReceive 
                GOSUB ByteDecode
                WRITE Adr, Tmp0 'Write will first fill up table then it will write 64 or 128 bytes to memory. depending on BlockSize, Check PBP manual
        NEXT Adr
        HSEROUT2 ["C"]
        @ RESET
    You can add EEPROM, yust using READ and WRITE
    Or you can add config bytes, thanks to Darrel Taylor.
    http://www.picbasic.co.uk/forum/showthread.php?t=4093
    For PC side you can use http://www.microchip.com/stellent/id...pnote=en012031 as starting point.
    I menage to translate this app to VB .net, get FLASH, EEPROM and CONFIG data from hex file. From that point it was easy to add simple byte encryption and communication.
    Communication code in Vb.net
    Code:
        Private Sub tmrWriteToDevice_Tick(sender As Object, e As EventArgs) Handles tmrWriteToDevice.Tick
            Static RxBuffer As String
            If SerialPort1.IsOpen = True Then
                RxBuffer += SerialPort1.ReadExisting
                If RxBuffer.Length > 0 Then
                    If InStr(RxBuffer, "A:", CompareMethod.Text) > 0 And Mid(RxBuffer, Len(RxBuffer), 1) = Chr(3) Then
                        Dim Adr As Integer, DataPos As Integer
                        DataPos = InStr(RxBuffer, "A:")
                        RxBuffer = Mid(RxBuffer, DataPos + 2, 6) 'Adress string
                        Adr =  Convert.ToInt32(RxBuffer, 10)
                        RxBuffer = ""
                        ByteArray(0) = HexFileByte(Adr) 'HexFileByte if loaded with flesh data from hex, and encoded.
                        ByteArray(1) = HexFileByte(Adr)
                        SerialPort1.Write("D:")
                        SerialPort1.Write(ByteArray, 0, 2)
                        ToolStripProgressBar1.Value = Adr / 800
                        ToolStripStatusLabel1.Text = ToolStripProgressBar1.Value.ToString & "% Complited"
    
                    ElseIf InStr(RxBuffer, "C" & Chr(3), CompareMethod.Text) > 0 Then
                        ToolStripStatusLabel1.Text = "Data Transfer Complite"
                        ToolStripProgressBar1.Value = 100
                    End If
                End If
            End If
        End Sub
    I tried to put bootloader in main app, but that was very hard. Only way that it could be done is to compile your bootloader, then get flash memory from hex, remove part before and after bootloader, then use ORG 1EC00h and dw(thanks to DT http://www.picbasic.co.uk/forum/show...php?t=3891#LAB) to put data to flash directly.
    From this I created another one to boot from I2C memory, so in bootloader there is only I2C communication so it is only about 1K. Another advantige is that you can load I2C memory from any communication that you have on your application(eg serial port, bluetooth, usb etc..) and still be able to use same bootloader. Idea taken from Mike

    I hope this will be enough to create your bootloader.
    Last edited by pedja089; - 14th August 2014 at 09:57.

Similar Threads

  1. Replies: 9
    Last Post: - 5th June 2013, 13:17
  2. Logic Probe Recommendations
    By retepsnikrep in forum Off Topic
    Replies: 3
    Last Post: - 12th June 2011, 20:35
  3. Replies: 10
    Last Post: - 15th April 2009, 14:38
  4. Recommendations - Model Train Controller
    By malc-c in forum mel PIC BASIC Pro
    Replies: 101
    Last Post: - 8th March 2007, 08:17
  5. fast programmer recommendations
    By markedwards in forum mel PIC BASIC Pro
    Replies: 6
    Last Post: - 7th September 2005, 14:12

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts