Boot Pin Interference

TLDR: cut connection to these pins per default.

Problem

  • shepherd-pcb stops beaglebone from booting

  • startup behavior is determined by 16 pins, which are on P8 Pin 31 to 46

  • only the first 6 and last 2 are important

  • last two are not used by shepherd

BOOT-Pins (from BB-Green-Schematic)

  • to boot from internal MMC1 the bits from BOOT[4:0] must be 0b11100

  • the high pins are held high for the first ~7 sec

  • schematic shows that pins are Pulled up or down with 100k

Changes through Shepherd PCB

  • Boot-pins have 1k input Resistance and are then pulled up to 3V3 with 100k

  • even with floating 3v3 the board won’t boot

  • each boot pin is also connected to another Beaglebone-Pin

Pin-Info

name

pin

PRU1

state

2.pin

function

LinuxGPIO

State

Note

BOOT0

P8-45

0

LOW

P8-14

gpio0

26

LOW

BOOT1

P8-46

1

LOW

P8-17

gpio1

27

LOW

BOOT2

P8-43

2

HIGH

P8-16

gpio2

46

LOW

drive with 2k against bootconfig

BOOT3

P8-44

3

HIGH

P8-15

gpio3

47

LOW

drive with 2k against bootconfig

BOOT4

P8-41

4

HIGH

P9-24

uart-tx

15/uart1_tx

HIGH

BOOT5

P8-42

5

HIGH

p9-26

uart-rx

14/uart1_rx

HIGH

BOOT6

P8-39

6

LOW

p9-17

swd_clk

5/i2c1_scl

HIGH

boot: don’t care

BOOT7

P8-40

7

LOW

p9-18

swd_io

4/i2c1_sda

HIGH

boot: don’t care

batOK

P8-27

8

LOW

gpio4

P8-28

9

LOW

Test & Improve

  • 1k input resistance is fine

  • shepherd PCB alone shows

    • (fresh PCB) pin 41-46 has 110k to GND, 101k to 3v3 ⇾ maybe still a short

    • (test PCB) pin 41-46 has open connection to GND, 101k to 3v3

  • with BB connected

    • pin 41-44 show 44k to GND, 42k to 3v3

    • pin 45/46 show 106k to GND, 100k to 3v3

  • previous 1.x hw-revision shows diodes to these pins, but this seems sub-optimal. makes pins to input-only, but only fast-switching for rising-edges

  • shepherd-enable (p8-13) stays low during boot ⇾ perfect to disconnect board from power

  • behavior of secondary pins (see table above)

    • BOOT[0:3] stay low

    • BOOT[4] stays high

    • BOOT[5:7] high during boot (7.7) on sys with shepherd installed, stays high on fresh sys

  • disabling uart1 and i2c1 brings:

    • BOOT[0:3] stay low

    • BOOT[4:5] stays high

    • BOOT[6:7] high during boot (7.7), then low

  • add uart1-pins to shepherd dts (and set p9-17 to also input pin)

    • BOOT[0:3] stay low

    • BOOT[4:7] high during boot (7.7), then low

  • booting with shepherd works with

    • P8-44/45 disconnected, OR

    • P8-15/16 disconnected, OR

    • switching P8-15/16 (LOW) with P9-17/18 (HIGH) works!

Changes to System

  • i2c1 is only for target-pin-header and can be disabled by default (needed for target-programmer later)

  • uart1 is disabled for now (to access pins in linux)

  • switch Boot[2:3] with other PRU-Pins that are high during boot

    • OR disconnect pins when disabled

    • switch P8-15/16 (LOW) with P9-17/18 (HIGH)

  • increase resistance of pru-pins, 10k should be fine, when only input

  • bat_ok can be at the end (of PRU-Pins), because it is write-only

HW-Tests

sudo shepherd-sheep -vvv demo-functions