0hmX/ov7670-camera-module

This code defines the hardware layout and schematic connectivity for an OV7676 camera module featuring a CSP5 sensor package, power regulation, and interface connectors.

Version
1.2.0
License
unset
Stars
0

imports/OV7676_CSP5.tsx

import type { ChipProps } from "@tscircuit/props"
import { Fragment } from "react"

/** Bare OmniVision OV7676, 20-ball CSP5 package. */
const pinLabels = {
  pin1: ["XVCLK", "A1"],
  pin2: ["XSHUTDOWN", "A2"],
  pin3: ["VN", "A3"],
  pin4: ["AVDD", "A4"],
  pin5: ["AGND", "A5"],
  pin6: ["HREF", "B1"],
  pin7: ["VSYNC", "FSIN", "B2"],
  pin8: ["DOVDD", "B3"],
  pin9: ["DOGND", "B4"],
  pin10: ["D5", "SPI3", "B5"],
  pin11: ["SIOD", "C1"],
  pin12: ["D0", "SPIVIV0", "C2"],
  pin13: ["D2", "SPI0", "C3"],
  pin14: ["D3", "SPI1", "C4"],
  pin15: ["D6", "C5"],
  pin16: ["SIOC", "D1_BALL"],
  pin17: ["PCLK", "SPCLK", "D2_BALL"],
  pin18: ["D1", "SPIVIV1", "D3_BALL"],
  pin19: ["D4", "SPI2", "D4_BALL"],
  pin20: ["D7", "D5_BALL"],
}

// Manufacturer dimensions: 0.520 mm column and 0.480 mm row pitch.
const columns = [-1.04, -0.52, 0, 0.52, 1.04]
const rows = [0.72, 0.24, -0.24, -0.72]

export const OV7676_CSP5 = (props: ChipProps) => (
  <chip
    pinLabels={pinLabels}
    manufacturerPartNumber="OV07676-H20A"
    supplierPartNumbers={{ jlcpcb: ["C17317227"] }}
    datasheetUrl="https://www.omnivision-group.com/files/pd/file/OV7676-PB-v1.5-WEB.pdf"
    footprint={
      <footprint>
        {rows.flatMap((pcbY, rowIndex) =>
          columns.map((pcbX, columnIndex) => {
            const pin = rowIndex * 5 + columnIndex + 1
            return (
              <Fragment key={`ball-${pin}`}>
                <smtpad
                  portHints={[`pin${pin}`]}
                  pcbX={pcbX}
                  pcbY={pcbY}
                  shape="circle"
                  radius="0.125mm"
                />
              </Fragment>
            )
          }),
        )}
        <courtyardoutline
          outline={[
            { x: -1.6, y: 1.45 },
            { x: 1.6, y: 1.45 },
            { x: 1.6, y: -1.45 },
            { x: -1.6, y: -1.45 },
            { x: -1.6, y: 1.45 },
          ]}
        />
        <silkscreenpath
          route={[
            { x: -1.6, y: 1.1 },
            { x: -1.6, y: 1.45 },
            { x: -1.25, y: 1.45 },
          ]}
          strokeWidth="0.15mm"
        />
        <silkscreencircle
          pcbX={-1.75}
          pcbY={1.55}
          radius="0.16mm"
          strokeWidth="0.12mm"
        />
      </footprint>
    }
    {...props}
  />
)