Merge from mossmann/master

This commit is contained in:
Jared Boone
2018-12-27 14:56:29 -08:00
30 changed files with 720 additions and 224 deletions

View File

@ -1,52 +1,61 @@
language: c
cache: apt
sudo: false
dist: trusty
os:
- linux
- osx
compiler:
- gcc
- clang
matrix:
exclude:
- os: linux
- os: osx
include:
- os: linux
compiler: gcc
cache: apt
dist: xenial
- os: osx
osx_image: xcode7.3
compiler: clang
env:
global:
- SHORT_COMMIT_HASH=`git rev-parse --short HEAD`
- VERSION_STRING=nightly-$SHORT_COMMIT_HASH
- BUILD_NAME="HackRF-`date +%Y-%m-%d`-$SHORT_COMMIT_HASH"
- ARTEFACT_BASE=$TRAVIS_BUILD_DIR/artefacts/
- ARTEFACT_PATH=$ARTEFACT_BASE/$BUILD_NAME
addons:
apt:
packages:
- libusb-1.0-0-dev
- libfftw3-dev
- dfu-util
- gcc-arm-none-eabi
- libnewlib-arm-none-eabi
- libstdc++-arm-none-eabi-newlib
- python-yaml
homebrew:
taps: PX4/homebrew-px4
packages:
- fftw
- gcc-arm-none-eabi
- dfu-util
before_install:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then pip install PyYAML; fi
before_script:
- export CFLAGS="-Wall -Wextra -Werror"
before_install:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew tap PX4/homebrew-px4; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install libusb fftw gcc-arm-none-eabi dfu-util; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then wget -O gcc-arm-none-eabi.tar.bz2 https://developer.arm.com/-/media/Files/downloads/gnu-rm/6-2017q2/gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then tar xf gcc-arm-none-eabi.tar.bz2; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then export PATH=$PATH:$PWD/gcc-arm-none-eabi-6-2017-q2-update/bin; fi
# For virtualenv(?) reasons we can't apt-get install python-yaml
- pip install PyYAML
script:
# Host code
- mkdir host/build
- cd host/build
- cmake ..
- make
- cd ../..
- mkdir firmware/build-hackrf-one
- mkdir firmware/build-jawbreaker
- mkdir firmware/build-rad1o
- cd firmware/libopencm3
# Firmware
# Set version string
- cd ../../firmware
- sed -e "s/\#set(VERSION.*/set(VERSION \"$VERSION_STRING\")/" -i".bak" hackrf-common.cmake
- mkdir build-hackrf-one
- mkdir build-jawbreaker
- mkdir build-rad1o
- cd libopencm3
- make
- cd ../build-hackrf-one
- cmake ..
@ -58,9 +67,30 @@ script:
- cmake -DBOARD=RAD1O ..
- make
addons:
apt:
packages:
- libusb-1.0-0-dev
- libfftw3-dev
- dfu-util
after_success:
# Construct archive for deploying to ubertooth-nightlies
- mkdir -p $ARTEFACT_PATH/firmware-bin/
# Export HackRF git repo
- cd $TRAVIS_BUILD_DIR/
- git archive --format=tar HEAD | (cd $ARTEFACT_PATH && tar xf -)
# Set version string
- sed -e "s/\#set(RELEASE.*/set(RELEASE \"$VERSION_STRING\")/" -i".bak" $ARTEFACT_PATH/host/cmake/set_release.cmake
# Copy firmware to firmware-bin directory
- cd $TRAVIS_BUILD_DIR/firmware/
- cp cpld/sgpio_if/default.xsvf $ARTEFACT_PATH/firmware-bin/hackrf_cpld_default.xsvf
- cp build-hackrf-one/hackrf_usb/hackrf_usb.bin $ARTEFACT_PATH/firmware-bin/hackrf_one_usb.bin
- cp build-hackrf-one/hackrf_usb/hackrf_usb.dfu $ARTEFACT_PATH/firmware-bin/hackrf_one_usb.dfu
- cp build-jawbreaker/hackrf_usb/hackrf_usb.bin $ARTEFACT_PATH/firmware-bin/hackrf_jawbreaker_usb.bin
- cp build-jawbreaker/hackrf_usb/hackrf_usb.dfu $ARTEFACT_PATH/firmware-bin/hackrf_jawbreaker_usb.dfu
- cp build-rad1o/hackrf_usb/hackrf_usb.bin $ARTEFACT_PATH/firmware-bin/rad1o_usb.bin
- cp build-rad1o/hackrf_usb/hackrf_usb.dfu $ARTEFACT_PATH/firmware-bin/rad1o_usb.dfu
# Build the archive
- cd $ARTEFACT_BASE
- tar -cJvf $ARTEFACT_BASE/$BUILD_NAME.tar.xz $BUILD_NAME
deploy:
provider: script
skip-cleanup: true
script: bash $TRAVIS_BUILD_DIR/tools/deploy-nightly.sh
on:
branch: master

View File

@ -1,4 +1,4 @@
os: Visual Studio 2015
os: Visual Studio 2017
clone_depth: 1
configuration:
@ -7,18 +7,25 @@ configuration:
init:
- C:\"Program Files (x86)"\"Microsoft Visual Studio 14.0"\VC\vcvarsall.bat %PLATFORM%
install:
# Dependencies for libHackRF
- appveyor DownloadFile "https://github.com/libusb/libusb/releases/download/v1.0.22/libusb-1.0.22.7z" -FileName "C:\libusb.7z"
- 7z x -y "C:\libusb.7z" -o"C:\libusb"
- appveyor DownloadFile "http://mirrors.kernel.org/sourceware/pthreads-win32/pthreads-w32-2-9-1-release.zip" -FileName "C:\pthreads-w32-release.zip"
- 7z x -y "C:\pthreads-w32-release.zip" -o"C:\pthreads"
- appveyor DownloadFile "http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-config_0.26-1_win32.zip" -FileName "C:\pkg-config_win32.zip"
- 7z x -y "C:\pkg-config_win32.zip" -o"C:\pkg-config"
# FFTW for hackrf_sweep
- curl -fsS -o "C:\fftw-3.3.5.zip" "ftp://ftp.fftw.org/pub/fftw/fftw-3.3.5-dll64.zip"
- 7z x -y "C:\fftw-3.3.5.zip" -o"C:\fftw"
- cd c:\fftw
- ps: lib /machine:x64 /def:libfftw3f-3.def
# ARM GCC for firmware builds
# - appveyor DownloadFile "https://developer.arm.com/-/media/Files/downloads/gnu-rm/6-2017q2/gcc-arm-none-eabi-6-2017-q2-update-win32.zip" -FileName "C:\gcc-arm-none-eabi-win32.zip"
# - 7z x -y "C:\gcc-arm-none-eabi-win32.zip" -o"C:\gcc-arm-none-eabi"
# - set PATH=%PATH%;c:\gcc-arm-none-eabi\bin
build_script:
# Host library and tools
- mkdir c:\projects\hackrf\host\build
- cd c:\projects\hackrf\host\build
- cmake -G "Visual Studio 14 2015 Win64" \
@ -31,3 +38,15 @@ build_script:
-DFFTW_LIBRARIES=C:\fftw\libfftw3f-3.lib \
..
- msbuild HackRF.sln /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
# Firmware
# - cd c:\projects\hackrf\
# - git submodule init
# - git submodule update
# - '%CYG_BASH% -lc "cd $APPVEYOR_BUILD_FOLDER && firmware/appveyor.sh"'
after_build:
- 7z a %APPVEYOR_BUILD_FOLDER%\HackRF-Windows-%APPVEYOR_REPO_COMMIT%.zip %APPVEYOR_BUILD_FOLDER%\host\build\libhackrf\src\Release\* %APPVEYOR_BUILD_FOLDER%\host\build\hackrf-tools\src\Release\*
artifacts:
- path: HackRF-Windows-%APPVEYOR_REPO_COMMIT%.zip
name: HackRF-Windows-%APPVEYOR_REPO_COMMIT%

View File

@ -20,7 +20,7 @@
# Top directory CMake project for HackRF firmware
cmake_minimum_required(VERSION 2.8.9)
cmake_minimum_required(VERSION 3.1.3)
set(CMAKE_TOOLCHAIN_FILE toolchain-arm-cortex-m.cmake)
project (hackrf_firmware_all C)

14
firmware/appveyor.sh Normal file
View File

@ -0,0 +1,14 @@
#!/bin/sh
/usr/bin/env python -m ensurepip
/usr/bin/env python -m pip install pyyaml
cd firmware/libopencm3
export SRCLIBDIR='c:\projects\hackrf\firmware\libopencm3\lib\'
make lib/lpc43xx/m0
make lib/lpc43xx/m4
cd ..
mkdir build-hackrf-one
cd build-hackrf-one
cmake -G "Unix Makefiles" ..
make VERBOSE=1

View File

@ -19,7 +19,7 @@
# Boston, MA 02110-1301, USA.
#
cmake_minimum_required(VERSION 2.8.9)
cmake_minimum_required(VERSION 3.1.3)
set(CMAKE_TOOLCHAIN_FILE ../toolchain-arm-cortex-m.cmake)
project(blinky C)

View File

