Example #1
0
def main():
    gnd = Net('gnd')
    
    # BATTERY
    vbat = Net('vbat'); VBAT_MAX = 4.2
    yield PH.S2B_PH_SM4_TB(['P', 'N'])('P3',
        P=vbat,
        N=gnd,
        MECHANICAL=gnd,
    )
    
    usb_5v = Net('usb_5v')
    
    U100 = yield MCP73832.MCP73832T_2ACI_OT('U100',
        VDD=usb_5v,
        VBAT=vbat,
        VSS=gnd,
    )
    yield resistor(1000/.5)('R100', A=U100.pin.PROG, B=gnd)
    yield capacitor(4.7e-6)('C100', A=U100.pin.VDD, B=gnd)
    yield capacitor(4.7e-6)('C101', A=U100.pin.VBAT, B=gnd)
    
    # REGULATOR & POWER SWITCH
    vcc3_3_enable = Net('vcc3_3_enable')
    yield resistor(10e6)('R1', A=vbat, B=vcc3_3_enable)
    yield capacitor(1e-6)('C2', A=vcc3_3_enable, B=gnd)
    vcc3_3_enable_pulldown = Net('vcc3_3_enable_pulldown')
    yield resistor(10e3)('R7', A=vcc3_3_enable_pulldown, B=gnd)
    yield SSM3K15AFS.SSM3K15AFS_LF('Q1', D=vcc3_3_enable, G=vcc3_3_enable_pulldown, S=gnd)
    
    vcc3_3 = Net('v3.3')
    yield capacitor(1e-6)('REG_C1', A=vbat, B=gnd) # PCB: put close to U1
    yield NCP702.by_voltage[3.3]('REG_U1',
        IN=vbat,
        GND=gnd,
        EN=vcc3_3_enable,
        OUT=vcc3_3,
        NC=gnd, # thermal
    )
    yield capacitor(1e-6)('REG_C2', A=vcc3_3, B=gnd) # PCB: put close to U1
    
    # UART CONNECTOR
    port_cts = Net('port_cts')
    port_vcc = Net('port_vcc')
    port_txd = Net('port_txd')
    port_rxd = Net('port_rxd')
    port_rts = Net('port_rts')
    yield CUS520.CUS520_H3F('D1', A=vcc3_3, C=port_vcc)
    connector = SH.SM06B_SRSS_TB('gnd cts vcc txd rxd rts'.split(' '))
    yield connector('P1',
        gnd=gnd,
        cts=port_cts,
        vcc=port_vcc,
        txd=port_txd,
        rxd=port_rxd,
        rts=port_rts,
        MECHANICAL=gnd,
    )
    
    # GPS RECEIVER & ANTENNA CONNECTORS
    gps_tx = Net('gps_tx')
    gps_rx = Net('gps_rx')
    
    ant1 = Net('ant1')
    yield _0732511150._0732511150(center_pad_width=microstrip_width*1.5)('P2',
        CENTER=ant1,
        SHIELD=gnd,
    )
    yield U_FL.U_FL_R_SMT_01_('P8',
        SIG=ant1,
        GND=gnd,
    )
    #yield GP_1575_25_4_A_02.GP_1575_25_4_A_02('A1', ANT=ant1)
    yield NV08C_CSM.NV08C_CSM('U1',
        GND=gnd,
        
        VIN_A=vcc3_3,
        VIN_D=vcc3_3,
        VBAT=vcc3_3,
        VCCIO=vcc3_3,
        
        antGND=gnd,
        RF=ant1,
        
        TX2=gps_tx,
        RX2=gps_rx,
    )
    
    yield S1315F8_RAW.S1315F8_RAW('U2',
        GND=gnd,
        AGND=gnd,
        VBAT=vcc3_3,
        VCC33=vcc3_3,
        RFIN=ant1,
        TXD0=gps_tx,
        RXD0=gps_rx,
    )
    
    
    # RF SHIELD
    yield BMI_S_202.BMI_S_202('SH', GND=gnd)
    
    # STATUS LED
    # two color led for status
    #   slow blinking red - battery dead
    #   fast blinking red - SD card error
    #   slow blinking green - waiting for acquisition
    #   fast blinking green - acquired, recording
    status_led_anode = Net('status_led_anode')
    status_led_red_cathode = Net('status_led_red_cathode')
    status_led_green_cathode = Net('status_led_green_cathode')
    status_led_blue_cathode = Net('status_led_blue_cathode')
    yield resistor(50)('R8', A=vcc3_3, B=status_led_anode)
    yield LTST_C19HE1WT.LTST_C19HE1WT('L1',
        A=status_led_anode,
        CR=status_led_red_cathode,
        CG=status_led_green_cathode,
        CB=status_led_blue_cathode,
    )
    
    sensor_spi = harnesses.SPIBus.new('sensor_spi_')
    
    # IMU
    imu_spi_nCS = Net('imu_spi_nCS')
    imu_INT = Net('imu_INT')
    yield capacitor(10e-9)('U3C3', A=vcc3_3, B=gnd) # near VDDIO
    yield capacitor(0.1e-6)('U3C2', A=vcc3_3, B=gnd) # near VDD
    REGOUT = Net('REGOUT')
    yield capacitor(0.1e-6)('U3C1', A=REGOUT, B=gnd)
    yield MPU_9250.MPU_9250('U3',
        RESV_1=vcc3_3,
        VDDIO=vcc3_3,
        AD0_SDO=sensor_spi.MISO,
        REGOUT=REGOUT,
        #FSYNC=imu_FSYNC,
        INT=imu_INT,
        VDD=vcc3_3,
        GND=gnd,
        RESV_20=gnd,
        nCS=imu_spi_nCS,
        SCL_SCLK=sensor_spi.SCLK,
        SDA_SDI=sensor_spi.MOSI,
    )
    
    # EXTERNAL IMUs
    external_spi_nCS = [Net('external_spi_nCS_' + str(i)) for i in xrange(3)]
    for i in xrange(3):
        yield SH.SM06B_SRSS_TB('VCC GND SCLK MOSI MISO nCS'.split(' '))('P9_'+str(i),
            VCC=vcc3_3,
            GND=gnd,
            SCLK=sensor_spi.SCLK,
            MOSI=sensor_spi.MOSI,
            MISO=sensor_spi.MISO,
            nCS=external_spi_nCS[i],
            MECHANICAL=gnd,
        )
    
    # ALTIMETER
    baro_spi_nCS = Net('baro_spi_nCS')
    yield capacitor(100e-9)('U4C', A=vcc3_3, B=gnd)
    yield MS5611_01BA03.MS5611_01BA03('U4',
        VDD=vcc3_3,
        PS=gnd, # use SPI
        GND=gnd,
        CSB=baro_spi_nCS,
        SDO=sensor_spi.MISO,
        SDI=sensor_spi.MOSI,
        SCLK=sensor_spi.SCLK,
    )
    
    # SD CARD
    sd_spi = harnesses.SPIBus.new('sd_spi_')
    sd_spi_nCS = Net('sd_spi_nCS')
    yield _101_00660._101_00660_68_6('P4',
        G=gnd,
        VSS=gnd,
        VDD=vcc3_3,
        
        CS=sd_spi_nCS,
        DI=sd_spi.MOSI,
        CLK=sd_spi.SCLK,
        DO=sd_spi.MISO,
    )
    
    # OSCILLATOR
    XTALIN = Net('XTALIN')
    yield capacitor(0.1e-6)('U6C1', A=vcc3_3, B=gnd)
    #yield Si501._501ABA8M00000DAF('U6',
    #    #OE
    #    GND=gnd,
    #    CLK=XTALIN,
    #    VDD=vcc3_3,
    #)
    yield SG_210STF.SG_210STF_8_0000ML('U6',
        #OE
        GND=gnd,
        OUT=XTALIN,
        VCC=vcc3_3,
    )
    
    # USB port
    usb = harnesses.USB.new('usb_')
    usb_pullup = Net('usb_pullup')
    yield resistor(1.5e3)('R6', A=usb_pullup, B=usb.Dp)
    yield _10118194_0001LF._10118194_0001LF('P7',
        VCC=usb_5v,
        Dm=usb.Dm,
        Dp=usb.Dp,
        #ID floats to designate slave
        GND=gnd,
        SHIELD=Net('usb_shield'),
    )
    
    # MICROCONTROLLER & DEBUG PORT
    uc_SWCLK = Net('uc_SWCLK')
    uc_SWDIO = Net('uc_SWDIO')
    uc_NRST = Net('uc_NRST')
    yield resistor(10e3)('R5', A=vcc3_3, B=uc_NRST)
    uc_SWO = Net('uc_SWO')
    yield SH.SM06B_SRSS_TB('VREF SWCLK GND SWDIO NRST SWO'.split(' '))('P5',
        VREF=vcc3_3,
        SWCLK=uc_SWCLK,
        GND=gnd,
        SWDIO=uc_SWDIO,
        NRST=uc_NRST,
        SWO=uc_SWO,
        MECHANICAL=gnd,
    )
    
    for i in xrange(4):
        yield capacitor(0.1e-6)('U5C%i'%i, A=vcc3_3, B=gnd)
    yield capacitor(4.7e-6)('U5C4', A=vcc3_3, B=gnd) # connect to VDD_3 (pin 48)
    yield capacitor(10e-9)('U5C6', A=vcc3_3, B=gnd) # connect to VDDA (pin 9)
    yield capacitor(1e-6)('U5C7', A=vcc3_3, B=gnd) # connect to VDDA (pin 9)
    yield STM32F103.STM32F103CBU6('U5',
        VSS=gnd, VSSA=gnd,
        VDD=vcc3_3, VDDA=vcc3_3, VBAT=vcc3_3,
        
        PD0=XTALIN, # OSC_IN
        NRST=uc_NRST,
        
        #PA4=vbat_divided, # ADC12_IN4
        
        #PA2=port_rxd, # USART2_TX
        #PA3=port_txd, # USART2_RX
        #PA0=port_rts, # USART2_CTS
        #PA1=port_cts, # USART2_RTS
        PB10=port_rxd, # USART3_TX (are 5V tolerant!)
        PB11=port_txd, # USART3_RX
        #PB13=port_rts, # USART3_CTS # XXX connect these to GPIOs instead
        #PB14=port_cts, # USART3_RTS
        
        #PB6 # USART1_TX (5V tolerant)
        #PB7 # USART1_RX

        
        #PA4=sd_spi_nCS, # SPI1_NSS
        #PA5=sd_spi.SCLK, # SPI1_SCK
        #PA6=sd_spi.MISO, # SPI1_MISO
        #PA7=sd_spi.MOSI, # SPI1_MOSI
        PA15=sd_spi_nCS, # SPI1_NSS
        PB3=sd_spi.SCLK, # SPI1_SCK
        PB4=sd_spi.MISO, # SPI1_MISO
        PB5=sd_spi.MOSI, # SPI1_MOSI
        
        #PB2=ahrs_int,
        #PB10=ahrs_i2c.SCL, # I2C2_SCL
        #PB11=ahrs_i2c.SDA, # I2C2_SDA
        
        PB12=external_spi_nCS[0], # SPI2_NSS
        PB13=sensor_spi.SCLK, # SPI2_SCK
        PB14=sensor_spi.MISO, # SPI2_MISO
        PB15=sensor_spi.MOSI, # SPI2_MOSI
        
        PA9 =gps_rx, # USART1_TX (5V tolerant)
        PA10=gps_tx, # USART1_RX
        #PA11 # USART1_CTS
        #PA12 # USART1_RTS
        
        PA8=usb_5v, # need to be 5V tolerant!
        PA11=usb.Dm, # USBDM
        PA12=usb.Dp, # USBDP
        PB6=usb_pullup,
        
        PA13=uc_SWDIO, # JTMS/SWDIO
        PA14=uc_SWCLK, # JTCK/SWCLK
        #PB3=uc_SWO, # TRACESWO
        #PB4 # JNTRST
        
        PB1=vcc3_3_enable_pulldown,
        
        BOOT0=gnd, # main flash memory
        
        PA6=status_led_red_cathode, # TIM3_CH1
        PA7=status_led_green_cathode, # TIM3_CH2
        PB0=status_led_blue_cathode, # TIM3_CH3
        
        PC13=uc_SWO,
        PB7=imu_spi_nCS,
        PB8=imu_INT,
        PB9=baro_spi_nCS,
        PA5=external_spi_nCS[1],
        PA2=external_spi_nCS[2],
    )
