|
| 1 | +from typing import List, NamedTuple, Optional, Literal |
| 2 | + |
| 3 | +from .utils import Voltage, PowerPins, LinearAllocPackageDef, BringupPins |
| 4 | + |
| 5 | +class OFPin(NamedTuple): |
| 6 | + pin: int |
| 7 | + kind: str |
| 8 | + idx: int = 0 |
| 9 | + voltage: Optional[Voltage] = None |
| 10 | + name: Optional[str] = None |
| 11 | + |
| 12 | +OF_GPIO = [ |
| 13 | + OFPin(31, "gpio", 0), # gpio[31] |
| 14 | + OFPin(32, "gpio", 1), # gpio[32] |
| 15 | + OFPin(33, "gpio", 2), # gpio[33] |
| 16 | + OFPin(34, "gpio", 3), # gpio[34] |
| 17 | + OFPin(35, "gpio", 4), # gpio[35] |
| 18 | + OFPin(36, "gpio", 5), # gpio[36] |
| 19 | + OFPin(37, "gpio", 6), # gpio[37] |
| 20 | + OFPin(41, "gpio", 7), # gpio[41] |
| 21 | + OFPin(42, "gpio", 8), # gpio[42] |
| 22 | + OFPin(43, "gpio", 9), # gpio[43] |
| 23 | + OFPin(44, "gpio", 10), # gpio[44] |
| 24 | + OFPin(45, "gpio", 11), # gpio[45] |
| 25 | + OFPin(46, "gpio", 12), # gpio[46] |
| 26 | + OFPin(48, "gpio", 13), # gpio[48] |
| 27 | + OFPin(50, "gpio", 14), # gpio[50] |
| 28 | + OFPin(51, "gpio", 15), # gpio[51] |
| 29 | + OFPin(53, "gpio", 16), # gpio[53] |
| 30 | + OFPin(54, "gpio", 17), # gpio[54] |
| 31 | + OFPin(55, "gpio", 18), # gpio[55] |
| 32 | + OFPin(57, "gpio", 19), # gpio[57] |
| 33 | + OFPin(58, "gpio", 20), # gpio[58] |
| 34 | + OFPin(59, "gpio", 21), # gpio[59] |
| 35 | + OFPin(60, "gpio", 22), # gpio[60] |
| 36 | + OFPin(61, "gpio", 23), # gpio[61] |
| 37 | + OFPin(62, "gpio", 24), # gpio[62] |
| 38 | + OFPin(2, "gpio", 25), # gpio[2] |
| 39 | + OFPin(3, "gpio", 26), # gpio[3] |
| 40 | + OFPin(4, "gpio", 27), # gpio[4] |
| 41 | + OFPin(5, "gpio", 28), # gpio[5] |
| 42 | + OFPin(6, "gpio", 29), # gpio[6] |
| 43 | + OFPin(7, "gpio", 30), # gpio[7] |
| 44 | + OFPin(8, "gpio", 31), # gpio[8] |
| 45 | + OFPin(11, "gpio", 32), # gpio[11] |
| 46 | + OFPin(12, "gpio", 33), # gpio[12] |
| 47 | + OFPin(13, "gpio", 34), # gpio[13] |
| 48 | + OFPin(14, "gpio", 35), # gpio[14] |
| 49 | + OFPin(15, "gpio", 36), # gpio[15] |
| 50 | + OFPin(16, "gpio", 37), # gpio[16] |
| 51 | + # OFPin(22, "gpio", 38) is assigned as clock |
| 52 | + # OFPin(24, "gpio", 39) is assigned as heartbeat |
| 53 | + OFPin(25, "gpio", 40), # gpio[25] |
| 54 | + OFPin(26, "gpio", 41), # gpio[26] |
| 55 | + OFPin(27, "gpio", 42), # gpio[27] |
| 56 | + OFPin(28, "gpio", 43), # gpio[28] |
| 57 | +] |
| 58 | + |
| 59 | +OF_CLOCK_PIN = OFPin(22, "gpio", 38) |
| 60 | +OF_HEARTBEAT_PIN = OFPin(24, "gpio", 39) |
| 61 | +OF_RESET_PIN = OFPin(21, "resetbi") |
| 62 | + |
| 63 | +OF_CORE_POWER = [ |
| 64 | + (OFPin(18,"vcc", voltage=1.8, name="d"), # Power, Digital power supply |
| 65 | + OFPin(23,"vss", name="d")), # Digital power ground |
| 66 | +] |
| 67 | + |
| 68 | +OF_OTHER_POWER= [ |
| 69 | + (OFPin(30,"vdd", voltage=3.3, name="a"), # Power, Analog power supply |
| 70 | + OFPin(20,"vss", name="a")), # Analog power ground |
| 71 | + |
| 72 | + (OFPin(49,"vcc", voltage=1.8, name="d1"), # Power, Digital power supply |
| 73 | + OFPin(39,"vss", name="d1")), # Digital power ground |
| 74 | + |
| 75 | + (OFPin(17,"vdd", voltage=3.3, name="io"), # Power, ESD and padframe power supply |
| 76 | + OFPin(29,"vss", name="io")), # ESD and padframe ground |
| 77 | + |
| 78 | + (OFPin(64,"vdd", voltage=3.3, name="io"), # Power, ESD and padframe power supply |
| 79 | + OFPin(56,"vss", name="io")), # ESD and padframe ground |
| 80 | + |
| 81 | + (OFPin(63,"vcc", voltage=1.8, name="d2"), # Power, Digital power supply |
| 82 | + OFPin(10,"vss", name="d2")), # Digital power ground |
| 83 | + |
| 84 | + (OFPin(40,"vdd", voltage=3.3, name="a1"), # Power, Analog power supply |
| 85 | + OFPin(38,"vss", name="a1")), # Analog power ground |
| 86 | + |
| 87 | + (OFPin(47,"vdd", voltage=3.3, name="a1"), # Power, Analog power supply |
| 88 | + OFPin(52,"vss", name="a1")), # Analog power ground |
| 89 | + |
| 90 | + (OFPin(9,"vdd", voltage=3.3, name="a2"), # Power, Analog power supply |
| 91 | + OFPin(1,"vss", name="a2")), # Analog power ground |
| 92 | +] |
| 93 | + |
| 94 | +OF_OTHER = [ |
| 95 | + OFPin(19, "NC") # Not connected |
| 96 | +] |
| 97 | + |
| 98 | +class OpenframePackageDef(LinearAllocPackageDef): |
| 99 | + |
| 100 | + name: str = "Openframe" |
| 101 | + package_type: Literal["OpenframePackageDef"] = "OpenframePackageDef" |
| 102 | + def model_post_init(self, __context): |
| 103 | + self._ordered_pins = OF_GPIO |
| 104 | + |
| 105 | + super().model_post_init(__context) |
| 106 | + |
| 107 | + |
| 108 | + @property |
| 109 | + def _core_power(self) -> List[PowerPins]: |
| 110 | + pps = [] |
| 111 | + |
| 112 | + for power, ground in OF_CORE_POWER: |
| 113 | + pp = PowerPins(power=power, ground=ground, voltage=power.voltage) |
| 114 | + pps.append(pp) |
| 115 | + |
| 116 | + return pps |
| 117 | + |
| 118 | + @property |
| 119 | + def bringup_pins(self) -> BringupPins: |
| 120 | + return BringupPins( |
| 121 | + core_power=self._core_power, |
| 122 | + core_clock=OF_CLOCK_PIN, |
| 123 | + core_reset=OF_RESET_PIN, |
| 124 | + core_heartbeat=OF_HEARTBEAT_PIN, |
| 125 | + ) |
0 commit comments