@ -21,7 +21,13 @@
#include "operacake.h"
#include "hackrf_core.h"
#include "gpio.h"
#include "gpio_lpc.h"
#include <libopencm3/lpc43xx/scu.h>
/*
* I2C Mode
*/
#define OPERACAKE_PIN_OE(x) (x<<7)
#define OPERACAKE_PIN_U2CTRL1(x) (x<<6)
#define OPERACAKE_PIN_U2CTRL0(x) (x<<5)
@ -44,7 +50,7 @@
#define OPERACAKE_SAMESIDE OPERACAKE_PIN_U1CTRL(1)
#define OPERACAKE_CROSSOVER OPERACAKE_PIN_U1CTRL(0)
#define OPERACAKE_EN_LEDS (OPERACAKE_PIN_LEDEN2(1) | OPERACAKE_PIN_LEDEN2(0))
#define OPERACAKE_GPIO_EN OPERACAKE_PIN_OE(0)
#define OPERACAKE_GPIO_ENABLE OPERACAKE_PIN_OE(0)
#define OPERACAKE_GPIO_DISABLE OPERACAKE_PIN_OE(1)
#define OPERACAKE_REG_INPUT 0x00
@ -56,6 +62,10 @@
| OPERACAKE_PORT_A1 | OPERACAKE_PORT_B1 \
| OPERACAKE_EN_LEDS)
#define OPERACAKE_CONFIG_ALL_OUTPUT (0x00)
// Leave LED bits as outputs
#define OPERACAKE_CONFIG_GPIO_INPUTS (0x7C)
#define OPERACAKE_POLARITY_NORMAL (0x00)
#define OPERACAKE_DEFAULT_ADDRESS 0x18
@ -145,6 +155,9 @@ uint8_t operacake_set_ports(uint8_t address, uint8_t PA, uint8_t PB) {
return 0;
}
/*
* Opera Glasses
*/
typedef struct {
uint16_t freq_min;
uint16_t freq_max;
@ -194,3 +207,82 @@ uint8_t operacake_set_range(uint32_t freq_mhz) {
current_range = i;
return 0;
}
/*
* GPIO
*/
uint16_t gpio_test(uint8_t address)
{
uint8_t i, reg, bit_mask, gpio_mask = 0x1F;
uint16_t result = 0;
operacake_init();
scu_pinmux(SCU_PINMUX_GPIO3_8, SCU_GPIO_FAST | SCU_CONF_FUNCTION0);
scu_pinmux(SCU_PINMUX_GPIO3_12, SCU_GPIO_FAST | SCU_CONF_FUNCTION0);
scu_pinmux(SCU_PINMUX_GPIO3_13, SCU_GPIO_FAST | SCU_CONF_FUNCTION0);
scu_pinmux(SCU_PINMUX_GPIO3_14, SCU_GPIO_FAST | SCU_CONF_FUNCTION0);
scu_pinmux(SCU_PINMUX_GPIO3_15, SCU_GPIO_FAST | SCU_CONF_FUNCTION0);
static struct gpio_t gpio_pins[] = {
GPIO(3, 8), // u1ctrl IO2
GPIO(3, 14), // u3ctrl0 IO3
GPIO(3, 15), // u3ctrl1 IO4
GPIO(3, 12), // u2ctrl0 IO5
GPIO(3, 13) // u2ctrl1 IO6
};
// Setup I2C to put it in GPIO mode
reg = (OPERACAKE_GPIO_ENABLE | OPERACAKE_EN_LEDS);
operacake_write_reg(oc_bus, address, OPERACAKE_REG_OUTPUT, reg);
operacake_write_reg(oc_bus, address, OPERACAKE_REG_CONFIG,
OPERACAKE_CONFIG_GPIO_INPUTS);
operacake_write_reg(oc_bus, address, OPERACAKE_REG_POLARITY,
OPERACAKE_POLARITY_NORMAL);
// clear state
for(i=0; i<5; i++) {
gpio_output(&gpio_pins[i]);
gpio_write(&gpio_pins[i], 0);
}
// Test each pin separately
for(i=0; i<5; i++) {
// Set pin high
gpio_write(&gpio_pins[i], 1);
// check input
reg = operacake_read_reg(oc_bus, address, OPERACAKE_REG_INPUT);
reg >>= 2;
reg &= gpio_mask;
bit_mask = 1 << i;
result <<= 1;
if(!(reg & bit_mask)) {
// Is the correct bit set?
result |= 1;
}
result <<= 1;
if(reg & ~bit_mask) {
// Are any other bits set?
result |= 1;
}
result <<= 1;
// set pin low
gpio_write(&gpio_pins[i], 0);
// check input
reg = operacake_read_reg(oc_bus, address, OPERACAKE_REG_INPUT);
reg >>= 2;
reg &= gpio_mask;
bit_mask = 1 << i;
if(reg & bit_mask) {
// Is the correct bit clear?
result |= 1;
}
}
// clean up
for(i=0; i<5; i++) {
gpio_input(&gpio_pins[i]);
}
// Put it back in to I2C mode and set default pins
operacake_write_reg(oc_bus, address, OPERACAKE_REG_CONFIG,
OPERACAKE_CONFIG_ALL_OUTPUT);
operacake_write_reg(oc_bus, address, OPERACAKE_REG_OUTPUT,
OPERACAKE_DEFAULT_OUTPUT);
return result;
}

View File

@ -49,6 +49,7 @@ uint8_t operacake_init(void);
uint8_t operacake_set_ports(uint8_t address, uint8_t PA, uint8_t PB);
uint8_t operacake_add_range(uint16_t freq_min, uint16_t freq_max, uint8_t port);
uint8_t operacake_set_range(uint32_t freq_mhz);
uint16_t gpio_test(uint8_t address);
#ifdef __cplusplus
}

View File

