Class: SWD_DEBUG_PORT

Inherits:
Object
  • Object
show all
Defined in:
lib/HardsploitAPI/SWD/HardsploitAPI_SWD_DEBUG.rb

Overview

Hardsploit API - By Opale Security
www.opale-security.com || www.hardsploit.io
License: GNU General Public License v3
License URI: http://www.gnu.org/licenses/gpl.txt

Instance Method Summary collapse

Constructor Details

#initialize(hardAPI) ⇒ SWD_DEBUG_PORT

Returns a new instance of SWD_DEBUG_PORT.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/HardsploitAPI/SWD/HardsploitAPI_SWD_DEBUG.rb', line 10

def initialize(hardAPI)
  @HardAPI = hardAPI
  @HardAPI.startFPGA
  sleep(0.5)
  @HardAPI.resetSWD
  # read the IDCODE
  # if HardAPI.resetSWD() != 0x1ba01477 then
  #      raise "warning: unexpected idcode"
  # else
  #      puts "MCU DETECTED"
  # end
  abort(1,1,1,1,1)
  select(0,0)
  # power shit up
  puts "Power shit up"
  @HardAPI.writeSWD(FALSE, 1, 0x54000000)
  if (status() >> 24) != 0xF4 then
       raise "error powering up system"
      exit(0)
  else
    puts "POWERING UP SYTEM OK"
  end
  #get the SELECT register to a known state
  select(0,0)
  @curAP = 0
  @curBank = 0
end

Instance Method Details

#abort(orunerr, wdataerr, stickyerr, stickycmp, dap) ⇒ Object



46
47
48
49
50
51
52
53
54
# File 'lib/HardsploitAPI/SWD/HardsploitAPI_SWD_DEBUG.rb', line 46

def abort (orunerr, wdataerr, stickyerr, stickycmp, dap)
    value = 0x00000000
    (orunerr ? value |= 0x10 : value |= 0x00)
    (wdataerr ? value |= 0x08 : value |= 0x00)
    (stickyerr ? value |= 0x04 : value |= 0x00)
    (stickycmp ? value |= 0x02 : value |= 0x00)
    (dap ? value |= 0x01 : value |= 0x00)
    @HardAPI.writeSWD(FALSE, 0, value)
end

#control(trnCount = 0, trnMode = 0, maskLane = 0, orunDetect = 0) ⇒ Object



61
62
63
64
65
66
67
68
# File 'lib/HardsploitAPI/SWD/HardsploitAPI_SWD_DEBUG.rb', line 61

def control (trnCount = 0, trnMode = 0, maskLane = 0, orunDetect = 0)
    value = 0x54000000
    value = value | ((trnCount & 0xFFF) << 12)
    value = value | ((maskLane & 0x00F) << 8)
    value = value | ((trnMode  & 0x003) << 2)
    (orunDetect ? value |= 0x01 : value |= 0x00)
    @HardAPI.writeSWD(False, 1, value)
end

#getAPIObject



38
39
40
# File 'lib/HardsploitAPI/SWD/HardsploitAPI_SWD_DEBUG.rb', line 38

def getAPI
  return @HardAPI
end

#idcodeObject



42
43
44
# File 'lib/HardsploitAPI/SWD/HardsploitAPI_SWD_DEBUG.rb', line 42

def idcode
    return @HardAPI.readSWD(FALSE, 0)
end

#readAP(apsel, address) ⇒ Object



81
82
83
84
85
86
87
88
89
90
# File 'lib/HardsploitAPI/SWD/HardsploitAPI_SWD_DEBUG.rb', line 81

def readAP ( apsel, address)
    adrBank = (address >> 4) & 0xF
    adrReg  = (address >> 2) & 0x3
    if apsel != @curAP or adrBank != @curBank then
        select(apsel, adrBank)
        @curAP = apsel
        @curBank = adrBank
    end
    return @HardAPI.readSWD(TRUE, adrReg)
end

#readRBObject



78
79
80
# File 'lib/HardsploitAPI/SWD/HardsploitAPI_SWD_DEBUG.rb', line 78

def readRB
    return @HardAPI.readSWD(FALSE, 3)
end

#select(apsel, apbank) ⇒ Object



70
71
72
73
74
75
# File 'lib/HardsploitAPI/SWD/HardsploitAPI_SWD_DEBUG.rb', line 70

def select (apsel, apbank)
    value = 0x00000000
    value = value | ((apsel  & 0xFF) << 24)
    value = value | ((apbank & 0x0F) <<  4)
    @HardAPI.writeSWD(FALSE, 2, value)
end

#statusObject



56
57
58
59
# File 'lib/HardsploitAPI/SWD/HardsploitAPI_SWD_DEBUG.rb', line 56

def status
    val= @HardAPI.readSWD(FALSE,1)
    return val
end

#writeAP(apsel, address, data) ⇒ Object



92
93
94
95
96
97
98
99
100
101
# File 'lib/HardsploitAPI/SWD/HardsploitAPI_SWD_DEBUG.rb', line 92

def writeAP (apsel, address, data)
  adrBank = (address >> 4) & 0xF
  adrReg  = (address >> 2) & 0x3
  if apsel != @curAP or adrBank != @curBank then
      select(apsel, adrBank)
      @curAP = apsel
      @curBank = adrBank
  end
@HardAPI.writeSWD(TRUE, adrReg, data)
end