Example #2
0
def main():
    gnd = Net('gnd')
    
    # BATTERY
    vbat = Net('vbat'); VBAT_MAX = 4.2
    
    # REGULATOR & POWER SWITCH
    vcc3_3_enable = Net('vcc3_3_enable')
    vcc3_3_enable_real = Net('vcc3_3_enable_real')
    vcc3_3_enable_uc = Net('vcc3_3_enable_uc')
    vcc3_3 = Net('v3.3')
    
    yield capacitor(2.2e-6)('C1', A=vbat, B=vcc3_3_enable)
    yield resistor(90e3)('R2', A=vcc3_3_enable_uc, B=vcc3_3_enable)
    yield resistor(100e3)('R3', A=vcc3_3_enable, B=vcc3_3_enable_real)
    yield resistor(2000e3)('R4', A=vcc3_3_enable, B=vcc3_3)
    
    yield capacitor(1e-6)('U1C1', A=vbat, B=gnd) # PCB: put close to U1
    yield NCP702.by_voltage[3.3]('U1',
        IN=vbat,
        GND=gnd,
        EN=vcc3_3_enable_real,
        OUT=vcc3_3,
        NC=gnd, # thermal
    )
    yield capacitor(1e-6)('U1C2', A=vcc3_3, B=gnd) # PCB: put close to U1
    
    # GPS RECEIVER & ANTENNA CONNECTORS
    gps_tx = Net('gps_tx')
    gps_rx = Net('gps_rx')
    
    ant1 = Net('ant1')
    yield U_FL.U_FL_R_SMT_01_('P8',
        SIG=ant1,
        GND=gnd,
    )
    yield S1315F8_RAW.S1315F8_RAW('U2',
        GND=gnd,
        AGND=gnd,
        VBAT=vcc3_3,
        VCC33=vcc3_3,
        RFIN=ant1,
        TXD0=gps_tx,
        RXD0=gps_rx,
    )
    
    
    # RF SHIELD
    #yield BMI_S_202.BMI_S_202('SH', GND=gnd)
    
    # STATUS LED
    # two color led for status
    #   slow blinking red - battery dead
    #   fast blinking red - SD card error
    #   slow blinking green - waiting for acquisition
    #   fast blinking green - acquired, recording
    status_led_anode = Net('status_led_anode')
    status_led_red_cathode = Net('status_led_red_cathode')
    status_led_green_cathode = Net('status_led_green_cathode')
    status_led_blue_cathode = Net('status_led_blue_cathode')
    yield resistor(50)('R8', A=vcc3_3, B=status_led_anode)
    yield LTST_C19HE1WT.LTST_C19HE1WT('L1',
        A=status_led_anode,
        CR=status_led_red_cathode,
        CG=status_led_green_cathode,
        CB=status_led_blue_cathode,
    )
    
    # SD CARD
    sd_spi = harnesses.SPIBus.new('sd_spi_')
    sd_spi_nCS = Net('sd_spi_nCS')
    P4 = yield _101_00660._101_00660_68_6('P4',
        G=gnd,
        VSS=gnd,
        VDD=vcc3_3,
        
        CS=sd_spi_nCS,
        DI=sd_spi.MOSI,
        CLK=sd_spi.SCLK,
        DO=sd_spi.MISO,
    )
    yield capacitor(10e-6)('P4C1', A=P4.pin.VDD, B=P4.pin.VSS)
    
    # OSCILLATOR
    XTALIN = Net('XTALIN')
    yield capacitor(0.1e-6)('U6C1', A=vcc3_3, B=gnd)
    #yield Si501._501ABA8M00000DAF('U6',
    #    #OE
    #    GND=gnd,
    #    CLK=XTALIN,
    #    VDD=vcc3_3,
    #)
    yield SG_210STF.SG_210STF_8_0000ML('U6',
        #OE
        GND=gnd,
        OUT=XTALIN,
        VCC=vcc3_3,
    )
    
    # DEBUG/BATTERY/UART PORT
    uc_SWCLK = Net('uc_SWCLK')
    uc_SWDIO = Net('uc_SWDIO')
    uc_NRST = Net('uc_NRST')
    yield resistor(10e3)('R5', A=vcc3_3, B=uc_NRST)
    serial_txd = Net('serial_txd')
    serial_rxd = Net('serial_rxd')
    yield SH.SM07B_SRSS_TB('GND SWDIO SWCLK TX RX NRST VBAT'.split(' '))('P5',
        VBAT=vbat,
        GND=gnd,
        SWCLK=uc_SWCLK,
        SWDIO=uc_SWDIO,
        NRST=uc_NRST,
        TX=serial_txd,
        RX=serial_rxd,
        MECHANICAL=gnd,
    )
    
    for i in xrange(3):
        yield capacitor(0.1e-6)('U5C%i'%i, A=vcc3_3, B=gnd) # PCB: pins 1, 19, and 27
    yield capacitor(4.7e-6)('U5C4', A=vcc3_3, B=gnd) # PCB: connect to VDD_3 (pin 1)
    yield capacitor(10e-9)('U5C6', A=vcc3_3, B=gnd) # PCB: connect to VDDA (pin 6)
    yield capacitor(1e-6)('U5C7', A=vcc3_3, B=gnd) # PCB: connect to VDDA (pin 6)
    yield STM32F103.STM32F103TBU6('U5',
        VSS=gnd, VSSA=gnd,
        VDD=vcc3_3, VDDA=vcc3_3, #VBAT=vcc3_3,
        
        PD0=XTALIN, # OSC_IN
        NRST=uc_NRST,
        
        PA2=gps_rx, # USART2_TX
        PA3=gps_tx, # USART2_RX
        
        PB6=serial_txd, # USART1_TX (5V tolerant)
        PB7=serial_rxd, # USART1_RX
        #PA9 =serial_txd, # USART1_TX (5V tolerant)
        #PA10=serial_rxd, # USART1_RX
        
        PA15=sd_spi_nCS,  # SPI1_NSS
        PB3 =sd_spi.SCLK, # SPI1_SCK
        PB4 =sd_spi.MISO, # SPI1_MISO
        PB5 =sd_spi.MOSI, # SPI1_MOSI
        #PA4=sd_spi_nCS,  # SPI1_NSS
        #PA5=sd_spi.SCLK, # SPI1_SCK
        #PA6=sd_spi.MISO, # SPI1_MISO
        #PA7=sd_spi.MOSI, # SPI1_MOSI
        
        PA13=uc_SWDIO, # JTMS/SWDIO
        PA14=uc_SWCLK, # JTCK/SWCLK
        #PB3=uc_SWO, # TRACESWO
        #PB4 # JNTRST
        
        PB1=vcc3_3_enable_uc, # must not be 5V tolerant (injected current limits)
        
        BOOT0=gnd, # main flash memory
        
        PA6=status_led_red_cathode, # TIM3_CH1
        PA7=status_led_green_cathode, # TIM3_CH2
        PB0=status_led_blue_cathode, # TIM3_CH3
    )