@ -34,19 +34,22 @@ SET(LIBOPENCM3 ${PATH_HACKRF_FIRMWARE}/libopencm3)
include(${PATH_HACKRF_FIRMWARE}/dfu-util.cmake)
execute_process(
COMMAND git log -n 1 --format=%h
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
RESULT_VARIABLE GIT_VERSION_FOUND
ERROR_QUIET
OUTPUT_VARIABLE GIT_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if (GIT_VERSION_FOUND)
set(VERSION "unknown")
else (GIT_VERSION_FOUND)
set(VERSION ${GIT_VERSION})
endif (GIT_VERSION_FOUND)
#set(VERSION "")
if (NOT DEFINED VERSION)
execute_process(
COMMAND git log -n 1 --format=%h
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
RESULT_VARIABLE GIT_VERSION_FOUND
ERROR_QUIET
OUTPUT_VARIABLE GIT_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if (GIT_VERSION_FOUND)
set(VERSION "unknown")
else (GIT_VERSION_FOUND)
set(VERSION "git-${GIT_VERSION}")
endif (GIT_VERSION_FOUND)
endif()
if(NOT DEFINED BOARD)
set(BOARD HACKRF_ONE)
@ -70,7 +73,7 @@ if(NOT DEFINED SRC_M0)
set(SRC_M0 "${PATH_HACKRF_FIRMWARE_COMMON}/m0_sleep.c")
endif()
SET(HACKRF_OPTS "-D${BOARD} -DUSER_INTERFACE_${USER_INTERFACE} -DLPC43XX -D${MCU_PARTNO} -DTX_ENABLE -D'VERSION_STRING=\"git-${VERSION}\"'")
SET(HACKRF_OPTS "-D${BOARD} -DUSER_INTERFACE_${USER_INTERFACE} -DLPC43XX -D${MCU_PARTNO} -DTX_ENABLE -D'VERSION_STRING=\"${VERSION}\"'")
SET(LDSCRIPT_M4 "-T${PATH_HACKRF_FIRMWARE_COMMON}/${MCU_PARTNO}_M4_memory.ld -Tlibopencm3_lpc43xx_rom_to_ram.ld -T${PATH_HACKRF_FIRMWARE_COMMON}/LPC43xx_M4_M0_image_from_text.ld")
@ -78,7 +81,7 @@ SET(LDSCRIPT_M4_DFU "-T${PATH_HACKRF_FIRMWARE_COMMON}/${MCU_PARTNO}_M4_memory.ld
SET(LDSCRIPT_M0 "-T${PATH_HACKRF_FIRMWARE_COMMON}/LPC43xx_M0_memory.ld -Tlibopencm3_lpc43xx_m0.ld")
SET(CFLAGS_COMMON "-Os -g3 -Wall -Wextra ${HACKRF_OPTS} ${COMMON_FLAGS} -fno-common -MD")
SET(CFLAGS_COMMON "-Os -g3 -Wall -Wextra ${HACKRF_OPTS} -fno-common -MD")
SET(LDFLAGS_COMMON "-nostartfiles -Wl,--gc-sections")
if(V STREQUAL "1")
@ -88,7 +91,7 @@ endif()
SET(CPUFLAGS_M0 "-mthumb -mcpu=cortex-m0 -mfloat-abi=soft")
SET(CFLAGS_M0 "-std=gnu99 ${CFLAGS_COMMON} ${CPUFLAGS_M0} -DLPC43XX_M0")
SET(CXXFLAGS_M0 "-std=gnu++0x ${CFLAGS_COMMON} ${CPUFLAGS_M0} -DLPC43XX_M0")
SET(LDFLAGS_M0 "${LDFLAGS_COMMON} ${CPUFLAGS_M0} ${LDSCRIPT_M0} -Xlinker -Map=m0.map --specs=nano.specs")
SET(LDFLAGS_M0 "${LDFLAGS_COMMON} ${CPUFLAGS_M0} ${LDSCRIPT_M0} -Xlinker -Map=m0.map")
SET(CPUFLAGS_M4 "-mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16")
SET(CFLAGS_M4 "-std=gnu99 ${CFLAGS_COMMON} ${CPUFLAGS_M4} -DLPC43XX_M4")

View File

@ -18,7 +18,7 @@
# Boston, MA 02110-1301, USA.
#
cmake_minimum_required(VERSION 2.8.9)
cmake_minimum_required(VERSION 3.1.3)
set(CMAKE_TOOLCHAIN_FILE ../toolchain-arm-cortex-m.cmake)
project(hackrf_usb C)

View File

@ -92,7 +92,8 @@ static const usb_request_handler_fn vendor_request_handler[] = {
usb_vendor_request_operacake_set_ranges,
usb_vendor_request_set_clkout_enable,
usb_vendor_request_spiflash_status,
usb_vendor_request_spiflash_clear_status
usb_vendor_request_spiflash_clear_status,
usb_vendor_request_operacake_gpio_test
};
static const uint32_t vendor_request_handler_count =

View File

@ -74,3 +74,18 @@ usb_request_status_t usb_vendor_request_operacake_set_ranges(
}
return USB_REQUEST_STATUS_OK;
}
usb_request_status_t usb_vendor_request_operacake_gpio_test(
usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage)
{
uint16_t test_result;
uint8_t address = endpoint->setup.value & 0xFF;
if (stage == USB_TRANSFER_STAGE_SETUP) {
test_result = gpio_test(address);
endpoint->buffer[0] = test_result & 0xff;
endpoint->buffer[1] = test_result >> 8;
usb_transfer_schedule_block(endpoint->in, &endpoint->buffer, 2, NULL, NULL);
usb_transfer_schedule_ack(endpoint->out);
}
return USB_REQUEST_STATUS_OK;
}

View File

@ -34,4 +34,7 @@ usb_request_status_t usb_vendor_request_operacake_set_ports(
usb_request_status_t usb_vendor_request_operacake_set_ranges(
usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage);
usb_request_status_t usb_vendor_request_operacake_gpio_test(
usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage);
#endif /* end of include guard: __USB_API_OPERACAKE_H__ */

View File

@ -22,10 +22,9 @@ set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSOR arm)
include(CMakeForceCompiler)
CMAKE_FORCE_C_COMPILER(arm-none-eabi-gcc GNU)
CMAKE_FORCE_CXX_COMPILER(arm-none-eabi-g++ GNU)
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
set(CMAKE_EXE_LINKER_FLAGS_INIT "--specs=nosys.specs")
execute_process(
COMMAND ${CMAKE_C_COMPILER} -print-file-name=libc.a

View File

@ -36,9 +36,9 @@ $Descr User 17000 11000
encoding utf-8
Sheet 3 4
Title "HackRF One baseband"
Date "13 feb 2014"
Date "2018-04-17"
Rev ""
Comp "Copyright 2012 Michael Ossmann"
Comp "Copyright 2012-2018 Michael Ossmann"
Comment1 "License: GPL v2"
Comment2 ""
Comment3 ""

View File

@ -36,9 +36,9 @@ $Descr User 17000 11000
encoding utf-8
Sheet 2 4
Title "HackRF One frontend"
Date "13 feb 2014"
Date "2018-04-17"
Rev ""
Comp "Copyright 2012 Michael Ossmann"
Comp "Copyright 2012-2018 Michael Ossmann"
Comment1 "License: GPL v2"
Comment2 ""
Comment3 ""
@ -1539,7 +1539,7 @@ Text Label 14350 7350 1 40 ~ 0
TX_AMP_OUT
Text Label 8500 8550 1 40 ~ 0
RX_AMP_OUT
Text Label 12300 9350 0 40 ~ 0
Text Label 11850 9100 0 40 ~ 0
RX_AMP_IN
$Comp
L GND #PWR036

View File

@ -2845,7 +2845,7 @@ EndCmp
BeginCmp
TimeStamp = /5037043E/4F825D1B;
Reference = U20;
ValeurCmp = W25Q80BV;
ValeurCmp = W25Q80;
IdModule = hackrf:GSG-SOIC8-208;
EndCmp

View File

@ -9630,7 +9630,7 @@
(fp_text reference U20 (at 0 0 180) (layer F.SilkS)
(effects (font (thickness 0.3048)))
)
(fp_text value W25Q80BV (at 0 0 180) (layer F.SilkS) hide
(fp_text value W25Q80 (at 0 0 180) (layer F.SilkS) hide
(effects (font (thickness 0.3048)))
)
(fp_circle (center -1.651 -1.651) (end -1.143 -1.651) (layer F.SilkS) (width 0.2032))

View File

@ -3452,11 +3452,11 @@
(sheetpath (names /mcu/usb/power/) (tstamps /5037043E/))
(tstamp 4F82F4C0))
(comp (ref U20)
(value W25Q80BV)
(value W25Q80)
(footprint hackrf:GSG-SOIC8-208)
(fields
(field (name Manufacturer) Winbond)
(field (name "Part Number") W25Q80JVSSIQ)
(field (name "Part Number") W25Q80DVSSIG)
(field (name Description) "IC FLASH 8MBIT 8SOIC"))
(libsource (lib hackrf) (part W25Q80BV))
(sheetpath (names /mcu/usb/power/) (tstamps /5037043E/))

View File

@ -1,4 +1,4 @@
update=Wed 13 Jul 2016 05:14:22 PM MDT
update=Tue 17 Apr 2018 06:35:23 AM MDT
version=1
last_client=kicad
[cvpcb]
@ -77,3 +77,13 @@ LibName27=atmel
LibName28=contrib
LibName29=valves
LibName30=hackrf
[schematic_editor]
version=1
PageLayoutDescrFile=
PlotDirectoryName=
SubpartIdSeparator=0
SubpartFirstId=65
NetFmtName=
SpiceForceRefPrefix=0
SpiceUseNetNumbers=0
LabSize=60

View File

@ -36,9 +36,9 @@ $Descr User 17000 11000
encoding utf-8
Sheet 1 4
Title "HackRF One"
Date "13 feb 2014"
Date "2018-04-17"
Rev ""
Comp "Copyright 2012 Michael Ossmann"
Comp "Copyright 2012-2018 Michael Ossmann"
Comment1 "License: GPL v2"
Comment2 ""
Comment3 ""

View File

@ -36,9 +36,9 @@ $Descr User 17000 11000
encoding utf-8
Sheet 4 4
Title "HackRF One mcu/usb/power"
Date "13 feb 2014"
Date "2018-04-17"
Rev ""
Comp "Copyright 2012 Michael Ossmann"
Comp "Copyright 2012-2018 Michael Ossmann"
Comment1 "License: GPL v2"
Comment2 ""
Comment3 ""
@ -2088,11 +2088,11 @@ L W25Q80BV U20
U 1 1 4F825D1B
P 9800 1450
F 0 "U20" H 9800 1200 60 0000 C CNN
F 1 "W25Q80JV" H 9800 1700 60 0000 C CNN
F 1 "W25Q80" H 9800 1700 60 0000 C CNN
F 2 "hackrf:GSG-SOIC8-208" H 9800 1450 60 0001 C CNN
F 3 "" H 9800 1450 60 0001 C CNN
F 4 "Winbond" H 9800 1450 60 0001 C CNN "Manufacturer"
F 5 "W25Q80JVSSIQ" H 9800 1450 60 0001 C CNN "Part Number"
F 5 "W25Q80DVSSIG" H 9800 1450 60 0001 C CNN "Part Number"
F 6 "IC FLASH 8MBIT 8SOIC" H 9800 1450 60 0001 C CNN "Description"
1 9800 1450
1 0 0 -1

View File

@ -59,14 +59,10 @@ ENDDEF
DEF C C 0 10 N Y 1 F N
F0 "C" 25 100 50 H V L CNN
F1 "C" 25 -100 50 H V L CNN
F2 "" 38 -150 50 H V C CNN
F3 "" 0 0 50 H V C CNN
F2 "" 38 -150 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
C?
C_????_*
C_????
SMD*_c
Capacitor*
C_*
$ENDFPLIST
DRAW
P 2 0 1 20 -80 -30 80 -30 N
@ -78,16 +74,17 @@ ENDDEF
#
# CONN_02X03
#
DEF CONN_02X03 P 0 1 Y N 1 F N
F0 "P" 0 200 50 H V C CNN
DEF CONN_02X03 J 0 1 Y N 1 F N
F0 "J" 0 200 50 H V C CNN
F1 "CONN_02X03" 0 -200 50 H V C CNN
F2 "" 0 -1200 50 H V C CNN
F3 "" 0 -1200 50 H V C CNN
F2 "" 0 -1200 50 H I C CNN
F3 "" 0 -1200 50 H I C CNN
$FPLIST
Pin_Header_Straight_2X03
Pin_Header_Angled_2X03
Socket_Strip_Straight_2X03
Socket_Strip_Angled_2X03
Pin_Header_Straight_2X*
Pin_Header_Angled_2X*
Socket_Strip_Straight_2X*
Socket_Strip_Angled_2X*
IDC_Header_Straight_*
$ENDFPLIST
DRAW
S -100 -95 -50 -105 0 1 0 N
@ -108,16 +105,17 @@ ENDDEF
#
# CONN_02X08
#
DEF CONN_02X08 P 0 1 Y N 1 F N
F0 "P" 0 450 50 H V C CNN
DEF CONN_02X08 J 0 1 Y N 1 F N
F0 "J" 0 450 50 H V C CNN
F1 "CONN_02X08" 0 0 50 V V C CNN
F2 "" 0 -1200 50 H V C CNN
F3 "" 0 -1200 50 H V C CNN
F2 "" 0 -1200 50 H I C CNN
F3 "" 0 -1200 50 H I C CNN
$FPLIST
Pin_Header_Straight_2X08
Pin_Header_Angled_2X08
Socket_Strip_Straight_2X08
Socket_Strip_Angled_2X08
Pin_Header_Straight_2X*
Pin_Header_Angled_2X*
Socket_Strip_Straight_2X*
Socket_Strip_Angled_2X*
IDC_Header_Straight_*
$ENDFPLIST
DRAW
S -100 -345 -50 -355 0 1 0 N
@ -158,16 +156,16 @@ ENDDEF
#
# CONN_02X11
#
DEF CONN_02X11 P 0 1 Y N 1 F N
F0 "P" 0 600 50 H V C CNN
DEF CONN_02X11 J 0 1 Y N 1 F N
F0 "J" 0 600 50 H V C CNN
F1 "CONN_02X11" 0 0 50 V V C CNN
F2 "" 0 -1200 50 H V C CNN
F3 "" 0 -1200 50 H V C CNN
F2 "" 0 -1200 50 H I C CNN
F3 "" 0 -1200 50 H I C CNN
$FPLIST
Pin_Header_Straight_2X11
Pin_Header_Angled_2X11
Socket_Strip_Straight_2X11
Socket_Strip_Angled_2X11
Pin_Header_Straight_2X*
Pin_Header_Angled_2X*
Socket_Strip_Straight_2X*
Socket_Strip_Angled_2X*
$ENDFPLIST
DRAW
S -100 -495 -50 -505 0 1 0 N
@ -220,16 +218,17 @@ ENDDEF
#
# CONN_02X13
#
DEF CONN_02X13 P 0 1 Y N 1 F N
F0 "P" 0 700 50 H V C CNN
DEF CONN_02X13 J 0 1 Y N 1 F N
F0 "J" 0 700 50 H V C CNN
F1 "CONN_02X13" 0 0 50 V V C CNN
F2 "" 0 -1150 50 H V C CNN
F3 "" 0 -1150 50 H V C CNN
F2 "" 0 -1150 50 H I C CNN
F3 "" 0 -1150 50 H I C CNN
$FPLIST
Pin_Header_Straight_2X13
Pin_Header_Angled_2X13
Socket_Strip_Straight_2X13
Socket_Strip_Angled_2X13
Pin_Header_Straight_2X*
Pin_Header_Angled_2X*
Socket_Strip_Straight_2X*
Socket_Strip_Angled_2X*
IDC_Header_Straight_*
$ENDFPLIST
DRAW
S -100 -595 -50 -605 0 1 0 N
@ -290,16 +289,17 @@ ENDDEF
#
# CONN_02X20
#
DEF CONN_02X20 P 0 1 Y N 1 F N
F0 "P" 0 1050 50 H V C CNN
DEF CONN_02X20 J 0 1 Y N 1 F N
F0 "J" 0 1050 50 H V C CNN
F1 "CONN_02X20" 0 0 50 V V C CNN
F2 "" 0 -950 50 H V C CNN
F3 "" 0 -950 50 H V C CNN
F2 "" 0 -950 50 H I C CNN
F3 "" 0 -950 50 H I C CNN
$FPLIST
Pin_Header_Straight_2X20
Pin_Header_Angled_2X20
Socket_Strip_Straight_2X20
Socket_Strip_Angled_2X20
Pin_Header_Straight_2X*
Pin_Header_Angled_2X*
Socket_Strip_Straight_2X*
Socket_Strip_Angled_2X*
IDC_Header_Straight_*
$ENDFPLIST
DRAW
S -100 -945 -50 -955 0 1 0 N
@ -405,8 +405,8 @@ ENDDEF
DEF GND #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -250 50 H I C CNN
F1 "GND" 0 -150 50 H V C CNN
F2 "" 0 0 50 H V C CNN
F3 "" 0 0 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
X GND 1 0 0 0 D 50 50 1 1 W N
@ -453,8 +453,8 @@ ENDDEF
DEF LED D 0 40 Y N 1 F N
F0 "D" 0 100 50 H V C CNN
F1 "LED" 0 -100 50 H V C CNN
F2 "" 0 0 50 H V C CNN
F3 "" 0 0 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
LED*
$ENDFPLIST
@ -527,11 +527,11 @@ ENDDEF
DEF R R 0 0 N Y 1 F N
F0 "R" 80 0 50 V V C CNN
F1 "R" 0 0 50 V V C CNN
F2 "" -70 0 50 V V C CNN
F3 "" 0 0 50 H V C CNN
F2 "" -70 0 50 V I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
R_*
Resistor_*
R_*
$ENDFPLIST
DRAW
S -40 -100 40 100 0 1 10 N
@ -600,8 +600,8 @@ ENDDEF
DEF VCC #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -150 50 H I C CNN
F1 "VCC" 0 150 50 H V C CNN
F2 "" 0 0 50 H V C CNN
F3 "" 0 0 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
C 0 75 25 0 1 0 N
P 2 0 1 0 0 0 0 50 N

View File

@ -1,4 +1,4 @@
(kicad_pcb (version 4) (host pcbnew 4.0.5+dfsg1-4)
(kicad_pcb (version 4) (host pcbnew 4.0.6)
(general
(links 598)
@ -517,6 +517,7 @@
(at 176.775 154.675)
(path /57F102E7)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DBG1 (at 0.7112 0) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127)))
)
@ -541,6 +542,7 @@
(at 176.775 155.9)
(path /57F102F1)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DBY1 (at 0.7112 0) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127)))
)
@ -565,6 +567,7 @@
(at 176.775 117.55)
(path /57F10301)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DBG4 (at 0.7112 0) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127)))
)
@ -589,6 +592,7 @@
(at 176.775 118.775)
(path /57F1030A)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DBY4 (at 0.7112 0) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127)))
)
@ -613,6 +617,7 @@
(at 176.775 129.925)
(path /57F102CF)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DBG3 (at 0.7112 0) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127)))
)
@ -637,6 +642,7 @@
(at 176.775 131.15)
(path /57F102D8)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DBY3 (at 0.7112 0) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127)))
)
@ -661,6 +667,7 @@
(at 63.225 118.775 180)
(path /57F0F0A3)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DAY4 (at 0.7112 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127)))
)
@ -685,6 +692,7 @@
(at 63.225 117.55 180)
(path /57F0F09A)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DAG4 (at 0.7112 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127)))
)
@ -709,6 +717,7 @@
(at 67.5 136.75 180)
(path /57ED4222)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C1 (at 0 0.0508 180) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -729,6 +738,7 @@
(at 67.5 112 180)
(path /57EF11C4)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C2 (at 0 0.0508 180) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -749,6 +759,7 @@
(at 167.5 136.75)
(path /57EF1B35)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C3 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -769,6 +780,7 @@
(at 172.5 112)
(path /57EF1B93)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C4 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -789,6 +801,7 @@
(at 67.5 149.125 180)
(path /57EF0A53)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C5 (at 0 0.0508 180) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -809,6 +822,7 @@
(at 67.5 124.375 180)
(path /57EF11F3)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C6 (at 0 0.0508 180) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -829,6 +843,7 @@
(at 167.5 149.525)
(path /57EF1B65)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C7 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -849,6 +864,7 @@
(at 172.5 124.375)
(path /57EF1BC2)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C8 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -869,6 +885,7 @@
(at 115.09248 165.8874 180)
(path /57EDB85B)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C9 (at 0 0.0508 180) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -889,6 +906,7 @@
(at 123.87072 165.36416 180)
(path /57EDC2D6)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C10 (at 0 0.0508 180) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -909,6 +927,7 @@
(at 67.5 161.5 180)
(path /57ECFA66)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C11 (at 0 0.0508 180) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -929,6 +948,7 @@
(at 172.475 161.5)
(path /57ED7255)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C12 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -949,6 +969,7 @@
(at 69.1 136.2 90)
(path /57ED4219)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference D1 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -969,6 +990,7 @@
(at 69.1 111.5 90)
(path /57EF11BB)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference D2 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -989,6 +1011,7 @@
(at 165.9 136.3 90)
(path /57EF1B2C)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference D3 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -1009,6 +1032,7 @@
(at 170.9 111.5 90)
(path /57EF1B8A)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference D4 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -1029,6 +1053,7 @@
(at 69.1 148.6 90)
(path /57EF0A4A)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference D5 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -1049,6 +1074,7 @@
(at 69.1 123.9 90)
(path /57EF11EA)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference D6 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -1069,6 +1095,7 @@
(at 165.9 149 90)
(path /57EF1B5C)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference D7 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -1089,6 +1116,7 @@
(at 170.9 123.9 90)
(path /57EF1BB9)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference D8 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -1109,6 +1137,7 @@
(at 69.1 161 90)
(path /57ECF9D2)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference D9 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -1129,6 +1158,7 @@
(at 170.9 161 90)
(path /57ED724C)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference D10 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -1149,6 +1179,7 @@
(at 63.225 167.05 180)
(path /57F14A76)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DA0 (at 0.7112 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127)))
)
@ -1173,6 +1204,7 @@
(at 63.225 154.675 180)
(path /57F0F080)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DAG1 (at 0.7112 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127)))
)
@ -1197,6 +1229,7 @@
(at 63.225 142.3 180)
(path /57EFE38F)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DAG2 (at 0.7112 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127)))
)
@ -1221,6 +1254,7 @@
(at 63.225 129.925 180)
(path /57F0CF06)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DAG3 (at 0.7112 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127)))
)
@ -1245,6 +1279,7 @@
(at 63.225 155.9 180)
(path /57F0F08A)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DAY1 (at 0.7112 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127)))
)
@ -1269,6 +1304,7 @@
(at 63.225 143.525 180)
(path /57F0174D)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DAY2 (at 0.7112 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127)))
)
@ -1293,6 +1329,7 @@
(at 63.225 131.15 180)
(path /57F0CF0F)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DAY3 (at 0.7112 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127)))
)
@ -1317,6 +1354,7 @@
(at 176.775 167.05)
(path /57F14A80)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DB0 (at 0.7112 0) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127)))
)
@ -1341,6 +1379,7 @@
(at 176.775 142.3)
(path /57F102B1)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DBG2 (at 0.7112 0) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127)))
)
@ -1365,6 +1404,7 @@
(at 176.775 143.525)
(path /57F102BB)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DBY2 (at 0.7112 0) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127)))
)
@ -2417,6 +2457,7 @@
(at 112.3188 130.048 90)
(path /57F026AD)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R1 (at 0 0 90) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524)))
)
@ -2437,6 +2478,7 @@
(at 112.4966 124.968 90)
(path /57F1320C)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R2 (at 0 0 90) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524)))
)
@ -2457,6 +2499,7 @@
(at 110.49 123.4694 270)
(path /57F0E70A)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R3 (at 0 0 270) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524)))
)
@ -2477,6 +2520,7 @@
(at 110.4646 128.5748 270)
(path /57F12932)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R4 (at 0 0 270) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524)))
)
@ -2497,6 +2541,7 @@
(at 134.5 140.5 90)
(path /57F1ECB2)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R5 (at 0 0 90) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524)))
)
@ -2517,6 +2562,7 @@
(at 136.5 140.5 90)
(path /57F1EEC6)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R6 (at 0 0 90) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524)))
)
@ -2577,6 +2623,7 @@
(at 131.5 139.5)
(path /57F40DD9)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R9 (at 0 0) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524)))
)
@ -2597,6 +2644,7 @@
(at 130.74396 133.91388)
(path /57F3C15B)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R10 (at 0 0) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524)))
)
@ -2617,6 +2665,7 @@
(at 140.589 128.79324)
(path /57F42B49)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R11 (at 0 0) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524)))
)
@ -2637,6 +2686,7 @@
(at 130.77 106.8236)
(path /57F4A26A)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R12 (at 0 0) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524)))
)
@ -2657,6 +2707,7 @@
(at 125.5 126 90)
(path /57F4A395)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R13 (at 0 0 90) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524)))
)
@ -2677,6 +2728,7 @@
(at 134.77 106.8236)
(path /57F4A4C3)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R14 (at 0 0) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524)))
)
@ -2697,6 +2749,7 @@
(at 138.7 121.7 180)
(path /57F4A5F4)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R15 (at 0 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524)))
)
@ -2717,6 +2770,7 @@
(at 117.336777 136.475619 180)
(path /57F4A728)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R16 (at 0 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524)))
)
@ -2737,6 +2791,7 @@
(at 150.2 149.6 90)
(path /57F381DD)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R17 (at 0 0 90) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524)))
)
@ -2757,6 +2812,7 @@
(at 152.7 149.6 90)
(path /57F40B96)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R18 (at 0 0 90) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524)))
)
@ -2777,6 +2833,7 @@
(at 155.2 149.6 90)
(path /57F40CBA)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R19 (at 0 0 90) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524)))
)
@ -2797,6 +2854,7 @@
(at 128.1 135.8 270)
(path /57FC84C7)
(solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R20 (at 0 0 270) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524)))
)
@ -3238,6 +3296,7 @@
(path /57ED7D40)
(solder_mask_margin 0.07112)
(clearance 0.1524)
(attr smd)
(fp_text reference U1 (at 0 0 180) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.2)))
)
@ -3296,6 +3355,7 @@
(module gsg-modules:SKY13322-375LF (layer C1F) (tedit 57F1C8D1) (tstamp 57F1D867)
(at 83 130.5625)
(path /57ED2FAA)
(attr smd)
(fp_text reference U2 (at 0 0.5) (layer F.SilkS)
(effects (font (size 0.6 0.5) (thickness 0.1)))
)
@ -3342,6 +3402,7 @@
(module gsg-modules:SKY13322-375LF (layer C1F) (tedit 57F1C8D1) (tstamp 57F1D87A)
(at 157 130.5625 180)
(path /57EF1C07)
(attr smd)
(fp_text reference U3 (at 0 0.5 180) (layer F.SilkS)
(effects (font (size 0.6 0.5) (thickness 0.1)))
)
@ -3388,6 +3449,7 @@
(module gsg-modules:TSSOP16 (layer C1F) (tedit 5605DC3A) (tstamp 57F1D88E)
(at 136 134 90)
(path /57F3AE6E)
(attr smd)
(fp_text reference U4 (at 1.3 0 180) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
@ -3436,6 +3498,7 @@
(module gsg-modules:TSSOP20 (layer C1F) (tedit 57F1CC68) (tstamp 57F1D8AB)
(at 145 122 180)
(path /57F25F57)
(attr smd)
(fp_text reference U5 (at 1.3 0 270) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
@ -3492,6 +3555,7 @@
(module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8B5)
(at 117.336777 128.975619 90)
(path /57FC9246)
(attr smd)
(fp_text reference U6 (at 0 -0.18 90) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.12)))
)
@ -3520,6 +3584,7 @@
(module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8BF)
(at 117.336777 123.975619 90)
(path /57FCC959)
(attr smd)
(fp_text reference U7 (at 0 -0.18 90) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.12)))
)
@ -3548,6 +3613,7 @@
(module gsg-modules:SOT353-1 (layer C1F) (tedit 57E1C050) (tstamp 57F1D8C8)
(at 127.7506 109.5596 90)
(path /57EEFD9C)
(attr smd)
(fp_text reference U8 (at 0 -0.18 90) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.1)))
)
@ -3574,6 +3640,7 @@
(module gsg-modules:SOT353-1 (layer C1F) (tedit 57E1C050) (tstamp 57F1D8D1)
(at 134.5298 109.4778 270)
(path /57EF9417)
(attr smd)
(fp_text reference U9 (at 0 -0.18 270) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.1)))
)
@ -3600,6 +3667,7 @@
(module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8DB)
(at 127.95504 113.32464 180)
(path /57EF011E)
(attr smd)
(fp_text reference U10 (at 0 -0.18 180) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.12)))
)
@ -3628,6 +3696,7 @@
(module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8E5)
(at 132.05968 113.3856 180)
(path /57EF9429)
(attr smd)
(fp_text reference U11 (at 0 -0.18 180) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.12)))
)
@ -3656,6 +3725,7 @@
(module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8EF)
(at 127.83312 119.60352 180)
(path /57EF3F5A)
(attr smd)
(fp_text reference U12 (at 0 -0.18 180) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.12)))
)
@ -3684,6 +3754,7 @@
(module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8F9)
(at 132.0546 119.61876 180)
(path /57EF9432)
(attr smd)
(fp_text reference U13 (at 0 -0.18 180) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.12)))
)
@ -3712,6 +3783,7 @@
(module gsg-modules:SOT353-1 (layer C1F) (tedit 57E1C050) (tstamp 57F1D902)
(at 128 127 180)
(path /57EEFEA7)
(attr smd)
(fp_text reference U14 (at 0 -0.18 180) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.1)))
)
@ -3738,6 +3810,7 @@
(module gsg-modules:SOT353-1 (layer C1F) (tedit 57E1C050) (tstamp 57F1D90B)
(at 132 127 180)
(path /57EF9420)
(attr smd)
(fp_text reference U15 (at 0 -0.18 180) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.1)))
)
@ -3764,6 +3837,7 @@
(module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D915)
(at 117.336777 133.975619 90)
(path /57EEFF63)
(attr smd)
(fp_text reference U16 (at 0 -0.18 90) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.12)))
)
@ -3992,6 +4066,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 595A86A8) (tstamp 595A7CE9)
(at 85.344 132.588 270)
(path /5950597B)
(attr smd)
(fp_text reference C13 (at 0 0 270) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4011,6 +4086,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7CEF)
(at 80.1116 131.7244 270)
(path /59506EAE)
(attr smd)
(fp_text reference C14 (at 0 0.0508 270) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4030,6 +4106,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7CF5)
(at 80.0862 129.4638 270)
(path /59506764)
(attr smd)
(fp_text reference C15 (at 0 0.0508 270) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4049,6 +4126,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7CFB)
(at 85.598 128.9558 180)
(path /59505F07)
(attr smd)
(fp_text reference C16 (at 0 0.0508 180) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4068,6 +4146,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D01)
(at 116.4082 167.7416 270)
(path /59504505)
(attr smd)
(fp_text reference C17 (at 0 0.0508 270) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4087,6 +4166,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D07)
(at 123.5964 167.6908 270)
(path /59504CB0)
(attr smd)
(fp_text reference C18 (at 0 0.0508 270) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4106,6 +4186,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D0D)
(at 154.13736 129.3114 90)
(path /59503551)
(attr smd)
(fp_text reference C19 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4125,6 +4206,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D13)
(at 159.6136 129.4638 90)
(path /59501F48)
(attr smd)
(fp_text reference C20 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4144,6 +4226,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D19)
(at 159.6136 131.7244 90)
(path /595027F2)
(attr smd)
(fp_text reference C21 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4163,6 +4246,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D1F)
(at 154.1526 131.79552 90)
(path /59503203)
(attr smd)
(fp_text reference C22 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4182,6 +4266,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D25)
(at 113.87328 129.32664 90)
(path /5950507B)
(attr smd)
(fp_text reference C23 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4201,6 +4286,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D2B)
(at 124.41174 110.74146 90)
(path /5950ECBD)
(attr smd)
(fp_text reference C24 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4220,6 +4306,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D31)
(at 127.3556 116.8527)
(path /5950F8F8)
(attr smd)
(fp_text reference C25 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4239,6 +4326,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D37)
(at 127.29972 123.18492)
(path /5951F244)
(attr smd)
(fp_text reference C26 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4258,6 +4346,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D3D)
(at 128.1684 130.302)
(path /595200CF)
(attr smd)
(fp_text reference C27 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4277,6 +4366,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D43)
(at 113.9571 123.72594 270)
(path /595064F7)
(attr smd)
(fp_text reference C28 (at 0 0.0508 270) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4296,6 +4386,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D49)
(at 137.8077 108.28782 270)
(path /5950C936)
(attr smd)
(fp_text reference C29 (at 0 0.0508 270) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4315,6 +4406,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D4F)
(at 131.76504 117.30228)
(path /595103E6)
(attr smd)
(fp_text reference C30 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4334,6 +4426,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D55)
(at 132.52704 123.14428 180)
(path /5951FCE0)
(attr smd)
(fp_text reference C31 (at 0 0.0508 180) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4353,6 +4446,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D5B)
(at 132.02412 129.98196)
(path /5951FEC9)
(attr smd)
(fp_text reference C32 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4372,6 +4466,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D61)
(at 113.67262 134.69112 90)
(path /5953EF33)
(attr smd)
(fp_text reference C33 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4391,6 +4486,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 59E123B3)
(at 132.03936 131.38912)
(path /59D87D2E)
(attr smd)
(fp_text reference C34 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4410,6 +4506,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 59E123BD)
(at 141.53388 126.49962 180)
(path /59D88437)
(attr smd)
(fp_text reference C35 (at 0 0.0508 180) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016)))
)
@ -4438,34 +4535,34 @@
(gr_text A0 (at 150.2 158.7) (layer F.SilkS)
(effects (font (size 0.8 0.6) (thickness 0.1)))
)
(gr_text PB4 (at 173 113.725) (layer F.SilkS)
(gr_text B4 (at 173 113.725) (layer F.SilkS)
(effects (font (size 1.016 0.762) (thickness 0.1905)))
)
(gr_text PB3 (at 173 126.1) (layer F.SilkS)
(gr_text B3 (at 173 126.1) (layer F.SilkS)
(effects (font (size 1.016 0.762) (thickness 0.1905)))
)
(gr_text PB2 (at 167.5 138.475) (layer F.SilkS)
(gr_text B2 (at 167.5 138.475) (layer F.SilkS)
(effects (font (size 1.016 0.762) (thickness 0.1905)))
)
(gr_text PB1 (at 167.5 150.85) (layer F.SilkS)
(gr_text B1 (at 167.5 150.85) (layer F.SilkS)
(effects (font (size 1.016 0.762) (thickness 0.1905)))
)
(gr_text PB0 (at 173 163.25) (layer F.SilkS)
(gr_text B0 (at 173 163.25) (layer F.SilkS)
(effects (font (size 1.016 0.762) (thickness 0.1905)))
)
(gr_text PA4 (at 67 113.75) (layer F.SilkS)
(gr_text A4 (at 67 113.75) (layer F.SilkS)
(effects (font (size 1.016 0.762) (thickness 0.1905)))
)
(gr_text PA3 (at 67 126.125) (layer F.SilkS)
(gr_text A3 (at 67 126.125) (layer F.SilkS)
(effects (font (size 1.016 0.762) (thickness 0.1905)))
)
(gr_text PA2 (at 67 138.5) (layer F.SilkS)
(gr_text A2 (at 67 138.5) (layer F.SilkS)
(effects (font (size 1.016 0.762) (thickness 0.1905)))
)
(gr_text PA1 (at 67 150.875) (layer F.SilkS)
(gr_text A1 (at 67 150.875) (layer F.SilkS)
(effects (font (size 1.016 0.762) (thickness 0.1905)))
)
(gr_text PA0 (at 67 163.25) (layer F.SilkS)
(gr_text A0 (at 67 163.25) (layer F.SilkS)
(effects (font (size 1.016 0.762) (thickness 0.1905)))
)
(gr_text J2 (at 96.25 167) (layer F.SilkS)
@ -4597,7 +4694,7 @@
(gr_text 1 (at 164.9 101.3) (layer C1F)
(effects (font (size 1.016 1.016) (thickness 0.1778)))
)
(gr_text "4 October 2016" (at 113.58 111.17) (layer F.SilkS)
(gr_text "30 October 2018" (at 113.58 111.17) (layer F.SilkS)
(effects (font (size 1.778 1.27) (thickness 0.3048)))
)
(gr_text P9 (at 98.1 125.47) (layer F.SilkS)
@ -4629,7 +4726,7 @@
(gr_text P28 (at 119.5 143.25 90) (layer F.SilkS)
(effects (font (size 1.016 0.762) (thickness 0.1905)))
)
(gr_text http://greatscottgadgets.com/hackrf/ (at 152.8878 171.2154) (layer F.SilkS)
(gr_text https://greatscottgadgets.com/hackrf/ (at 152.8878 171.2154) (layer F.SilkS)
(effects (font (size 1.778 1.27) (thickness 0.3048)))
)

View File

@ -215,7 +215,9 @@ F 0 "P28" H 5550 10100 60 0000 C CNN
F 1 "SD" V 5550 9500 60 0000 C CNN
F 2 "gsg-modules:HEADER-2x11" H 5550 9500 60 0001 C CNN
F 3 "" H 5550 9500 60 0001 C CNN
F 4 "DNP" H 5550 8850 60 0000 C CNN "Note"
F 4 "Samtec" H 5550 9500 60 0001 C CNN "Manufacturer"
F 5 "SSQ-111-03-G-D" H 5550 9500 60 0001 C CNN "Part Number"
F 6 "CONN RCPT .100\" 22POS DUAL GOLD" H 5550 9500 60 0001 C CNN "Description"
1 5550 9500
1 0 0 -1
$EndComp
@ -238,6 +240,9 @@ F 0 "P22" H 6700 10300 50 0000 C CNN
F 1 "I2S" V 6700 9600 40 0000 C CNN
F 2 "gsg-modules:HEADER-2x13" H 6700 9600 60 0001 C CNN
F 3 "" H 6700 9600 60 0001 C CNN
F 4 "Samtec" H 6700 9600 60 0001 C CNN "Manufacturer"
F 5 "SSQ-113-03-G-D" H 6700 9600 60 0001 C CNN "Part Number"
F 6 "CONN RCPT .100\" 26POS DUAL GOLD" H 6700 9600 60 0001 C CNN "Description"
1 6700 9600
1 0 0 -1
$EndComp
@ -2102,6 +2107,9 @@ F 0 "P20" H 8300 10100 60 0000 C CNN
F 1 "GPIO" V 8300 9500 50 0000 C CNN
F 2 "gsg-modules:HEADER-2x11" H 8300 9500 60 0001 C CNN
F 3 "" H 8300 9500 60 0001 C CNN
F 4 "Samtec" H 8300 9500 60 0001 C CNN "Manufacturer"
F 5 "SSQ-111-03-G-D" H 8300 9500 60 0001 C CNN "Part Number"
F 6 "CONN RCPT .100\" 22POS DUAL GOLD" H 8300 9500 60 0001 C CNN "Desciption"
1 8300 9500
1 0 0 -1
$EndComp
@ -2113,6 +2121,9 @@ F 0 "P1" H 7850 7450 50 0000 C CNN
F 1 "ADDRESS" H 7850 7050 50 0000 C CNN
F 2 "gsg-modules:HEADER-2x3" H 7850 6050 60 0001 C CNN
F 3 "" H 7850 6050 60 0000 C CNN
F 4 "Omron" H 7850 7250 60 0001 C CNN "Manufacturer"
F 5 "XG8T-0631" H 7850 7250 60 0001 C CNN "Part Number"
F 6 "JUMPER PLUG 6POS DOUBLE ROW" H 7850 7250 60 0001 C CNN "Description"
1 7850 7250
1 0 0 -1
$EndComp
@ -2176,7 +2187,10 @@ F 0 "P9" H 4450 9750 50 0000 C CNN
F 1 "BASEBAND" V 4450 9300 50 0000 C CNN
F 2 "gsg-modules:HEADER-2x8" H 4450 8100 60 0001 C CNN
F 3 "" H 4450 8100 60 0000 C CNN
F 4 "DNP" H 4450 8800 60 0000 C CNN "Note"
F 4 "Samtec" H 4450 9300 60 0001 C CNN "Manufacturer"
F 5 "SSQ-108-03-G-D" H 4450 9300 60 0001 C CNN "Part Number"
F 6 "CONN RCPT .100\" 16POS DUAL GOLD" H 4450 9300 60 0001 C CNN "Description"
F 7 "DNP" H 4450 8800 60 0000 C CNN "Note"
1 4450 9300
1 0 0 -1
$EndComp
@ -2293,7 +2307,7 @@ SCL
Text Notes 1750 6650 0 40 ~ 0
test points
Text Notes 9500 9900 0 40 ~ 0
Quick mode: When enabled by !OE (U4 IO7), RF switches are\ncontrolled by GPIO instead of I2C. U4 IO2 through IO6 must\nbe configured as inputs.
Quick mode: When enabled by !OE (U4 IO7), RF switches are\ncontrolled by GPIO or SCT instead of I2C. U4 IO2 through IO6\nmust be configured as inputs.
Text Notes 12900 8050 0 40 ~ 0
Control logic guarantees valid RF switch\nconfiguration and reduces the number\nof external control signals required.
Text Notes 12700 2900 0 40 ~ 0

View File

@ -24,6 +24,8 @@
set(INSTALL_DEFAULT_BINDIR "bin" CACHE STRING "Appended to CMAKE_INSTALL_PREFIX")
find_package(FFTW REQUIRED)
include_directories(${FFTW_INCLUDE_DIRS})
link_directories(${FFTW_LIBRARY_DIRS})
SET(TOOLS
hackrf_transfer

View File

@ -36,6 +36,9 @@ typedef int bool;
#define FREQ_MAX_MHZ (7250) /* 7250 MHz */
#define MAX_FREQ_RANGES 8
#define INVALID_ADDRESS 0xFF
#define INVALID_PORT 0xFF
static void usage() {
printf("\nUsage:\n");
printf("\t-h, --help: this help\n");
@ -45,12 +48,14 @@ static void usage() {
printf("\t-b <n>: set port B connection\n");
printf("\t-f <min:max:port>: automatically assign <port> for range <min:max> in MHz\n");
printf("\t-l, --list: list available operacake boards\n");
printf("\t-g, --gpio_test: test GPIO functionality of an opera cake\n");
}
static struct option long_options[] = {
{ "device", no_argument, 0, 'd' },
{ "address", no_argument, 0, 'o' },
{ "list", no_argument, 0, 'v' },
{ "list", no_argument, 0, 'l' },
{ "gpio_test", no_argument, 0, 'g' },
{ "help", no_argument, 0, 'h' },
{ 0, 0, 0, 0 },
};
@ -72,64 +77,75 @@ int parse_uint16(char* const s, uint16_t* const value) {
}
}
int parse_u16_range(char* s, hackrf_oc_range* range) {
int result = 0;
uint16_t tmp_port, port = 0;
int parse_port(char* str, uint8_t* port) {
uint16_t tmp_port;
int result;
if(str[0] == 'A' || str[0] == 'B') {
// The port was specified as a side and number eg. A1 or B3
result = parse_uint16(str+1, &tmp_port);
if (result != HACKRF_SUCCESS)
return result;
if(tmp_port >= 5 || tmp_port <= 0) {
fprintf(stderr, "invalid port: %s\n", str);
return HACKRF_ERROR_INVALID_PARAM;
}
// Value was a valid port between 0-4
if(str[0] == 'A') {
// A1=0, A2=1, A3=2, A4=3
tmp_port -= 1;
} else {
// If B was specfied just add 4-1 ports
// B1=4, B2=5, B3=6, B4=7
tmp_port += 3;
}
} else {
result = parse_uint16(str, &tmp_port);
if (result != HACKRF_SUCCESS)
return result;
}
*port = tmp_port & 0xFF;
// printf("Port: %d\n", *port);
return HACKRF_SUCCESS;
}
int parse_range(char* s, hackrf_oc_range* range) {
int result;
char *sep = strchr(s, ':');
if (!sep)
return HACKRF_ERROR_INVALID_PARAM;
// Replace : separator to null terminate string for strtol()
*sep = 0;
sep++; // Skip past the separator
char *sep2 = strchr(sep+1, ':');
char *sep2 = strchr(sep, ':');
if (!sep2)
return HACKRF_ERROR_INVALID_PARAM;
// Replace : separator to null terminate string for strtol()
*sep2 = 0;
sep2++; // Skip past the separator
result = parse_uint16(s, &range->freq_min);
if (result != HACKRF_SUCCESS)
return result;
result = parse_uint16(sep + 1, &range->freq_max);
result = parse_uint16(sep, &range->freq_max);
if (result != HACKRF_SUCCESS)
return result;
sep2++; // Skip past the ':'
if(sep2[0] == 'A' || sep2[0] == 'B') {
// The port was specified as a side and number eg. A1 or B3
if(sep2[1] > 0x30 && sep2[1] < 0x35) {
tmp_port = sep2[1] - 0x30;
if(tmp_port >= 5 || tmp_port <= 0)
return HACKRF_ERROR_INVALID_PARAM;
// Value was a valid port between 0-4
if(sep2[0] == 'A') {
// A1=0, A2=1, A3=2, A4=3
port = (uint16_t) tmp_port-1;
} else {
// If B was specfied just add 4-1 ports
// B1=4, B2=5, B3=6, B4=7
port = (uint16_t) tmp_port+3;
}
//printf("Setting port %c%c to port %d\n", sep2[0], sep2[1], (uint16_t)port);
}
} else {
result = parse_uint16(sep2, &port);
if (result != HACKRF_SUCCESS)
return result;
}
range->port = port & 0xFF;
return HACKRF_SUCCESS;
result = parse_port(sep2, &(range->port));
return result;
}
int main(int argc, char** argv) {
int opt;
const char* serial_number = NULL;
int operacake_address = 0;
int port_a = 0;
int port_b = 0;
uint8_t operacake_address = INVALID_ADDRESS;
uint8_t port_a = INVALID_PORT;
uint8_t port_b = INVALID_PORT;
bool set_ports = false;
bool list = false;
bool gpio_test = false;
uint8_t operacakes[8];
uint8_t operacake_count = 0;
int i = 0;
@ -144,7 +160,7 @@ int main(int argc, char** argv) {
return -1;
}
while( (opt = getopt_long(argc, argv, "d:o:a:b:lf:h?", long_options, &option_index)) != EOF ) {
while( (opt = getopt_long(argc, argv, "d:o:a:b:lf:hg?", long_options, &option_index)) != EOF ) {
switch( opt ) {
case 'd':
serial_number = optarg;
@ -152,11 +168,21 @@ int main(int argc, char** argv) {
case 'o':
operacake_address = atoi(optarg);
set_ports = true;
break;
case 'f':
result = parse_u16_range(optarg, &ranges[range_idx]);
if(MAX_FREQ_RANGES == range_idx) {
fprintf(stderr,
"argument error: specify a maximum of %u frequency ranges.\n",
MAX_FREQ_RANGES);
usage();
return EXIT_FAILURE;
}
result = parse_range(optarg, &ranges[range_idx]);
if (result != HACKRF_SUCCESS) {
fprintf(stderr, "failed to parse range\n");
return EXIT_FAILURE;
}
if(ranges[range_idx].freq_min >= ranges[range_idx].freq_max) {
fprintf(stderr,
"argument error: freq_max must be greater than freq_min.\n");
@ -170,26 +196,35 @@ int main(int argc, char** argv) {
usage();
return EXIT_FAILURE;
}
if(MAX_FREQ_RANGES <= range_idx++) {
fprintf(stderr,
"argument error: specify a maximum of %u frequency ranges.\n",
MAX_FREQ_RANGES);
usage();
return EXIT_FAILURE;
}
range_idx++;
break;
case 'a':
port_a = atoi(optarg);
result = parse_port(optarg, &port_a);
if (result != HACKRF_SUCCESS) {
fprintf(stderr, "failed to parse port\n");
return EXIT_FAILURE;
}
set_ports = true;
break;
case 'b':
port_b = atoi(optarg);
result = parse_port(optarg, &port_b);
if (result != HACKRF_SUCCESS) {
fprintf(stderr, "failed to parse port\n");
return EXIT_FAILURE;
}
set_ports = true;
break;
case 'l':
list = true;
break;
case 'g':
gpio_test = true;
break;
case 'h':
case '?':
usage();
@ -202,8 +237,14 @@ int main(int argc, char** argv) {
}
}
if(!(list || set_ports || range_idx)) {
fprintf(stderr, "Specify either list or address option.\n");
if(!(list || set_ports || range_idx || gpio_test)) {
fprintf(stderr, "Specify either list, address, or GPIO test option.\n");
usage();
return EXIT_FAILURE;
}
if((set_ports || gpio_test) && (operacake_address == INVALID_ADDRESS)) {
fprintf(stderr, "An address is required.\n");
usage();
return EXIT_FAILURE;
}
@ -234,16 +275,82 @@ int main(int argc, char** argv) {
printf("\n");
}
if(gpio_test) {
uint16_t test_result;
uint8_t reg, mask = 0x7;
result = hackrf_operacake_gpio_test(device, operacake_address, &test_result);
if (result != HACKRF_SUCCESS) {
fprintf(stderr, "hackrf_operacake_gpio_test() failed: %s (%d)\n",
hackrf_error_name(result), result);
return EXIT_FAILURE;
}
if(test_result) {
fprintf(stderr, "GPIO test failed\n");
fprintf(stderr, "Pin\tHigh\tShorts\tLow\n");
reg = test_result & mask;
fprintf(stderr, "u2ctrl1\t%d\t%d\t%d\n",
(reg>>2) & 1,
(reg>>1) & 1,
reg & 1);
test_result >>= 3;
reg = test_result & mask;
fprintf(stderr, "u2ctrl0\t%d\t%d\t%d\n",
(reg>>2) & 1,
(reg>>1) & 1,
reg & 1);
test_result >>= 3;
reg = test_result & mask;
fprintf(stderr, "u3ctrl1\t%d\t%d\t%d\n",
(reg>>2) & 1,
(reg>>1) & 1,
reg & 1);
test_result >>= 3;
reg = test_result & mask;
fprintf(stderr, "u3ctrl0\t%d\t%d\t%d\n",
(reg>>2) & 1,
(reg>>1) & 1,
reg & 1);
test_result >>= 3;
reg = test_result & mask;
fprintf(stderr, "u1ctrl \t%d\t%d\t%d\n",
(reg>>2) & 1,
(reg>>1) & 1,
reg & 1);
} else {
fprintf(stderr, "GPIO test passed\n");
}
}
if(set_ports) {
// Set other port to "don't care" if not set
if(port_a == INVALID_PORT) {
if(port_b >= 4) {
port_a = 0;
} else {
port_a = 4;
}
}
if(port_b == INVALID_PORT) {
if(port_a >= 4) {
port_b = 0;
} else {
port_b = 4;
}
}
if(((port_a<=3) && (port_b<=3)) || ((port_a>=4) && (port_b>=4))) {
fprintf(stderr, "Port A and B cannot be connected to the same side\n");
return EXIT_FAILURE;
}
result = hackrf_set_operacake_ports(device, operacake_address, port_a, port_b);
if( result ) {
printf("hackrf_set_operacake_ports() failed: %s (%d)\n", hackrf_error_name(result), result);
return -1;
return EXIT_FAILURE;
}
}
if(range_idx) {
uint8_t range_bytes[MAX_FREQ_RANGES * 5];
uint8_t range_bytes[MAX_FREQ_RANGES * sizeof(hackrf_oc_range)];
uint8_t ptr;
for(i=0; i<range_idx; i++) {
ptr = 5*i;

View File

@ -102,10 +102,13 @@ int gettimeofday(struct timeval *tv, void* ignored) {
#define THROWAWAY_BLOCKS 2
#if defined _WIN32
#define sleep(a) Sleep( (a*1000) )
#define m_sleep(a) Sleep( (a) )
#else
#define m_sleep(a) usleep((a*1000))
#endif
uint32_t num_samples = SAMPLES_PER_BLOCK;
uint32_t num_sweeps = 0;
int num_ranges = 0;
uint16_t frequencies[MAX_SWEEP_RANGES*2];
int step_count;
@ -179,6 +182,7 @@ uint32_t antenna_enable;
bool binary_output = false;
bool ifft_output = false;
bool one_shot = false;
bool finite_mode = false;
volatile bool sweep_started = false;
int fftSize = 20;
@ -245,6 +249,9 @@ int rx_callback(hackrf_transfer* transfer) {
if(one_shot) {
do_exit = true;
}
else if(finite_mode && sweep_count == num_sweeps) {
do_exit = true;
}
}
sweep_started = true;
time_stamp = usb_transfer_time;
@ -352,6 +359,7 @@ static void usage() {
fprintf(stderr, "\t[-n num_samples] # Number of samples per frequency, 8192-4294967296\n");
fprintf(stderr, "\t[-w bin_width] # FFT bin width (frequency resolution) in Hz\n");
fprintf(stderr, "\t[-1] # one shot mode\n");
fprintf(stderr, "\t[-N num_sweeps] # Number of sweeps to perform\n");
fprintf(stderr, "\t[-B] # binary output\n");
fprintf(stderr, "\t[-I] # binary inverse FFT output\n");
fprintf(stderr, "\t-r filename # output file\n");
@ -393,7 +401,7 @@ int main(int argc, char** argv) {
uint32_t requested_fft_bin_width;
while( (opt = getopt(argc, argv, "a:f:p:l:g:d:n:w:1BIr:h?")) != EOF ) {
while( (opt = getopt(argc, argv, "a:f:p:l:g:d:n:N:w:1BIr:h?")) != EOF ) {
result = HACKRF_SUCCESS;
switch( opt )
{
@ -450,6 +458,11 @@ int main(int argc, char** argv) {
result = parse_u32(optarg, &num_samples);
break;
case 'N':
finite_mode = true;
result = parse_u32(optarg, &num_sweeps);
break;
case 'w':
result = parse_u32(optarg, &requested_fft_bin_width);
fftSize = DEFAULT_SAMPLE_RATE_HZ / requested_fft_bin_width;
@ -693,8 +706,8 @@ int main(int argc, char** argv) {
fprintf(stderr, "Stop with Ctrl-C\n");
while((hackrf_is_streaming(device) == HACKRF_TRUE) && (do_exit == false)) {
float time_difference;
sleep(1);
m_sleep(50);
gettimeofday(&time_now, NULL);
time_difference = TimevalDiff(&time_now, &t_start);

View File

@ -83,6 +83,7 @@ typedef enum {
HACKRF_VENDOR_REQUEST_CLKOUT_ENABLE = 32,
HACKRF_VENDOR_REQUEST_SPIFLASH_STATUS = 33,
HACKRF_VENDOR_REQUEST_SPIFLASH_CLEAR_STATUS = 34,
HACKRF_VENDOR_REQUEST_OPERACAKE_GPIO_TEST = 35,
} hackrf_vendor_request;
#define USB_CONFIG_STANDARD 0x1
@ -113,6 +114,7 @@ struct hackrf_device {
volatile bool streaming; /* volatile shared between threads (read only) */
void* rx_ctx;
void* tx_ctx;
volatile bool do_exit;
unsigned char buffer[TRANSFER_COUNT * TRANSFER_BUFFER_SIZE];
};
@ -146,8 +148,6 @@ hackrf_usb_api_version_read(device, &usb_version); \
if(usb_version < version) \
return HACKRF_ERROR_USB_API_VERSION;
static volatile bool do_exit = false;
static const uint16_t hackrf_usb_vid = 0x1d50;
static const uint16_t hackrf_jawbreaker_usb_pid = 0x604b;
static const uint16_t hackrf_one_usb_pid = 0x6089;
@ -157,9 +157,9 @@ static uint16_t open_devices = 0;
static libusb_context* g_libusb_context = NULL;
int last_libusb_error = LIBUSB_SUCCESS;
static void request_exit(void)
static void request_exit(hackrf_device* device)
{
do_exit = true;
device->do_exit = true;
}
static int cancel_transfers(hackrf_device* device)
@ -568,7 +568,7 @@ static int hackrf_open_setup(libusb_device_handle* usb_device, hackrf_device** d
lib_device->callback = NULL;
lib_device->transfer_thread_started = false;
lib_device->streaming = false;
do_exit = false;
lib_device->do_exit = false;
result = allocate_transfers(lib_device);
if( result != 0 )
@ -1478,7 +1478,7 @@ static void* transfer_threadproc(void* arg)
int error;
struct timeval timeout = { 0, 500000 };
while( (device->streaming) && (do_exit == false) )
while( (device->streaming) && (device->do_exit == false) )
{
error = libusb_handle_events_timeout(g_libusb_context, &timeout);
if( (error != 0) && (error != LIBUSB_ERROR_INTERRUPTED) )
@ -1509,12 +1509,12 @@ static void LIBUSB_CALL hackrf_libusb_transfer_callback(struct libusb_transfer*
{
if( libusb_submit_transfer(usb_transfer) < 0)
{
request_exit();
request_exit(device);
}else {
return;
}
}else {
request_exit();
request_exit(device);
}
} else {
/* Other cases LIBUSB_TRANSFER_NO_DEVICE
@ -1522,7 +1522,7 @@ static void LIBUSB_CALL hackrf_libusb_transfer_callback(struct libusb_transfer*
LIBUSB_TRANSFER_STALL, LIBUSB_TRANSFER_OVERFLOW
LIBUSB_TRANSFER_CANCELLED ...
*/
request_exit(); /* Fatal error stop transfer */
request_exit(device); /* Fatal error stop transfer */
}
}
@ -1531,7 +1531,7 @@ static int kill_transfer_thread(hackrf_device* device)
void* value;
int result;
request_exit();
request_exit(device);
if( device->transfer_thread_started != false )
{
@ -1551,15 +1551,15 @@ static int kill_transfer_thread(hackrf_device* device)
}
static int create_transfer_thread(hackrf_device* device,
const uint8_t endpoint_address,
hackrf_sample_block_cb_fn callback)
const uint8_t endpoint_address,
hackrf_sample_block_cb_fn callback)
{
int result;
if( device->transfer_thread_started == false )
{
device->streaming = false;
do_exit = false;
device->do_exit = false;
result = prepare_transfers(
device, endpoint_address,
@ -1593,7 +1593,7 @@ int ADDCALL hackrf_is_streaming(hackrf_device* device)
if( (device->transfer_thread_started == true) &&
(device->streaming == true) &&
(do_exit == false) )
(device->do_exit == false) )
{
return HACKRF_TRUE;
} else {
@ -1736,7 +1736,7 @@ const char* ADDCALL hackrf_error_name(enum hackrf_error errcode)
return "feature not supported by installed firmware";
case HACKRF_ERROR_NOT_LAST_DEVICE:
return "some hackrf is sill in use";
return "one or more HackRFs still in use";
case HACKRF_ERROR_OTHER:
return "unspecified error";
@ -2080,6 +2080,30 @@ int ADDCALL hackrf_set_clkout_enable(hackrf_device* device, const uint8_t value)
}
}
int ADDCALL hackrf_operacake_gpio_test(hackrf_device* device, const uint8_t address,
uint16_t* test_result)
{
USB_API_REQUIRED(device, 0x0103)
int result;
result = libusb_control_transfer(
device->usb_device,
LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE,
HACKRF_VENDOR_REQUEST_OPERACAKE_GPIO_TEST,
address,
0,
(unsigned char*)test_result,
2,
0
);
if (result < 1) {
last_libusb_error = result;
return HACKRF_ERROR_LIBUSB;
} else {
return HACKRF_SUCCESS;
}
}
#ifdef __cplusplus
} // __cplusplus defined.
#endif

View File

@ -251,6 +251,10 @@ extern ADDAPI int ADDCALL hackrf_set_operacake_ranges(hackrf_device* device,
extern ADDAPI int ADDCALL hackrf_set_clkout_enable(hackrf_device* device, const uint8_t value);
extern ADDAPI int ADDCALL hackrf_operacake_gpio_test(hackrf_device* device,
uint8_t address,
uint16_t* test_result);
#ifdef __cplusplus
} // __cplusplus defined.
#endif

48
tools/deploy-nightly.sh Normal file
View File

@ -0,0 +1,48 @@
#!/bin/bash
REPO=greatscottgadgets/hackrf-nightly
PUBLICATION_BRANCH=master
# set -x
cd $HOME
# Checkout the branch
git clone --branch=$PUBLICATION_BRANCH https://${GITHUB_TOKEN}@github.com/$REPO.git publish
cd publish
# Update pages
cp $ARTEFACT_BASE/$BUILD_NAME.tar.xz .
# Write index page
cd $TRAVIS_BUILD_DIR
COMMITS=`git log --oneline | awk '{print $1}'`
cd $HOME/publish
echo "
<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
<html><head>
<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">
<title>HackRF Nightly Builds</title>
</head>
<body>
<h2>HackRF Nightly Builds</h2>
" > index.html
URL=https://greatscottgadgets.github.io/hackrf-nightly
for commit in $COMMITS; do
FILENAME=`find . -maxdepth 1 -name "*-$commit.tar.xz"`
if [ "$FILENAME" != "" ]; then
FN=${FILENAME:2}
echo "<a href=\"$URL/$FN\">$FN</a><br />" >> index.html
fi
done
echo "
</body></html>
" >> index.html
# Commit and push latest version
git add $BUILD_NAME.tar.xz index.html
git config user.name "Travis"
git config user.email "travis@travis-ci.org"
git commit -m "Build products for $SHORT_COMMIT_HASH, built on $TRAVIS_OS_NAME, log: $TRAVIS_BUILD_WEB_URL"
if [ "$?" != "0" ]; then
echo "Looks like the commit failed"
fi
git push -fq origin $PUBLICATION_BRANCH