mirror of
https://github.com/eddyem/stm32samples.git
synced 2025-12-06 18:55:13 +03:00
fix bug with receiving a lot of data from USB
This commit is contained in:
parent
fbe478a862
commit
6be95bdab9
@ -12,4 +12,4 @@ This directory contains examples for F0 without any library
|
|||||||
- uart_blink - code for STM32F030F4, echo data on USART1 and blink LEDS on PA4 and PA5
|
- uart_blink - code for STM32F030F4, echo data on USART1 and blink LEDS on PA4 and PA5
|
||||||
- uart_nucleo - USART over DMA for STM32F042-nucleo
|
- uart_nucleo - USART over DMA for STM32F042-nucleo
|
||||||
- usbcdc - CDC for STM32F042 (emulation of PL2303) with working CAN bus
|
- usbcdc - CDC for STM32F042 (emulation of PL2303) with working CAN bus
|
||||||
- ch340 - another CDC (emulation of ch340)
|
- pl2303 - CDC template (emulation of PL2303)
|
||||||
|
|||||||
@ -0,0 +1,67 @@
|
|||||||
|
update=Чт 11 янв 2018 23:12:54
|
||||||
|
version=1
|
||||||
|
last_client=kicad
|
||||||
|
[pcbnew]
|
||||||
|
version=1
|
||||||
|
LastNetListRead=
|
||||||
|
UseCmpFile=1
|
||||||
|
PadDrill=0.600000000000
|
||||||
|
PadDrillOvalY=0.600000000000
|
||||||
|
PadSizeH=1.500000000000
|
||||||
|
PadSizeV=1.500000000000
|
||||||
|
PcbTextSizeV=1.500000000000
|
||||||
|
PcbTextSizeH=1.500000000000
|
||||||
|
PcbTextThickness=0.300000000000
|
||||||
|
ModuleTextSizeV=1.000000000000
|
||||||
|
ModuleTextSizeH=1.000000000000
|
||||||
|
ModuleTextSizeThickness=0.150000000000
|
||||||
|
SolderMaskClearance=0.000000000000
|
||||||
|
SolderMaskMinWidth=0.000000000000
|
||||||
|
DrawSegmentWidth=0.200000000000
|
||||||
|
BoardOutlineThickness=0.100000000000
|
||||||
|
ModuleOutlineThickness=0.150000000000
|
||||||
|
[cvpcb]
|
||||||
|
version=1
|
||||||
|
NetIExt=net
|
||||||
|
[general]
|
||||||
|
version=1
|
||||||
|
[eeschema]
|
||||||
|
version=1
|
||||||
|
LibDir=/home/eddy/kicad/Kicad-Libraries/library
|
||||||
|
[eeschema/libraries]
|
||||||
|
LibName1=stm32-rescue
|
||||||
|
LibName2=power
|
||||||
|
LibName3=device
|
||||||
|
LibName4=transistors
|
||||||
|
LibName5=conn
|
||||||
|
LibName6=linear
|
||||||
|
LibName7=regul
|
||||||
|
LibName8=74xx
|
||||||
|
LibName9=cmos4000
|
||||||
|
LibName10=adc-dac
|
||||||
|
LibName11=memory
|
||||||
|
LibName12=xilinx
|
||||||
|
LibName13=microcontrollers
|
||||||
|
LibName14=dsp
|
||||||
|
LibName15=microchip
|
||||||
|
LibName16=analog_switches
|
||||||
|
LibName17=motorola
|
||||||
|
LibName18=texas
|
||||||
|
LibName19=intel
|
||||||
|
LibName20=audio
|
||||||
|
LibName21=interface
|
||||||
|
LibName22=digital-audio
|
||||||
|
LibName23=philips
|
||||||
|
LibName24=display
|
||||||
|
LibName25=cypress
|
||||||
|
LibName26=siliconi
|
||||||
|
LibName27=opto
|
||||||
|
LibName28=atmel
|
||||||
|
LibName29=contrib
|
||||||
|
LibName30=valves
|
||||||
|
LibName31=stm32
|
||||||
|
LibName32=vreg
|
||||||
|
LibName33=elements
|
||||||
|
LibName34=ESD_Protection
|
||||||
|
LibName35=switches
|
||||||
|
LibName36=acs712
|
||||||
1737
F0-nolib/canbus/kicad/rescue-backup/stm32-2018-10-23-16-51-39.sch
Normal file
1737
F0-nolib/canbus/kicad/rescue-backup/stm32-2018-10-23-16-51-39.sch
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,764 @@
|
|||||||
|
EESchema-LIBRARY Version 2.3
|
||||||
|
#encoding utf-8
|
||||||
|
#
|
||||||
|
# +3V3
|
||||||
|
#
|
||||||
|
DEF +3V3 #PWR 0 0 Y Y 1 F P
|
||||||
|
F0 "#PWR" 0 -150 50 H I C CNN
|
||||||
|
F1 "+3V3" 0 140 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
ALIAS +3.3V
|
||||||
|
DRAW
|
||||||
|
P 2 0 1 0 -30 50 0 100 N
|
||||||
|
P 2 0 1 0 0 0 0 100 N
|
||||||
|
P 2 0 1 0 0 100 30 50 N
|
||||||
|
X +3V3 1 0 0 0 U 50 50 1 1 W N
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# +5V
|
||||||
|
#
|
||||||
|
DEF +5V #PWR 0 0 Y Y 1 F P
|
||||||
|
F0 "#PWR" 0 -150 50 H I C CNN
|
||||||
|
F1 "+5V" 0 140 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
DRAW
|
||||||
|
P 2 0 1 0 -30 50 0 100 N
|
||||||
|
P 2 0 1 0 0 0 0 100 N
|
||||||
|
P 2 0 1 0 0 100 30 50 N
|
||||||
|
X +5V 1 0 0 0 U 50 50 1 1 W N
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# C
|
||||||
|
#
|
||||||
|
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 I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
C_*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
P 2 0 1 20 -80 -30 80 -30 N
|
||||||
|
P 2 0 1 20 -80 30 80 30 N
|
||||||
|
X ~ 1 0 150 110 D 50 50 1 1 P
|
||||||
|
X ~ 2 0 -150 110 U 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# CONN_01X01
|
||||||
|
#
|
||||||
|
DEF CONN_01X01 J 0 40 Y N 1 F N
|
||||||
|
F0 "J" 0 100 50 H V C CNN
|
||||||
|
F1 "CONN_01X01" 100 0 50 V V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
Pin_Header_Straight_1X*
|
||||||
|
Pin_Header_Angled_1X*
|
||||||
|
Socket_Strip_Straight_1X*
|
||||||
|
Socket_Strip_Angled_1X*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -50 5 10 -5 0 1 0 N
|
||||||
|
S -50 50 50 -50 0 1 0 N
|
||||||
|
X P1 1 -200 0 150 R 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# CONN_01X03
|
||||||
|
#
|
||||||
|
DEF CONN_01X03 J 0 40 Y N 1 F N
|
||||||
|
F0 "J" 0 200 50 H V C CNN
|
||||||
|
F1 "CONN_01X03" 100 0 50 V V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
Pin_Header_Straight_1X*
|
||||||
|
Pin_Header_Angled_1X*
|
||||||
|
Socket_Strip_Straight_1X*
|
||||||
|
Socket_Strip_Angled_1X*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -50 -95 10 -105 0 1 0 N
|
||||||
|
S -50 5 10 -5 0 1 0 N
|
||||||
|
S -50 105 10 95 0 1 0 N
|
||||||
|
S -50 150 50 -150 0 1 0 N
|
||||||
|
X P1 1 -200 100 150 R 50 50 1 1 P
|
||||||
|
X P2 2 -200 0 150 R 50 50 1 1 P
|
||||||
|
X P3 3 -200 -100 150 R 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# CONN_02X03
|
||||||
|
#
|
||||||
|
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 I C CNN
|
||||||
|
F3 "" 0 -1200 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
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
|
||||||
|
S -100 5 -50 -5 0 1 0 N
|
||||||
|
S -100 105 -50 95 0 1 0 N
|
||||||
|
S -100 150 100 -150 0 1 0 N
|
||||||
|
S 50 -95 100 -105 0 1 0 N
|
||||||
|
S 50 5 100 -5 0 1 0 N
|
||||||
|
S 50 105 100 95 0 1 0 N
|
||||||
|
X P1 1 -250 100 150 R 50 50 1 1 P
|
||||||
|
X P2 2 250 100 150 L 50 50 1 1 P
|
||||||
|
X P3 3 -250 0 150 R 50 50 1 1 P
|
||||||
|
X P4 4 250 0 150 L 50 50 1 1 P
|
||||||
|
X P5 5 -250 -100 150 R 50 50 1 1 P
|
||||||
|
X P6 6 250 -100 150 L 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# CP
|
||||||
|
#
|
||||||
|
DEF CP C 0 10 N Y 1 F N
|
||||||
|
F0 "C" 25 100 50 H V L CNN
|
||||||
|
F1 "CP" 25 -100 50 H V L CNN
|
||||||
|
F2 "" 38 -150 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
CP_*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -90 20 -90 40 0 1 0 N
|
||||||
|
S -90 20 90 20 0 1 0 N
|
||||||
|
S 90 -20 -90 -40 0 1 0 F
|
||||||
|
S 90 40 -90 40 0 1 0 N
|
||||||
|
S 90 40 90 20 0 1 0 N
|
||||||
|
P 2 0 1 0 -70 90 -30 90 N
|
||||||
|
P 2 0 1 0 -50 110 -50 70 N
|
||||||
|
X ~ 1 0 150 110 D 50 50 1 1 P
|
||||||
|
X ~ 2 0 -150 110 U 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# Conn_01x01
|
||||||
|
#
|
||||||
|
DEF Conn_01x01 J 0 40 Y N 1 F N
|
||||||
|
F0 "J" 0 100 50 H V C CNN
|
||||||
|
F1 "Conn_01x01" 0 -100 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
Connector*:*_??x*mm*
|
||||||
|
Connector*:*1x??x*mm*
|
||||||
|
Pin?Header?Straight?1X*
|
||||||
|
Pin?Header?Angled?1X*
|
||||||
|
Socket?Strip?Straight?1X*
|
||||||
|
Socket?Strip?Angled?1X*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -50 5 0 -5 1 1 6 N
|
||||||
|
S -50 50 50 -50 1 1 10 f
|
||||||
|
X Pin_1 1 -200 0 150 R 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# Conn_01x02
|
||||||
|
#
|
||||||
|
DEF Conn_01x02 J 0 40 Y N 1 F N
|
||||||
|
F0 "J" 0 100 50 H V C CNN
|
||||||
|
F1 "Conn_01x02" 0 -200 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
Connector*:*_??x*mm*
|
||||||
|
Connector*:*1x??x*mm*
|
||||||
|
Pin?Header?Straight?1X*
|
||||||
|
Pin?Header?Angled?1X*
|
||||||
|
Socket?Strip?Straight?1X*
|
||||||
|
Socket?Strip?Angled?1X*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -50 -95 0 -105 1 1 6 N
|
||||||
|
S -50 5 0 -5 1 1 6 N
|
||||||
|
S -50 50 50 -150 1 1 10 f
|
||||||
|
X Pin_1 1 -200 0 150 R 50 50 1 1 P
|
||||||
|
X Pin_2 2 -200 -100 150 R 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# Conn_01x07
|
||||||
|
#
|
||||||
|
DEF Conn_01x07 J 0 40 Y N 1 F N
|
||||||
|
F0 "J" 0 400 50 H V C CNN
|
||||||
|
F1 "Conn_01x07" 0 -400 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
Connector*:*_??x*mm*
|
||||||
|
Connector*:*1x??x*mm*
|
||||||
|
Pin?Header?Straight?1X*
|
||||||
|
Pin?Header?Angled?1X*
|
||||||
|
Socket?Strip?Straight?1X*
|
||||||
|
Socket?Strip?Angled?1X*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -50 -295 0 -305 1 1 6 N
|
||||||
|
S -50 -195 0 -205 1 1 6 N
|
||||||
|
S -50 -95 0 -105 1 1 6 N
|
||||||
|
S -50 5 0 -5 1 1 6 N
|
||||||
|
S -50 105 0 95 1 1 6 N
|
||||||
|
S -50 205 0 195 1 1 6 N
|
||||||
|
S -50 305 0 295 1 1 6 N
|
||||||
|
S -50 350 50 -350 1 1 10 f
|
||||||
|
X Pin_1 1 -200 300 150 R 50 50 1 1 P
|
||||||
|
X Pin_2 2 -200 200 150 R 50 50 1 1 P
|
||||||
|
X Pin_3 3 -200 100 150 R 50 50 1 1 P
|
||||||
|
X Pin_4 4 -200 0 150 R 50 50 1 1 P
|
||||||
|
X Pin_5 5 -200 -100 150 R 50 50 1 1 P
|
||||||
|
X Pin_6 6 -200 -200 150 R 50 50 1 1 P
|
||||||
|
X Pin_7 7 -200 -300 150 R 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# DB9_Female
|
||||||
|
#
|
||||||
|
DEF DB9_Female J 0 40 Y N 1 F N
|
||||||
|
F0 "J" 0 550 50 H V C CNN
|
||||||
|
F1 "DB9_Female" 0 -575 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
DB*F*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
C -70 -400 30 0 1 0 N
|
||||||
|
C -70 -200 30 0 1 0 N
|
||||||
|
C -70 0 30 0 1 0 N
|
||||||
|
C -70 200 30 0 1 0 N
|
||||||
|
C -70 400 30 0 1 0 N
|
||||||
|
C 50 -300 30 0 1 0 N
|
||||||
|
C 50 -100 30 0 1 0 N
|
||||||
|
C 50 100 30 0 1 0 N
|
||||||
|
C 50 300 30 0 1 0 N
|
||||||
|
P 2 0 1 0 -150 -400 -100 -400 N
|
||||||
|
P 2 0 1 0 -150 -300 20 -300 N
|
||||||
|
P 2 0 1 0 -150 -200 -100 -200 N
|
||||||
|
P 2 0 1 0 -150 -100 20 -100 N
|
||||||
|
P 2 0 1 0 -150 0 -100 0 N
|
||||||
|
P 2 0 1 0 -150 100 20 100 N
|
||||||
|
P 2 0 1 0 -150 200 -100 200 N
|
||||||
|
P 2 0 1 0 -150 300 20 300 N
|
||||||
|
P 2 0 1 0 -150 400 -100 400 N
|
||||||
|
P 5 0 1 10 -150 525 -150 -525 150 -375 150 375 -150 525 f
|
||||||
|
X 1 1 -300 400 150 R 50 50 1 1 P
|
||||||
|
X 2 2 -300 200 150 R 50 50 1 1 P
|
||||||
|
X 3 3 -300 0 150 R 50 50 1 1 P
|
||||||
|
X 4 4 -300 -200 150 R 50 50 1 1 P
|
||||||
|
X 5 5 -300 -400 150 R 50 50 1 1 P
|
||||||
|
X 6 6 -300 300 150 R 50 50 1 1 P
|
||||||
|
X 7 7 -300 100 150 R 50 50 1 1 P
|
||||||
|
X 8 8 -300 -100 150 R 50 50 1 1 P
|
||||||
|
X 9 9 -300 -300 150 R 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# DB9_Male
|
||||||
|
#
|
||||||
|
DEF DB9_Male J 0 40 Y N 1 F N
|
||||||
|
F0 "J" 0 550 50 H V C CNN
|
||||||
|
F1 "DB9_Male" 0 -575 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
DB*M*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
C -70 -400 30 0 1 0 F
|
||||||
|
C -70 -200 30 0 1 0 F
|
||||||
|
C -70 0 30 0 1 0 F
|
||||||
|
C -70 200 30 0 1 0 F
|
||||||
|
C -70 400 30 0 1 0 F
|
||||||
|
C 50 -300 30 0 1 0 F
|
||||||
|
C 50 -100 30 0 1 0 F
|
||||||
|
C 50 100 30 0 1 0 F
|
||||||
|
C 50 300 30 0 1 0 F
|
||||||
|
P 2 0 1 0 -150 -400 -100 -400 N
|
||||||
|
P 2 0 1 0 -150 -300 20 -300 N
|
||||||
|
P 2 0 1 0 -150 -200 -100 -200 N
|
||||||
|
P 2 0 1 0 -150 -100 20 -100 N
|
||||||
|
P 2 0 1 0 -150 0 -100 0 N
|
||||||
|
P 2 0 1 0 -150 100 20 100 N
|
||||||
|
P 2 0 1 0 -150 200 -100 200 N
|
||||||
|
P 2 0 1 0 -150 300 20 300 N
|
||||||
|
P 2 0 1 0 -150 400 -100 400 N
|
||||||
|
P 5 0 1 10 -150 -525 -150 525 150 375 150 -375 -150 -525 f
|
||||||
|
X 1 1 -300 -400 150 R 50 50 1 1 P
|
||||||
|
X 2 2 -300 -200 150 R 50 50 1 1 P
|
||||||
|
X 3 3 -300 0 150 R 50 50 1 1 P
|
||||||
|
X 4 4 -300 200 150 R 50 50 1 1 P
|
||||||
|
X 5 5 -300 400 150 R 50 50 1 1 P
|
||||||
|
X 6 6 -300 -300 150 R 50 50 1 1 P
|
||||||
|
X 7 7 -300 -100 150 R 50 50 1 1 P
|
||||||
|
X 8 8 -300 100 150 R 50 50 1 1 P
|
||||||
|
X 9 9 -300 300 150 R 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# D_Schottky
|
||||||
|
#
|
||||||
|
DEF D_Schottky D 0 40 N N 1 F N
|
||||||
|
F0 "D" 0 100 50 H V C CNN
|
||||||
|
F1 "D_Schottky" 0 -100 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
TO-???*
|
||||||
|
*SingleDiode
|
||||||
|
*_Diode_*
|
||||||
|
*SingleDiode*
|
||||||
|
D_*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
P 2 0 1 0 50 0 -50 0 N
|
||||||
|
P 4 0 1 8 50 50 50 -50 -50 0 50 50 N
|
||||||
|
P 6 0 1 8 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N
|
||||||
|
X K 1 -150 0 100 R 50 50 1 1 P
|
||||||
|
X A 2 150 0 100 L 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# D_Zener
|
||||||
|
#
|
||||||
|
DEF D_Zener D 0 40 N N 1 F N
|
||||||
|
F0 "D" 0 100 50 H V C CNN
|
||||||
|
F1 "D_Zener" 0 -100 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
TO-???*
|
||||||
|
*SingleDiode
|
||||||
|
*_Diode_*
|
||||||
|
*SingleDiode*
|
||||||
|
D_*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
P 2 0 1 0 50 0 -50 0 N
|
||||||
|
P 3 0 1 8 -50 -50 -50 50 -30 50 N
|
||||||
|
P 4 0 1 8 50 -50 50 50 -50 0 50 -50 N
|
||||||
|
X K 1 -150 0 100 R 50 50 1 1 P
|
||||||
|
X A 2 150 0 100 L 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# GND
|
||||||
|
#
|
||||||
|
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 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
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# Jumper_NO_Small
|
||||||
|
#
|
||||||
|
DEF Jumper_NO_Small JP 0 30 N N 1 F N
|
||||||
|
F0 "JP" 0 80 50 H V C CNN
|
||||||
|
F1 "Jumper_NO_Small" 10 -60 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
DRAW
|
||||||
|
C -40 0 20 0 1 0 N
|
||||||
|
C 40 0 20 0 1 0 N
|
||||||
|
X 1 1 -100 0 40 R 50 50 0 1 P
|
||||||
|
X 2 2 100 0 40 L 50 50 0 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# LED-RESCUE-stm32
|
||||||
|
#
|
||||||
|
DEF LED-RESCUE-stm32 D 0 40 Y N 1 F N
|
||||||
|
F0 "D" 0 100 50 H V C CNN
|
||||||
|
F1 "LED-RESCUE-stm32" 0 -100 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H V C CNN
|
||||||
|
F3 "" 0 0 50 H V C CNN
|
||||||
|
$FPLIST
|
||||||
|
LED*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
P 2 0 1 8 -50 -50 -50 50 N
|
||||||
|
P 2 0 1 0 -50 0 50 0 N
|
||||||
|
P 4 0 1 8 50 -50 50 50 -50 0 50 -50 N
|
||||||
|
P 5 0 1 0 -120 -30 -180 -90 -150 -90 -180 -90 -180 -60 N
|
||||||
|
P 5 0 1 0 -70 -30 -130 -90 -100 -90 -130 -90 -130 -60 N
|
||||||
|
X K 1 -150 0 100 R 50 50 1 1 P
|
||||||
|
X A 2 150 0 100 L 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# LM1117-3.3-RESCUE-stm32
|
||||||
|
#
|
||||||
|
DEF LM1117-3.3-RESCUE-stm32 U 0 30 Y Y 1 F N
|
||||||
|
F0 "U" 100 -250 50 H V C CNN
|
||||||
|
F1 "LM1117-3.3-RESCUE-stm32" 0 250 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
SOT-223*
|
||||||
|
TO-263*
|
||||||
|
TO-252*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -200 -200 200 200 0 1 10 f
|
||||||
|
X GND/ADJ 1 0 -300 100 U 50 50 1 1 W
|
||||||
|
X VO 2 300 50 100 L 50 50 1 1 P
|
||||||
|
X VI 3 -300 0 100 R 50 50 1 1 W
|
||||||
|
X VO 4 300 -50 100 L 50 50 1 1 w
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# MCP2551-I/SN
|
||||||
|
#
|
||||||
|
DEF MCP2551-I/SN U 0 40 Y Y 1 F N
|
||||||
|
F0 "U" -400 350 50 H V L CNN
|
||||||
|
F1 "MCP2551-I/SN" 100 350 50 H V L CNN
|
||||||
|
F2 "Housings_SOIC:SOIC-8_3.9x4.9mm_Pitch1.27mm" 0 -500 50 H I C CIN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
SOIC*Pitch1.27mm*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -400 300 400 -300 0 1 10 f
|
||||||
|
X TXD 1 -500 200 100 R 50 50 1 1 I
|
||||||
|
X VSS 2 0 -400 100 U 50 50 1 1 W
|
||||||
|
X VDD 3 0 400 100 D 50 50 1 1 W
|
||||||
|
X RXD 4 -500 100 100 R 50 50 1 1 O
|
||||||
|
X Vref 5 -500 -100 100 R 50 50 1 1 w
|
||||||
|
X CANL 6 500 -100 100 L 50 50 1 1 B
|
||||||
|
X CANH 7 500 100 100 L 50 50 1 1 B
|
||||||
|
X Rs 8 -500 -200 100 R 50 50 1 1 I
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# PESD1CAN
|
||||||
|
#
|
||||||
|
DEF PESD1CAN D 0 30 Y N 1 F N
|
||||||
|
F0 "D" 0 -350 50 H V C CNN
|
||||||
|
F1 "PESD1CAN" 50 150 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H V C CNN
|
||||||
|
F3 "" 0 0 50 H V C CNN
|
||||||
|
$FPLIST
|
||||||
|
SOT23
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -200 100 300 -300 0 1 0 N
|
||||||
|
P 2 0 1 0 -140 -200 150 -200 N
|
||||||
|
P 2 0 1 0 -140 0 150 0 N
|
||||||
|
P 3 0 1 8 -150 -150 -150 -250 -150 -250 N
|
||||||
|
P 3 0 1 8 -150 50 -150 -50 -150 -50 N
|
||||||
|
P 3 0 1 8 150 -150 150 -250 150 -250 N
|
||||||
|
P 3 0 1 8 150 50 150 -50 150 -50 N
|
||||||
|
P 4 0 1 8 -150 -150 -170 -150 -170 -160 -170 -160 N
|
||||||
|
P 4 0 1 8 -150 50 -170 50 -170 40 -170 40 N
|
||||||
|
P 4 0 1 8 150 -250 170 -250 170 -240 170 -240 N
|
||||||
|
P 4 0 1 8 150 -150 130 -150 130 -160 130 -160 N
|
||||||
|
P 4 0 1 8 150 -50 170 -50 170 -40 170 -40 N
|
||||||
|
P 4 0 1 0 150 0 250 0 250 -200 150 -200 N
|
||||||
|
P 4 0 1 8 150 50 130 50 130 40 130 40 N
|
||||||
|
P 5 0 1 8 -130 -240 -130 -250 -150 -250 -150 -250 -150 -250 N
|
||||||
|
P 5 0 1 8 -130 -40 -130 -50 -150 -50 -150 -50 -150 -50 N
|
||||||
|
P 6 0 1 8 -50 -250 -150 -200 -50 -150 -50 -250 -50 -250 -50 -250 N
|
||||||
|
P 6 0 1 8 -50 -50 -150 0 -50 50 -50 -50 -50 -50 -50 -50 N
|
||||||
|
P 6 0 1 8 50 -150 150 -200 50 -250 50 -150 50 -150 50 -150 N
|
||||||
|
P 6 0 1 8 50 50 150 0 50 -50 50 50 50 50 50 50 N
|
||||||
|
X K 1 -300 0 150 R 50 50 0 1 P
|
||||||
|
X K 2 -300 -200 150 R 50 50 0 1 P
|
||||||
|
X O 3 400 -100 150 L 50 50 0 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# PWR_FLAG
|
||||||
|
#
|
||||||
|
DEF PWR_FLAG #FLG 0 0 N N 1 F P
|
||||||
|
F0 "#FLG" 0 75 50 H I C CNN
|
||||||
|
F1 "PWR_FLAG" 0 150 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
DRAW
|
||||||
|
X pwr 1 0 0 0 U 50 50 0 0 w
|
||||||
|
P 6 0 1 0 0 0 0 50 -40 75 0 100 40 75 0 50 N
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# Q_NMOS_GSD
|
||||||
|
#
|
||||||
|
DEF Q_NMOS_GSD Q 0 0 Y N 1 F N
|
||||||
|
F0 "Q" 200 50 50 H V L CNN
|
||||||
|
F1 "Q_NMOS_GSD" 200 -50 50 H V L CNN
|
||||||
|
F2 "" 200 100 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
DRAW
|
||||||
|
C 65 0 111 0 1 10 N
|
||||||
|
C 100 -70 11 0 1 0 F
|
||||||
|
C 100 70 11 0 1 0 F
|
||||||
|
P 2 0 1 0 2 0 10 0 N
|
||||||
|
P 2 0 1 0 30 -70 100 -70 N
|
||||||
|
P 2 0 1 10 30 -50 30 -90 N
|
||||||
|
P 2 0 1 0 30 0 100 0 N
|
||||||
|
P 2 0 1 10 30 20 30 -20 N
|
||||||
|
P 2 0 1 0 30 70 100 70 N
|
||||||
|
P 2 0 1 10 30 90 30 50 N
|
||||||
|
P 2 0 1 0 100 -70 100 -100 N
|
||||||
|
P 2 0 1 0 100 -70 100 0 N
|
||||||
|
P 2 0 1 0 100 100 100 70 N
|
||||||
|
P 3 0 1 10 10 75 10 -75 10 -75 N
|
||||||
|
P 4 0 1 0 40 0 80 15 80 -15 40 0 F
|
||||||
|
P 4 0 1 0 100 -70 130 -70 130 70 100 70 N
|
||||||
|
P 4 0 1 0 110 20 115 15 145 15 150 10 N
|
||||||
|
P 4 0 1 0 130 15 115 -10 145 -10 130 15 N
|
||||||
|
X G 1 -200 0 200 R 50 50 1 1 I
|
||||||
|
X S 2 100 -200 100 U 50 50 1 1 P
|
||||||
|
X D 3 100 200 100 D 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# Q_PMOS_GSD
|
||||||
|
#
|
||||||
|
DEF Q_PMOS_GSD Q 0 0 Y N 1 F N
|
||||||
|
F0 "Q" 200 50 50 H V L CNN
|
||||||
|
F1 "Q_PMOS_GSD" 200 -50 50 H V L CNN
|
||||||
|
F2 "" 200 100 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
DRAW
|
||||||
|
C 65 0 111 0 1 10 N
|
||||||
|
C 100 -70 11 0 1 0 F
|
||||||
|
C 100 70 11 0 1 0 F
|
||||||
|
P 2 0 1 0 2 0 10 0 N
|
||||||
|
P 2 0 1 0 30 -70 100 -70 N
|
||||||
|
P 2 0 1 10 30 -50 30 -90 N
|
||||||
|
P 2 0 1 0 30 0 100 0 N
|
||||||
|
P 2 0 1 10 30 20 30 -20 N
|
||||||
|
P 2 0 1 0 30 70 100 70 N
|
||||||
|
P 2 0 1 10 30 90 30 50 N
|
||||||
|
P 2 0 1 0 100 -70 100 -100 N
|
||||||
|
P 2 0 1 0 100 -70 100 0 N
|
||||||
|
P 2 0 1 0 100 100 100 70 N
|
||||||
|
P 3 0 1 10 10 75 10 -75 10 -75 N
|
||||||
|
P 4 0 1 0 90 0 50 -15 50 15 90 0 F
|
||||||
|
P 4 0 1 0 100 -70 130 -70 130 70 100 70 N
|
||||||
|
P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N
|
||||||
|
P 4 0 1 0 130 -15 115 10 145 10 130 -15 N
|
||||||
|
X G 1 -200 0 200 R 50 50 1 1 I
|
||||||
|
X S 2 100 -200 100 U 50 50 1 1 P
|
||||||
|
X D 3 100 200 100 D 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# R
|
||||||
|
#
|
||||||
|
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 I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
R_*
|
||||||
|
R_*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -40 -100 40 100 0 1 10 N
|
||||||
|
X ~ 1 0 150 50 D 50 50 1 1 P
|
||||||
|
X ~ 2 0 -150 50 U 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# SP0502BAHT
|
||||||
|
#
|
||||||
|
DEF SP0502BAHT D 0 40 Y N 1 F N
|
||||||
|
F0 "D" 225 100 50 H V L CNN
|
||||||
|
F1 "SP0502BAHT" 225 25 50 H V L CNN
|
||||||
|
F2 "TO_SOT_Packages_SMD:SOT-23" 225 -50 50 H I L CNN
|
||||||
|
F3 "" 125 125 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
SOT?23*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
X A 3 0 -200 100 U 50 50 0 0 I
|
||||||
|
S -175 100 175 -100 0 1 10 f
|
||||||
|
P 2 0 1 0 -100 100 -100 50 N
|
||||||
|
P 2 0 1 0 0 -50 0 -100 N
|
||||||
|
P 2 0 1 0 100 100 100 50 N
|
||||||
|
P 4 0 1 0 -150 75 -125 50 -75 50 -50 25 N
|
||||||
|
P 4 0 1 0 -100 0 -100 -50 100 -50 100 0 N
|
||||||
|
P 4 0 1 0 -100 50 -75 0 -125 0 -100 50 F
|
||||||
|
P 4 0 1 0 50 75 75 50 125 50 150 25 N
|
||||||
|
P 4 0 1 0 100 50 75 0 125 0 100 50 F
|
||||||
|
X K 1 -100 200 100 D 50 50 1 1 I
|
||||||
|
X K 2 100 200 100 D 50 50 1 1 I
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# STM32F042C4Tx
|
||||||
|
#
|
||||||
|
DEF STM32F042C4Tx U 0 40 Y Y 1 L N
|
||||||
|
F0 "U" -3000 1725 50 H V L BNN
|
||||||
|
F1 "STM32F042C4Tx" 3000 1725 50 H V R BNN
|
||||||
|
F2 "LQFP48" 3000 1675 50 H V R TNN
|
||||||
|
F3 "" 0 0 50 H V C CNN
|
||||||
|
ALIAS STM32F042C6Tx
|
||||||
|
DRAW
|
||||||
|
S -3000 -1700 3000 1700 0 1 10 f
|
||||||
|
X VBAT 1 -3100 1100 100 R 50 50 1 1 W
|
||||||
|
X PC13/RTC_OUT_ALARM/RTC_OUT_CALIB/RTC_TAMP1/RTC_TS/SYS_WKUP2 2 -3100 500 100 R 50 50 1 1 B
|
||||||
|
X PC14/RCC_OSC32_IN 3 -3100 400 100 R 50 50 1 1 B
|
||||||
|
X PC15/RCC_OSC32_OUT 4 -3100 300 100 R 50 50 1 1 B
|
||||||
|
X PF0/CRS_SYNC/I2C1_SDA/RCC_OSC_IN 5 -3100 900 100 R 50 50 1 1 I
|
||||||
|
X PF1/I2C1_SCL/RCC_OSC_OUT 6 -3100 800 100 R 50 50 1 1 I
|
||||||
|
X NRST 7 -3100 1300 100 R 50 50 1 1 I
|
||||||
|
X VSSA 8 100 -1800 100 U 50 50 1 1 W
|
||||||
|
X VDDA 9 0 1800 100 D 50 50 1 1 W
|
||||||
|
X ADC_IN0/RTC_TAMP2/SYS_WKUP1/TIM2_CH1/TIM2_ETR/TSC_G1_IO1/USART2_CTS/PA0 10 3100 100 100 L 50 50 1 1 B
|
||||||
|
X PB2/TSC_G3_IO4 20 -3100 -100 100 R 50 50 1 1 B
|
||||||
|
X I2C1_SCL/TIM1_CH2/TSC_G4_IO1/USART1_TX/PA9 30 3100 -800 100 L 50 50 1 1 B
|
||||||
|
X PB4/I2S1_MCK/SPI1_MISO/TIM17_BKIN/TIM3_CH1/TSC_G5_IO2 40 -3100 -300 100 R 50 50 1 1 B
|
||||||
|
X ADC_IN1/TIM2_CH2/TSC_G1_IO2/USART2_DE/USART2_RTS/PA1 11 3100 0 100 L 50 50 1 1 B
|
||||||
|
X PB10/CEC/I2C1_SCL/SPI2_SCK/TIM2_CH3/TSC_SYNC 21 -3100 -900 100 R 50 50 1 1 B
|
||||||
|
X I2C1_SDA/TIM17_BKIN/TIM1_CH3/TSC_G4_IO2/USART1_RX/PA10 31 3100 -900 100 L 50 50 1 1 B
|
||||||
|
X PB5/I2C1_SMBA/I2S1_SD/SPI1_MOSI/SYS_WKUP6/TIM16_BKIN/TIM3_CH2 41 -3100 -400 100 R 50 50 1 1 B
|
||||||
|
X ADC_IN2/SYS_WKUP4/TIM2_CH3/TSC_G1_IO3/USART2_TX/PA2 12 3100 -100 100 L 50 50 1 1 B
|
||||||
|
X PB11/I2C1_SDA/TIM2_CH4 22 -3100 -1000 100 R 50 50 1 1 B
|
||||||
|
X CAN_RX/I2C1_SCL/TIM1_CH4/TSC_G4_IO3/USART1_CTS/USB_DM/PA11 32 3100 -1000 100 L 50 50 1 1 B
|
||||||
|
X PB6/I2C1_SCL/TIM16_CH1N/TSC_G5_IO3/USART1_TX 42 -3100 -500 100 R 50 50 1 1 B
|
||||||
|
X ADC_IN3/TIM2_CH4/TSC_G1_IO4/USART2_RX/PA3 13 3100 -200 100 L 50 50 1 1 B
|
||||||
|
X VSS 23 -200 -1800 100 U 50 50 1 1 W
|
||||||
|
X CAN_TX/I2C1_SDA/TIM1_ETR/TSC_G4_IO4/USART1_DE/USART1_RTS/USB_DP/PA12 33 3100 -1100 100 L 50 50 1 1 B
|
||||||
|
X PB7/I2C1_SDA/TIM17_CH1N/TSC_G5_IO4/USART1_RX 43 -3100 -600 100 R 50 50 1 1 B
|
||||||
|
X ADC_IN4/I2S1_WS/SPI1_NSS/TIM14_CH1/TSC_G2_IO1/USART2_CK/USB_OE/PA4 14 3100 -300 100 L 50 50 1 1 B
|
||||||
|
X VDD 24 -200 1800 100 D 50 50 1 1 W
|
||||||
|
X IR_OUT/SYS_SWDIO/USB_OE/PA13 34 3100 -1200 100 L 50 50 1 1 B
|
||||||
|
X PF11 44 -3100 700 100 R 50 50 1 1 B
|
||||||
|
X ADC_IN5/CEC/I2S1_CK/SPI1_SCK/TIM2_CH1/TIM2_ETR/TSC_G2_IO2/PA5 15 3100 -400 100 L 50 50 1 1 B
|
||||||
|
X PB12/SPI2_NSS/TIM1_BKIN 25 -3100 -1100 100 R 50 50 1 1 B
|
||||||
|
X VSS 35 -100 -1800 100 U 50 50 1 1 W
|
||||||
|
X PB8/CAN_RX/CEC/I2C1_SCL/TIM16_CH1/TSC_SYNC 45 -3100 -700 100 R 50 50 1 1 B
|
||||||
|
X ADC_IN6/I2S1_MCK/SPI1_MISO/TIM16_CH1/TIM1_BKIN/TIM3_CH1/TSC_G2_IO3/PA6 16 3100 -500 100 L 50 50 1 1 B
|
||||||
|
X PB13/I2C1_SCL/SPI2_SCK/TIM1_CH1N 26 -3100 -1200 100 R 50 50 1 1 B
|
||||||
|
X VDDIO2 36 100 1800 100 D 50 50 1 1 W
|
||||||
|
X PB9/CAN_TX/I2C1_SDA/IR_OUT/SPI2_NSS/TIM17_CH1 46 -3100 -800 100 R 50 50 1 1 B
|
||||||
|
X ADC_IN7/I2S1_SD/SPI1_MOSI/TIM14_CH1/TIM17_CH1/TIM1_CH1N/TIM3_CH2/TSC_G2_IO4/PA7 17 3100 -600 100 L 50 50 1 1 B
|
||||||
|
X PB14/I2C1_SDA/SPI2_MISO/TIM1_CH2N 27 -3100 -1300 100 R 50 50 1 1 B
|
||||||
|
X SYS_SWCLK/USART2_TX/PA14 37 3100 -1300 100 L 50 50 1 1 B
|
||||||
|
X VSS 47 0 -1800 100 U 50 50 1 1 W
|
||||||
|
X PB0/ADC_IN8/TIM1_CH2N/TIM3_CH3/TSC_G3_IO2 18 -3100 100 100 R 50 50 1 1 B
|
||||||
|
X PB15/RTC_REFIN/SPI2_MOSI/SYS_WKUP7/TIM1_CH3N 28 -3100 -1400 100 R 50 50 1 1 B
|
||||||
|
X I2S1_WS/SPI1_NSS/TIM2_CH1/TIM2_ETR/USART2_RX/USB_OE/PA15 38 3100 -1400 100 L 50 50 1 1 B
|
||||||
|
X VDD 48 -100 1800 100 D 50 50 1 1 W
|
||||||
|
X PB1/ADC_IN9/TIM14_CH1/TIM1_CH3N/TIM3_CH4/TSC_G3_IO3 19 -3100 0 100 R 50 50 1 1 B
|
||||||
|
X CRS_SYNC/RCC_MCO/TIM1_CH1/USART1_CK/PA8 29 3100 -700 100 L 50 50 1 1 B
|
||||||
|
X PB3/I2S1_CK/SPI1_SCK/TIM2_CH2/TSC_G5_IO1 39 -3100 -200 100 R 50 50 1 1 B
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# SW_Push
|
||||||
|
#
|
||||||
|
DEF SW_Push SW 0 40 N N 1 F N
|
||||||
|
F0 "SW" 50 100 50 H V L CNN
|
||||||
|
F1 "SW_Push" 0 -60 50 H V C CNN
|
||||||
|
F2 "" 0 200 50 H I C CNN
|
||||||
|
F3 "" 0 200 50 H I C CNN
|
||||||
|
DRAW
|
||||||
|
C -80 0 20 0 1 0 N
|
||||||
|
C 80 0 20 0 1 0 N
|
||||||
|
P 2 0 1 0 0 50 0 120 N
|
||||||
|
P 2 0 1 0 100 50 -100 50 N
|
||||||
|
X 1 1 -200 0 100 R 50 50 0 1 P
|
||||||
|
X 2 2 200 0 100 L 50 50 0 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# USB6B1
|
||||||
|
#
|
||||||
|
DEF USB6B1 D 0 30 Y N 1 F N
|
||||||
|
F0 "D" 0 -450 50 H V C CNN
|
||||||
|
F1 "USB6B1" 0 400 50 H V C CNN
|
||||||
|
F2 "" 200 -100 50 V V C CNN
|
||||||
|
F3 "" 200 -100 50 V V C CNN
|
||||||
|
$FPLIST
|
||||||
|
SO8
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
C -150 -300 7 0 1 0 N
|
||||||
|
C -150 100 7 0 1 0 N
|
||||||
|
C -150 300 7 0 1 0 N
|
||||||
|
C 0 -300 7 0 1 0 N
|
||||||
|
C 0 -100 7 0 1 0 N
|
||||||
|
C 0 300 7 0 1 0 N
|
||||||
|
C 200 -300 7 0 1 0 N
|
||||||
|
C 200 300 7 0 1 0 N
|
||||||
|
S -300 -100 300 -100 0 1 0 N
|
||||||
|
S -300 300 300 300 0 1 0 N
|
||||||
|
S -200 -150 -100 -150 0 1 0 N
|
||||||
|
S -200 250 -100 250 0 1 0 N
|
||||||
|
S -150 300 -150 -300 0 1 0 N
|
||||||
|
S -50 -150 50 -150 0 1 0 N
|
||||||
|
S -50 250 50 250 0 1 0 N
|
||||||
|
S 0 300 0 -300 0 1 0 N
|
||||||
|
S 200 300 200 -300 0 1 0 N
|
||||||
|
S 300 -300 -300 -300 0 1 0 N
|
||||||
|
S 300 100 -300 100 0 1 0 N
|
||||||
|
P 3 0 1 8 150 50 250 50 250 50 N
|
||||||
|
P 4 0 1 8 150 50 150 30 160 30 160 30 N
|
||||||
|
P 4 0 1 8 250 50 250 70 240 70 240 70 N
|
||||||
|
P 5 0 1 0 -250 350 300 350 300 -350 -250 -350 -250 350 N
|
||||||
|
P 6 0 1 8 -200 -250 -150 -150 -100 -250 -200 -250 -200 -250 -200 -250 N
|
||||||
|
P 6 0 1 8 -200 150 -150 250 -100 150 -200 150 -200 150 -200 150 N
|
||||||
|
P 6 0 1 8 -50 -250 0 -150 50 -250 -50 -250 -50 -250 -50 -250 N
|
||||||
|
P 6 0 1 8 -50 150 0 250 50 150 -50 150 -50 150 -50 150 N
|
||||||
|
P 6 0 1 8 150 -50 200 50 250 -50 150 -50 150 -50 150 -50 N
|
||||||
|
X VCC 1 -500 300 200 R 50 50 1 1 P
|
||||||
|
X I/O1 2 -500 100 200 R 50 50 1 1 P
|
||||||
|
X I/O2 3 -500 -100 200 R 50 50 1 1 P
|
||||||
|
X GND 4 -500 -300 200 R 50 50 1 1 P
|
||||||
|
X GND 5 500 -300 200 L 50 50 1 1 P
|
||||||
|
X I/O2 6 500 -100 200 L 50 50 1 1 P
|
||||||
|
X I/O1 7 500 100 200 L 50 50 1 1 P
|
||||||
|
X VCC 8 500 300 200 L 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# USB_A-RESCUE-stm32
|
||||||
|
#
|
||||||
|
DEF USB_A-RESCUE-stm32 P 0 40 Y Y 1 F N
|
||||||
|
F0 "P" 200 -200 50 H V C CNN
|
||||||
|
F1 "USB_A-RESCUE-stm32" -50 200 50 H V C CNN
|
||||||
|
F2 "" -50 -100 50 V V C CNN
|
||||||
|
F3 "" -50 -100 50 V V C CNN
|
||||||
|
$FPLIST
|
||||||
|
USB*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -250 -150 150 150 0 1 0 N
|
||||||
|
S -205 -150 -195 -120 0 1 0 N
|
||||||
|
S -105 -150 -95 -120 0 1 0 N
|
||||||
|
S -5 -150 5 -120 0 1 0 N
|
||||||
|
S 95 -150 105 -120 0 1 0 N
|
||||||
|
X VBUS 1 -200 -300 150 U 50 50 1 1 W
|
||||||
|
X D- 2 -100 -300 150 U 50 50 1 1 P
|
||||||
|
X D+ 3 0 -300 150 U 50 50 1 1 P
|
||||||
|
X GND 4 100 -300 150 U 50 50 1 1 W
|
||||||
|
X shield 5 300 100 150 L 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
#End Library
|
||||||
@ -0,0 +1,45 @@
|
|||||||
|
EESchema-LIBRARY Version 2.3
|
||||||
|
#encoding utf-8
|
||||||
|
#
|
||||||
|
# LM1117-3.3-RESCUE-stm32
|
||||||
|
#
|
||||||
|
DEF LM1117-3.3-RESCUE-stm32 U 0 30 Y Y 1 F N
|
||||||
|
F0 "U" 100 -250 50 H V C CNN
|
||||||
|
F1 "LM1117-3.3-RESCUE-stm32" 0 250 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
SOT-223*
|
||||||
|
TO-263*
|
||||||
|
TO-252*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -200 -200 200 200 0 1 10 f
|
||||||
|
X GND/ADJ 1 0 -300 100 U 50 50 1 1 W
|
||||||
|
X VO 2 300 50 100 L 50 50 1 1 P
|
||||||
|
X VI 3 -300 0 100 R 50 50 1 1 W
|
||||||
|
X VO 4 300 -50 100 L 50 50 1 1 w
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# MAX471-RESCUE-stm32
|
||||||
|
#
|
||||||
|
DEF MAX471-RESCUE-stm32 U 0 40 Y Y 1 F N
|
||||||
|
F0 "U" -300 350 50 H V L CNN
|
||||||
|
F1 "MAX471-RESCUE-stm32" -300 -350 50 H V L CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
DRAW
|
||||||
|
S -300 300 300 -300 0 1 10 f
|
||||||
|
X SHDN 1 -400 -100 100 R 50 50 1 1 I
|
||||||
|
X RS+ 2 -400 200 100 R 50 50 1 1 W
|
||||||
|
X RS+ 3 -400 100 100 R 50 50 1 1 P
|
||||||
|
X GND 4 -400 -200 100 R 50 50 1 1 W
|
||||||
|
X SIGN 5 400 -100 100 L 50 50 1 1 C
|
||||||
|
X RS- 6 400 200 100 L 50 50 1 1 w
|
||||||
|
X RS- 7 400 100 100 L 50 50 1 1 P
|
||||||
|
X OUT 8 400 -200 100 L 50 50 1 1 O
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
#End Library
|
||||||
8
F0-nolib/canbus/kicad/sym-lib-table
Normal file
8
F0-nolib/canbus/kicad/sym-lib-table
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
(sym_lib_table
|
||||||
|
(lib (name stm32-rescue)(type Legacy)(uri ${KIPRJMOD}/stm32-rescue.lib)(options "")(descr ""))
|
||||||
|
(lib (name stm32)(type Legacy)(uri /home/eddy/kicad/Kicad-Libraries/library/stm32.lib)(options "")(descr ""))
|
||||||
|
(lib (name vreg)(type Legacy)(uri /home/eddy/kicad/Kicad-Libraries/library/vreg.lib)(options "")(descr ""))
|
||||||
|
(lib (name elements)(type Legacy)(uri ${KIPRJMOD}/elements.lib)(options "")(descr ""))
|
||||||
|
(lib (name switches)(type Legacy)(uri /home/eddy/kicad/Kicad-Libraries/library/switches.lib)(options "")(descr ""))
|
||||||
|
(lib (name acs712)(type Legacy)(uri ${KIPRJMOD}/acs712.lib)(options "")(descr ""))
|
||||||
|
)
|
||||||
@ -1,5 +0,0 @@
|
|||||||
Simple code for USB development board, emulates ch340
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
USB: https://github.com/majbthrd/CDCHIDwidget/blob/master/src/main.c
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"folders":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"path": "."
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
File diff suppressed because one or more lines are too long
Binary file not shown.
@ -1,69 +0,0 @@
|
|||||||
|
|
||||||
Bus 002 Device 005: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
|
|
||||||
Device Descriptor:
|
|
||||||
bLength 18
|
|
||||||
bDescriptorType 1
|
|
||||||
bcdUSB 1.10
|
|
||||||
bDeviceClass 255 Vendor Specific Class
|
|
||||||
bDeviceSubClass 0
|
|
||||||
bDeviceProtocol 0
|
|
||||||
bMaxPacketSize0 8
|
|
||||||
idVendor 0x1a86 QinHeng Electronics
|
|
||||||
idProduct 0x7523 HL-340 USB-Serial adapter
|
|
||||||
bcdDevice 2.54
|
|
||||||
iManufacturer 0
|
|
||||||
iProduct 2 USB2.0-Serial
|
|
||||||
iSerial 0
|
|
||||||
bNumConfigurations 1
|
|
||||||
Configuration Descriptor:
|
|
||||||
bLength 9
|
|
||||||
bDescriptorType 2
|
|
||||||
wTotalLength 39
|
|
||||||
bNumInterfaces 1
|
|
||||||
bConfigurationValue 1
|
|
||||||
iConfiguration 0
|
|
||||||
bmAttributes 0x80
|
|
||||||
(Bus Powered)
|
|
||||||
MaxPower 96mA
|
|
||||||
Interface Descriptor:
|
|
||||||
bLength 9
|
|
||||||
bDescriptorType 4
|
|
||||||
bInterfaceNumber 0
|
|
||||||
bAlternateSetting 0
|
|
||||||
bNumEndpoints 3
|
|
||||||
bInterfaceClass 255 Vendor Specific Class
|
|
||||||
bInterfaceSubClass 1
|
|
||||||
bInterfaceProtocol 2
|
|
||||||
iInterface 0
|
|
||||||
Endpoint Descriptor:
|
|
||||||
bLength 7
|
|
||||||
bDescriptorType 5
|
|
||||||
bEndpointAddress 0x82 EP 2 IN
|
|
||||||
bmAttributes 2
|
|
||||||
Transfer Type Bulk
|
|
||||||
Synch Type None
|
|
||||||
Usage Type Data
|
|
||||||
wMaxPacketSize 0x0020 1x 32 bytes
|
|
||||||
bInterval 0
|
|
||||||
Endpoint Descriptor:
|
|
||||||
bLength 7
|
|
||||||
bDescriptorType 5
|
|
||||||
bEndpointAddress 0x02 EP 2 OUT
|
|
||||||
bmAttributes 2
|
|
||||||
Transfer Type Bulk
|
|
||||||
Synch Type None
|
|
||||||
Usage Type Data
|
|
||||||
wMaxPacketSize 0x0020 1x 32 bytes
|
|
||||||
bInterval 0
|
|
||||||
Endpoint Descriptor:
|
|
||||||
bLength 7
|
|
||||||
bDescriptorType 5
|
|
||||||
bEndpointAddress 0x81 EP 1 IN
|
|
||||||
bmAttributes 3
|
|
||||||
Transfer Type Interrupt
|
|
||||||
Synch Type None
|
|
||||||
Usage Type Data
|
|
||||||
wMaxPacketSize 0x0008 1x 8 bytes
|
|
||||||
bInterval 1
|
|
||||||
Device Status: 0x0000
|
|
||||||
(Bus Powered)
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
BINARY = ch340emul
|
BINARY = pl2303
|
||||||
BOOTPORT ?= /dev/ttyUSB0
|
BOOTPORT ?= /dev/ttyUSB0
|
||||||
BOOTSPEED ?= 57600
|
BOOTSPEED ?= 57600
|
||||||
# MCU FAMILY
|
# MCU FAMILY
|
||||||
1
F0-nolib/pl2303/Readme.md
Normal file
1
F0-nolib/pl2303/Readme.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
Simple CDC for USB development board, emulates PL2303
|
||||||
@ -18,7 +18,6 @@
|
|||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
* MA 02110-1301, USA.
|
* MA 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "hardware.h"
|
#include "hardware.h"
|
||||||
#include "usart.h"
|
#include "usart.h"
|
||||||
#include "usb.h"
|
#include "usb.h"
|
||||||
@ -54,19 +53,32 @@ void iwdg_setup(){
|
|||||||
IWDG->KR = IWDG_REFRESH; /* (6) */
|
IWDG->KR = IWDG_REFRESH; /* (6) */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void linecoding_handler(usb_LineCoding *lc){
|
||||||
|
SEND("got new linecoding:");
|
||||||
|
SEND(" baudrate="); printu(lc->dwDTERate);
|
||||||
|
SEND(", charFormat="); printu(lc->bCharFormat);
|
||||||
|
SEND(", parityType="); printu(lc->bParityType);
|
||||||
|
SEND(", dataBits="); printu(lc->bDataBits);
|
||||||
|
usart_putchar('\n');
|
||||||
|
}
|
||||||
|
|
||||||
|
void clstate_handler(uint16_t val){
|
||||||
|
SEND("change control line state to ");
|
||||||
|
printu(val);
|
||||||
|
usart_putchar('\n');
|
||||||
|
}
|
||||||
|
|
||||||
int main(void){
|
int main(void){
|
||||||
uint32_t lastT = 0;
|
uint32_t lastT = 0;
|
||||||
int L;
|
int L;
|
||||||
char *txt;
|
char *txt;
|
||||||
|
char tmpbuf[129];
|
||||||
sysreset();
|
sysreset();
|
||||||
SysTick_Config(6000, 1);
|
SysTick_Config(6000, 1);
|
||||||
gpio_setup();
|
gpio_setup();
|
||||||
usart_setup();
|
usart_setup();
|
||||||
//iwdg_setup();
|
|
||||||
|
|
||||||
SEND("Greetings! My address is ");
|
SEND("Hello!\n");
|
||||||
printuhex(getBRDaddr());
|
|
||||||
newline();
|
|
||||||
|
|
||||||
if(RCC->CSR & RCC_CSR_IWDGRSTF){ // watchdog reset occured
|
if(RCC->CSR & RCC_CSR_IWDGRSTF){ // watchdog reset occured
|
||||||
SEND("WDGRESET=1\n");
|
SEND("WDGRESET=1\n");
|
||||||
@ -77,6 +89,7 @@ int main(void){
|
|||||||
RCC->CSR |= RCC_CSR_RMVF; // remove reset flags
|
RCC->CSR |= RCC_CSR_RMVF; // remove reset flags
|
||||||
|
|
||||||
USB_setup();
|
USB_setup();
|
||||||
|
//iwdg_setup();
|
||||||
|
|
||||||
while (1){
|
while (1){
|
||||||
IWDG->KR = IWDG_REFRESH; // refresh watchdog
|
IWDG->KR = IWDG_REFRESH; // refresh watchdog
|
||||||
@ -84,18 +97,32 @@ int main(void){
|
|||||||
LED_blink(LED0);
|
LED_blink(LED0);
|
||||||
lastT = Tms;
|
lastT = Tms;
|
||||||
transmit_tbuf(); // non-blocking transmission of data from UART buffer every 0.5s
|
transmit_tbuf(); // non-blocking transmission of data from UART buffer every 0.5s
|
||||||
|
/*uint8_t r = 0;
|
||||||
|
if((r = USB_receive(tmpbuf, 128))){
|
||||||
|
tmpbuf[r] = 0;
|
||||||
|
SEND("Received data over USB:\n");
|
||||||
|
SEND(tmpbuf);
|
||||||
|
newline();
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
usb_proc();
|
usb_proc();
|
||||||
|
uint8_t r = 0;
|
||||||
|
if((r = USB_receive(tmpbuf, 128))){
|
||||||
|
tmpbuf[r] = 0;
|
||||||
|
SEND("Received data over USB:\n");
|
||||||
|
SEND(tmpbuf);
|
||||||
|
newline();
|
||||||
|
}
|
||||||
if(usartrx()){ // usart1 received data, store in in buffer
|
if(usartrx()){ // usart1 received data, store in in buffer
|
||||||
L = usart_getline(&txt);
|
L = usart_getline(&txt);
|
||||||
char _1st = txt[0];
|
char _1st = txt[0];
|
||||||
if(L == 2 && txt[1] == '\n'){
|
if(L == 2 && txt[1] == '\n'){
|
||||||
L = 0;
|
L = 0;
|
||||||
switch(_1st){
|
switch(_1st){
|
||||||
case 'A':
|
case 'C':
|
||||||
SEND("Board address: ");
|
SEND("USB ");
|
||||||
printuhex(getBRDaddr());
|
if(!USB_configured()) SEND("dis");
|
||||||
newline();
|
SEND("connected\n");
|
||||||
break;
|
break;
|
||||||
case 'R':
|
case 'R':
|
||||||
SEND("Soft reset\n");
|
SEND("Soft reset\n");
|
||||||
@ -110,7 +137,7 @@ int main(void){
|
|||||||
break;
|
break;
|
||||||
default: // help
|
default: // help
|
||||||
SEND(
|
SEND(
|
||||||
"'A' - get CAN address\n"
|
"'C' - test is USB configured\n"
|
||||||
"'R' - software reset\n"
|
"'R' - software reset\n"
|
||||||
"'U' - send test string over USB\n"
|
"'U' - send test string over USB\n"
|
||||||
"'W' - test watchdog\n"
|
"'W' - test watchdog\n"
|
||||||
BIN
F0-nolib/pl2303/pl2303.bin
Executable file
BIN
F0-nolib/pl2303/pl2303.bin
Executable file
Binary file not shown.
@ -89,6 +89,13 @@ void usart_send(const char *str){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void usart_sendn(const char *str, uint8_t L){
|
||||||
|
for(uint8_t i = 0; i < L; ++i){
|
||||||
|
if(odatalen[tbufno] == UARTBUFSZO) transmit_tbuf();
|
||||||
|
tbuf[tbufno][odatalen[tbufno]++] = *str++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void newline(){
|
void newline(){
|
||||||
usart_putchar('\n');
|
usart_putchar('\n');
|
||||||
transmit_tbuf();
|
transmit_tbuf();
|
||||||
@ -223,15 +230,21 @@ void printu(uint32_t val){
|
|||||||
// print 32bit unsigned int as hex
|
// print 32bit unsigned int as hex
|
||||||
void printuhex(uint32_t val){
|
void printuhex(uint32_t val){
|
||||||
usart_send("0x");
|
usart_send("0x");
|
||||||
uint8_t *ptr = (uint8_t*)&val + 3;
|
uint8_t *ptr = (uint8_t*)&val + 3, start = 1;
|
||||||
int i, j;
|
int i, j;
|
||||||
for(i = 0; i < 4; ++i, --ptr){
|
for(i = 0; i < 4; ++i, --ptr){
|
||||||
|
if(!*ptr && start) continue;
|
||||||
for(j = 1; j > -1; --j){
|
for(j = 1; j > -1; --j){
|
||||||
|
start = 0;
|
||||||
register uint8_t half = (*ptr >> (4*j)) & 0x0f;
|
register uint8_t half = (*ptr >> (4*j)) & 0x0f;
|
||||||
if(half < 10) usart_putchar(half + '0');
|
if(half < 10) usart_putchar(half + '0');
|
||||||
else usart_putchar(half - 10 + 'a');
|
else usart_putchar(half - 10 + 'a');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(start){
|
||||||
|
usart_putchar('0');
|
||||||
|
usart_putchar('0');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// dump memory buffer
|
// dump memory buffer
|
||||||
@ -50,6 +50,7 @@ void transmit_tbuf();
|
|||||||
void usart_setup();
|
void usart_setup();
|
||||||
int usart_getline(char **line);
|
int usart_getline(char **line);
|
||||||
void usart_send(const char *str);
|
void usart_send(const char *str);
|
||||||
|
void usart_sendn(const char *str, uint8_t L);
|
||||||
void newline();
|
void newline();
|
||||||
void usart_putchar(const char ch);
|
void usart_putchar(const char ch);
|
||||||
void printu(uint32_t val);
|
void printu(uint32_t val);
|
||||||
@ -24,20 +24,23 @@
|
|||||||
#include "usb.h"
|
#include "usb.h"
|
||||||
#include "usb_lib.h"
|
#include "usb_lib.h"
|
||||||
#include "usart.h"
|
#include "usart.h"
|
||||||
|
#include <string.h> // memcpy, memmove
|
||||||
|
|
||||||
|
// incoming buffer size
|
||||||
|
#define IDATASZ (256)
|
||||||
static uint8_t buffer[BUFFSIZE+1];
|
static uint8_t incoming_data[IDATASZ];
|
||||||
static uint8_t len, rcvflag = 0;
|
static uint8_t ovfl = 0;
|
||||||
|
static uint16_t idatalen = 0;
|
||||||
|
static int8_t usbON = 0; // ==1 when USB fully configured
|
||||||
|
|
||||||
// interrupt IN handler (never used?)
|
// interrupt IN handler (never used?)
|
||||||
static uint16_t EP1_Handler(ep_t ep){
|
static uint16_t EP1_Handler(ep_t ep){
|
||||||
|
uint8_t ep0buf[11];
|
||||||
if (ep.rx_flag){
|
if (ep.rx_flag){
|
||||||
EP_Read(1, buffer);
|
EP_Read(1, ep0buf);
|
||||||
ep.status = SET_VALID_TX(ep.status);
|
ep.status = SET_VALID_TX(ep.status);
|
||||||
ep.status = KEEP_STAT_RX(ep.status);
|
ep.status = KEEP_STAT_RX(ep.status);
|
||||||
} else
|
}else if (ep.tx_flag){
|
||||||
if (ep.tx_flag){
|
|
||||||
ep.status = SET_VALID_RX(ep.status);
|
ep.status = SET_VALID_RX(ep.status);
|
||||||
ep.status = SET_STALL_TX(ep.status);
|
ep.status = SET_STALL_TX(ep.status);
|
||||||
}
|
}
|
||||||
@ -46,16 +49,31 @@ static uint16_t EP1_Handler(ep_t ep){
|
|||||||
|
|
||||||
// data IN/OUT handler
|
// data IN/OUT handler
|
||||||
static uint16_t EP2_Handler(ep_t ep){
|
static uint16_t EP2_Handler(ep_t ep){
|
||||||
|
MSG("EP2\n");
|
||||||
if(ep.rx_flag){
|
if(ep.rx_flag){
|
||||||
if(ep.rx_cnt > 0 && ep.rx_cnt < BUFFSIZE){
|
int rd = ep.rx_cnt, rest = IDATASZ - idatalen;
|
||||||
rcvflag = 1;
|
if(rd){
|
||||||
len = EP_Read(2, buffer);
|
if(rd <= rest){
|
||||||
buffer[len] = 0;
|
idatalen += EP_Read(2, &incoming_data[idatalen]);
|
||||||
#ifdef EBUG
|
ovfl = 0;
|
||||||
MSG("read: ");
|
}else{
|
||||||
if(len) SEND((char*)buffer);
|
ep.status = SET_NAK_RX(ep.status);
|
||||||
#endif
|
ovfl = 1;
|
||||||
|
return ep.status;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef EBUG
|
||||||
|
SEND("receive ");
|
||||||
|
printu(ep.rx_cnt);
|
||||||
|
SEND(" bytes, idatalen=");
|
||||||
|
printu(idatalen);
|
||||||
|
SEND(" , rest=");
|
||||||
|
printu(rest);
|
||||||
|
incoming_data[idatalen] = 0;
|
||||||
|
SEND(" , the buffer now:\n");
|
||||||
|
SEND((char*)incoming_data);
|
||||||
|
usart_putchar('\n');
|
||||||
|
#endif
|
||||||
// end of transaction: clear DTOGs
|
// end of transaction: clear DTOGs
|
||||||
ep.status = CLEAR_DTOG_RX(ep.status);
|
ep.status = CLEAR_DTOG_RX(ep.status);
|
||||||
ep.status = CLEAR_DTOG_TX(ep.status);
|
ep.status = CLEAR_DTOG_TX(ep.status);
|
||||||
@ -80,16 +98,15 @@ void USB_setup(){
|
|||||||
CRS->CR |= CRS_CR_CEN; // enable freq counter & block CRS->CFGR as read-only
|
CRS->CR |= CRS_CR_CEN; // enable freq counter & block CRS->CFGR as read-only
|
||||||
RCC->CFGR |= RCC_CFGR_SW;
|
RCC->CFGR |= RCC_CFGR_SW;
|
||||||
// allow RESET and CTRM interrupts
|
// allow RESET and CTRM interrupts
|
||||||
USB->CNTR = USB_CNTR_RESETM | USB_CNTR_CTRM;
|
USB -> CNTR = USB_CNTR_RESETM | USB_CNTR_CTRM;
|
||||||
// clear flags
|
// clear flags
|
||||||
USB->ISTR = 0;
|
USB -> ISTR = 0;
|
||||||
// and activate pullup
|
// and activate pullup
|
||||||
USB->BCDR |= USB_BCDR_DPPU;
|
USB -> BCDR |= USB_BCDR_DPPU;
|
||||||
NVIC_EnableIRQ(USB_IRQn);
|
NVIC_EnableIRQ(USB_IRQn);
|
||||||
}
|
}
|
||||||
|
|
||||||
void usb_proc(){
|
void usb_proc(){
|
||||||
static int8_t usbON = 0;
|
|
||||||
if(USB_GetState() == USB_CONFIGURE_STATE){ // USB configured - activate other endpoints
|
if(USB_GetState() == USB_CONFIGURE_STATE){ // USB configured - activate other endpoints
|
||||||
if(!usbON){ // endpoints not activated
|
if(!usbON){ // endpoints not activated
|
||||||
MSG("Configured; activate other endpoints\n");
|
MSG("Configured; activate other endpoints\n");
|
||||||
@ -97,23 +114,11 @@ void usb_proc(){
|
|||||||
// Buffer have 1024 bytes, but last 256 we use for CAN bus
|
// Buffer have 1024 bytes, but last 256 we use for CAN bus
|
||||||
// first free is 64; 768 - CAN data
|
// first free is 64; 768 - CAN data
|
||||||
// free: 64 128 192 256 320 384 448 512 576 640 704
|
// free: 64 128 192 256 320 384 448 512 576 640 704
|
||||||
// (first 192 free bytes are for EP0)
|
// (first 64 are control registers, up to 192 - buffer for EP0)
|
||||||
EP_Init(1, EP_TYPE_INTERRUPT, 192, 192, EP1_Handler);
|
EP_Init(1, EP_TYPE_INTERRUPT, 192, 192, EP1_Handler);
|
||||||
EP_Init(2, EP_TYPE_BULK, 256, 320, EP2_Handler); // IN/OUT
|
EP_Init(2, EP_TYPE_BULK, 256, 256, EP2_Handler); // OUT - receive data
|
||||||
|
EP_Init(3, EP_TYPE_BULK, 320, 320, EP2_Handler); // IN - transmit data
|
||||||
usbON = 1;
|
usbON = 1;
|
||||||
}else{
|
|
||||||
if(rcvflag){
|
|
||||||
/*
|
|
||||||
* don't process received data here: if it would come too fast you will loose a part
|
|
||||||
* It would be a good idea to collect incoming data in greater buffer and process it
|
|
||||||
* later (EX: echo "text" > /dev/ttyUSB1 will split into two writings!
|
|
||||||
*/
|
|
||||||
rcvflag = 0;
|
|
||||||
}
|
|
||||||
if(SETLINECODING()){
|
|
||||||
SEND("got new linecoding");
|
|
||||||
CLRLINECODING();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
usbON = 0;
|
usbON = 0;
|
||||||
@ -126,3 +131,37 @@ void USB_send(char *buf){
|
|||||||
while(*p++) ++l;
|
while(*p++) ++l;
|
||||||
EP_Write(3, (uint8_t*)buf, l);
|
EP_Write(3, (uint8_t*)buf, l);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USB_receive
|
||||||
|
* @param buf (i) - buffer for received data
|
||||||
|
* @param bufsize - its size
|
||||||
|
* @return amount of received bytes
|
||||||
|
*/
|
||||||
|
int USB_receive(char *buf, int bufsize){
|
||||||
|
if(!bufsize || !idatalen) return 0;
|
||||||
|
USB->CNTR = 0;
|
||||||
|
int sz = (idatalen > bufsize) ? bufsize : idatalen, rest = idatalen - sz;
|
||||||
|
memcpy(buf, incoming_data, sz);
|
||||||
|
if(rest > 0){
|
||||||
|
memmove(incoming_data, &incoming_data[sz], rest);
|
||||||
|
idatalen = rest;
|
||||||
|
}else idatalen = 0;
|
||||||
|
if(ovfl){
|
||||||
|
EP2_Handler(endpoints[2]);
|
||||||
|
uint16_t epstatus = USB->EPnR[2];
|
||||||
|
epstatus = CLEAR_DTOG_RX(epstatus);
|
||||||
|
epstatus = SET_VALID_RX(epstatus);
|
||||||
|
USB->EPnR[2] = epstatus;
|
||||||
|
}
|
||||||
|
USB->CNTR = USB_CNTR_RESETM | USB_CNTR_CTRM;
|
||||||
|
return sz;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USB_configured
|
||||||
|
* @return 1 if USB is in configured state
|
||||||
|
*/
|
||||||
|
int USB_configured(){
|
||||||
|
return usbON;
|
||||||
|
}
|
||||||
@ -31,5 +31,7 @@
|
|||||||
void USB_setup();
|
void USB_setup();
|
||||||
void usb_proc();
|
void usb_proc();
|
||||||
void USB_send(char *buf);
|
void USB_send(char *buf);
|
||||||
|
int USB_receive(char *buf, int bufsize);
|
||||||
|
int USB_configured();
|
||||||
|
|
||||||
#endif // __USB_H__
|
#endif // __USB_H__
|
||||||
@ -36,7 +36,6 @@ static usb_LineCoding lineCoding = {115200, 0, 0, 8};
|
|||||||
static config_pack_t setup_packet;
|
static config_pack_t setup_packet;
|
||||||
static uint8_t ep0databuf[EP0DATABUF_SIZE];
|
static uint8_t ep0databuf[EP0DATABUF_SIZE];
|
||||||
static uint8_t ep0dbuflen = 0;
|
static uint8_t ep0dbuflen = 0;
|
||||||
uint8_t setlinecoding = 0;
|
|
||||||
|
|
||||||
usb_LineCoding getLineCoding(){return lineCoding;}
|
usb_LineCoding getLineCoding(){return lineCoding;}
|
||||||
|
|
||||||
@ -45,18 +44,18 @@ const uint8_t USB_DeviceDescriptor[] = {
|
|||||||
0x01, // bDescriptorType - USB_DEVICE_DESC_TYPE
|
0x01, // bDescriptorType - USB_DEVICE_DESC_TYPE
|
||||||
0x10, // bcdUSB_L - 1.10
|
0x10, // bcdUSB_L - 1.10
|
||||||
0x01, // bcdUSB_H
|
0x01, // bcdUSB_H
|
||||||
0xff, // bDeviceClass - Vendor Specific Class
|
0x00, // bDeviceClass - USB_COMM
|
||||||
0x00, // bDeviceSubClass
|
0x00, // bDeviceSubClass
|
||||||
0x00, // bDeviceProtocol
|
0x00, // bDeviceProtocol
|
||||||
0x08, // bMaxPacketSize
|
0x40, // bMaxPacketSize
|
||||||
0x86, // idVendor_L ch340: VID=0x1a86, PID=0x7523
|
0x7b, // idVendor_L PL2303: VID=0x067b, PID=0x2303
|
||||||
0x1a, // idVendor_H
|
0x06, // idVendor_H
|
||||||
0x23, // idProduct_L
|
0x03, // idProduct_L
|
||||||
0x75, // idProduct_H
|
0x23, // idProduct_H
|
||||||
0x36, // bcdDevice_Ver_L
|
0x00, // bcdDevice_Ver_L
|
||||||
0x02, // bcdDevice_Ver_H
|
0x03, // bcdDevice_Ver_H
|
||||||
0x00, // iManufacturer
|
0x01, // iManufacturer
|
||||||
0x02, // iProduct USB2.0-Serial
|
0x02, // iProduct
|
||||||
0x00, // iSerialNumber
|
0x00, // iSerialNumber
|
||||||
0x01 // bNumConfigurations
|
0x01 // bNumConfigurations
|
||||||
};
|
};
|
||||||
@ -66,10 +65,10 @@ const uint8_t USB_DeviceQualifierDescriptor[] = {
|
|||||||
0x06, // bDescriptorType
|
0x06, // bDescriptorType
|
||||||
0x10, // bcdUSB_L
|
0x10, // bcdUSB_L
|
||||||
0x01, // bcdUSB_H
|
0x01, // bcdUSB_H
|
||||||
0xff, // bDeviceClass
|
0x00, // bDeviceClass
|
||||||
0x00, // bDeviceSubClass
|
0x00, // bDeviceSubClass
|
||||||
0x00, // bDeviceProtocol
|
0x00, // bDeviceProtocol
|
||||||
0x08, // bMaxPacketSize0
|
0x40, // bMaxPacketSize0
|
||||||
0x01, // bNumConfigurations
|
0x01, // bNumConfigurations
|
||||||
0x00 // Reserved
|
0x00 // Reserved
|
||||||
};
|
};
|
||||||
@ -83,7 +82,7 @@ const uint8_t USB_ConfigDescriptor[] = {
|
|||||||
0x01, /* bNumInterfaces: 1 interface */
|
0x01, /* bNumInterfaces: 1 interface */
|
||||||
0x01, /* bConfigurationValue: Configuration value */
|
0x01, /* bConfigurationValue: Configuration value */
|
||||||
0x00, /* iConfiguration: Index of string descriptor describing the configuration */
|
0x00, /* iConfiguration: Index of string descriptor describing the configuration */
|
||||||
0x80, /* bmAttributes - Bus powered */
|
0xa0, /* bmAttributes - Bus powered, Remote wakeup */
|
||||||
0x32, /* MaxPower 100 mA */
|
0x32, /* MaxPower 100 mA */
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
@ -95,68 +94,57 @@ const uint8_t USB_ConfigDescriptor[] = {
|
|||||||
0x00, /* bAlternateSetting: Alternate setting */
|
0x00, /* bAlternateSetting: Alternate setting */
|
||||||
0x03, /* bNumEndpoints: 3 endpoints used */
|
0x03, /* bNumEndpoints: 3 endpoints used */
|
||||||
0xff, /* bInterfaceClass */
|
0xff, /* bInterfaceClass */
|
||||||
0x01, /* bInterfaceSubClass */
|
0x00, /* bInterfaceSubClass */
|
||||||
0x02, /* bInterfaceProtocol */
|
0x00, /* bInterfaceProtocol */
|
||||||
0x00, /* iInterface: */
|
0x00, /* iInterface: */
|
||||||
///////////////////////////////////////////////////
|
///////////////////////////////////////////////////
|
||||||
/*Endpoint IN2 Descriptor*/
|
|
||||||
0x07, /* bLength: Endpoint Descriptor size */
|
|
||||||
0x05, /* bDescriptorType: Endpoint */
|
|
||||||
0x82, /* bEndpointAddress IN2 */
|
|
||||||
0x02, /* bmAttributes: Bulk */
|
|
||||||
0x20, /* wMaxPacketSize: 64 */
|
|
||||||
0x00,
|
|
||||||
0x00, /* bInterval: ignore for Bulk transfer */
|
|
||||||
/*Endpoint OUT2 Descriptor*/
|
|
||||||
0x07, /* bLength: Endpoint Descriptor size */
|
|
||||||
0x05, /* bDescriptorType: Endpoint */
|
|
||||||
0x02, /* bEndpointAddress: OUT2 */
|
|
||||||
0x02, /* bmAttributes: Bulk */
|
|
||||||
0x20, /* wMaxPacketSize: */
|
|
||||||
0x00,
|
|
||||||
0x00, /* bInterval: ignore for Bulk transfer */
|
|
||||||
/*Endpoint 1 Descriptor*/
|
/*Endpoint 1 Descriptor*/
|
||||||
0x07, /* bLength: Endpoint Descriptor size */
|
0x07, /* bLength: Endpoint Descriptor size */
|
||||||
0x05, /* bDescriptorType: Endpoint */
|
0x05, /* bDescriptorType: Endpoint */
|
||||||
0x81, /* bEndpointAddress IN1 */
|
0x81, /* bEndpointAddress IN1 */
|
||||||
0x03, /* bmAttributes: Interrupt */
|
0x03, /* bmAttributes: Interrupt */
|
||||||
0x08, /* wMaxPacketSize LO: */
|
0x0a, /* wMaxPacketSize LO: */
|
||||||
0x00, /* wMaxPacketSize HI: */
|
0x00, /* wMaxPacketSize HI: */
|
||||||
0x01, /* bInterval: */
|
0x01, /* bInterval: */
|
||||||
|
|
||||||
|
/*Endpoint OUT2 Descriptor*/
|
||||||
|
0x07, /* bLength: Endpoint Descriptor size */
|
||||||
|
0x05, /* bDescriptorType: Endpoint */
|
||||||
|
0x02, /* bEndpointAddress: OUT2 */
|
||||||
|
0x02, /* bmAttributes: Bulk */
|
||||||
|
0x40, /* wMaxPacketSize: */
|
||||||
|
0x00,
|
||||||
|
0x00, /* bInterval: ignore for Bulk transfer */
|
||||||
|
|
||||||
|
/*Endpoint IN3 Descriptor*/
|
||||||
|
0x07, /* bLength: Endpoint Descriptor size */
|
||||||
|
0x05, /* bDescriptorType: Endpoint */
|
||||||
|
0x83, /* bEndpointAddress IN3 */
|
||||||
|
0x02, /* bmAttributes: Bulk */
|
||||||
|
0x40, /* wMaxPacketSize: 64 */
|
||||||
|
0x00,
|
||||||
|
0x00, /* bInterval: ignore for Bulk transfer */
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint8_t USB_StringLangDescriptor[] = {
|
_USB_LANG_ID_(LANG_US);
|
||||||
STRING_LANG_DESCRIPTOR_SIZE_BYTE, // bLength
|
|
||||||
0x03, // bDescriptorType
|
|
||||||
0x09, // wLANGID_L
|
|
||||||
0x04 // wLANGID_H
|
|
||||||
};
|
|
||||||
|
|
||||||
// these descriptors are not used in PL2303 emulator!
|
// these descriptors are not used in PL2303 emulator!
|
||||||
_USB_STRING_(USB_StringSerialDescriptor, L"0.01")
|
_USB_STRING_(USB_StringSerialDescriptor, u"0")
|
||||||
_USB_STRING_(USB_StringManufacturingDescriptor, L"Russia, SAO RAS")
|
_USB_STRING_(USB_StringManufacturingDescriptor, u"Prolific Technology Inc.")
|
||||||
_USB_STRING_(USB_StringProdDescriptor, L"TSYS01 sensors controller")
|
_USB_STRING_(USB_StringProdDescriptor, u"USB-Serial Controller")
|
||||||
|
|
||||||
static usb_dev_t USB_Dev;
|
static usb_dev_t USB_Dev;
|
||||||
static ep_t endpoints[MAX_ENDPOINTS];
|
ep_t endpoints[MAX_ENDPOINTS];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* default handlers
|
* default handlers
|
||||||
*/
|
*/
|
||||||
// SET_LINE_CODING
|
// SET_LINE_CODING
|
||||||
void WEAK linecoding_handler(__attribute__((unused)) usb_LineCoding *lc){
|
void WEAK linecoding_handler(usb_LineCoding __attribute__((unused)) *lc){
|
||||||
#ifdef EBUG
|
MSG("linecoding");
|
||||||
SEND("Want baudrate: "); printu(lc->dwDTERate);
|
|
||||||
SEND(", charFormat: "); printu(lc->bCharFormat);
|
|
||||||
SEND(", parityType: "); printu(lc->bParityType);
|
|
||||||
SEND(", dataBits: "); printu(lc->bDataBits);
|
|
||||||
usart_putchar('\n');
|
|
||||||
#endif
|
|
||||||
setlinecoding = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SET_CONTROL_LINE_STATE
|
// SET_CONTROL_LINE_STATE
|
||||||
void WEAK clstate_handler(__attribute__((unused)) uint16_t val){
|
void WEAK clstate_handler(uint16_t __attribute__((unused)) val){
|
||||||
#ifdef EBUG
|
#ifdef EBUG
|
||||||
SEND("change state to ");
|
SEND("change state to ");
|
||||||
printu(val);
|
printu(val);
|
||||||
@ -171,8 +159,26 @@ void WEAK break_handler(){
|
|||||||
|
|
||||||
// handler of vendor requests
|
// handler of vendor requests
|
||||||
void WEAK vendor_handler(config_pack_t *packet){
|
void WEAK vendor_handler(config_pack_t *packet){
|
||||||
|
/*SEND("Vendor, reqt=");
|
||||||
|
printuhex(packet->bmRequestType);
|
||||||
|
SEND(", wval=");
|
||||||
|
printuhex(packet->wValue);
|
||||||
|
usart_putchar('\n');*/
|
||||||
if(packet->bmRequestType & 0x80){ // read
|
if(packet->bmRequestType & 0x80){ // read
|
||||||
uint8_t c = '?';
|
uint8_t c;
|
||||||
|
switch(packet->wValue){
|
||||||
|
case 0x8484:
|
||||||
|
c = 2;
|
||||||
|
break;
|
||||||
|
case 0x0080:
|
||||||
|
c = 1;
|
||||||
|
break;
|
||||||
|
case 0x8686:
|
||||||
|
c = 0xaa;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
c = 0;
|
||||||
|
}
|
||||||
EP_WriteIRQ(0, &c, 1);
|
EP_WriteIRQ(0, &c, 1);
|
||||||
}else{ // write ZLP
|
}else{ // write ZLP
|
||||||
EP_WriteIRQ(0, (uint8_t *)0, 0);
|
EP_WriteIRQ(0, (uint8_t *)0, 0);
|
||||||
@ -216,7 +222,7 @@ uint16_t EP0_Handler(ep_t ep){
|
|||||||
wr0(USB_ConfigDescriptor, sizeof(USB_ConfigDescriptor));
|
wr0(USB_ConfigDescriptor, sizeof(USB_ConfigDescriptor));
|
||||||
break;
|
break;
|
||||||
case STRING_LANG_DESCRIPTOR:
|
case STRING_LANG_DESCRIPTOR:
|
||||||
wr0(USB_StringLangDescriptor, STRING_LANG_DESCRIPTOR_SIZE_BYTE);
|
wr0((const uint8_t *)&USB_StringLangDescriptor, STRING_LANG_DESCRIPTOR_SIZE_BYTE);
|
||||||
break;
|
break;
|
||||||
case STRING_MAN_DESCRIPTOR:
|
case STRING_MAN_DESCRIPTOR:
|
||||||
wr0((const uint8_t *)&USB_StringManufacturingDescriptor, USB_StringManufacturingDescriptor.bLength);
|
wr0((const uint8_t *)&USB_StringManufacturingDescriptor, USB_StringManufacturingDescriptor.bLength);
|
||||||
@ -278,7 +284,6 @@ uint16_t EP0_Handler(ep_t ep){
|
|||||||
}
|
}
|
||||||
}else if((setup_packet.bmRequestType & VENDOR_MASK_REQUEST) == VENDOR_MASK_REQUEST){ // vendor request
|
}else if((setup_packet.bmRequestType & VENDOR_MASK_REQUEST) == VENDOR_MASK_REQUEST){ // vendor request
|
||||||
vendor_handler(&setup_packet);
|
vendor_handler(&setup_packet);
|
||||||
WRITEDUMP("VENDOR");
|
|
||||||
epstatus = SET_NAK_RX(epstatus);
|
epstatus = SET_NAK_RX(epstatus);
|
||||||
epstatus = SET_VALID_TX(epstatus);
|
epstatus = SET_VALID_TX(epstatus);
|
||||||
}else if((setup_packet.bmRequestType & 0x7f) == CONTROL_REQUEST_TYPE){ // control request
|
}else if((setup_packet.bmRequestType & 0x7f) == CONTROL_REQUEST_TYPE){ // control request
|
||||||
@ -304,7 +309,7 @@ uint16_t EP0_Handler(ep_t ep){
|
|||||||
}else if (ep.rx_flag){ // got data over EP0 or host acknowlegement
|
}else if (ep.rx_flag){ // got data over EP0 or host acknowlegement
|
||||||
if(ep.rx_cnt){
|
if(ep.rx_cnt){
|
||||||
if(setup_packet.bRequest == SET_LINE_CODING){
|
if(setup_packet.bRequest == SET_LINE_CODING){
|
||||||
WRITEDUMP("SET_LINE_CODING");
|
//WRITEDUMP("SET_LINE_CODING");
|
||||||
linecoding_handler((usb_LineCoding*)ep0databuf);
|
linecoding_handler((usb_LineCoding*)ep0databuf);
|
||||||
}
|
}
|
||||||
EP_WriteIRQ(0, (uint8_t *)0, 0);
|
EP_WriteIRQ(0, (uint8_t *)0, 0);
|
||||||
@ -354,6 +359,8 @@ uint16_t EP0_Handler(ep_t ep){
|
|||||||
return epstatus;
|
return epstatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: change initialisation with different buffer size! (EP0 have 8 bytes per buffer, EP1 - 10 bytes!)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Endpoint initialisation, size of input buffer fixed to 64 bytes
|
* Endpoint initialisation, size of input buffer fixed to 64 bytes
|
||||||
* @param number - EP num (0...7)
|
* @param number - EP num (0...7)
|
||||||
@ -388,7 +395,7 @@ void usb_isr(){
|
|||||||
// state is default - wait for enumeration
|
// state is default - wait for enumeration
|
||||||
USB_Dev.USB_Status = USB_DEFAULT_STATE;
|
USB_Dev.USB_Status = USB_DEFAULT_STATE;
|
||||||
}
|
}
|
||||||
while(USB->ISTR & USB_ISTR_CTR){
|
if(USB->ISTR & USB_ISTR_CTR){
|
||||||
// EP number
|
// EP number
|
||||||
n = USB->ISTR & USB_ISTR_EPID;
|
n = USB->ISTR & USB_ISTR_EPID;
|
||||||
// copy status register
|
// copy status register
|
||||||
@ -426,7 +433,6 @@ void usb_isr(){
|
|||||||
epstatus = CLEAR_CTR_TX(epstatus);
|
epstatus = CLEAR_CTR_TX(epstatus);
|
||||||
// refresh EPnR
|
// refresh EPnR
|
||||||
USB->EPnR[n] = epstatus;
|
USB->EPnR[n] = epstatus;
|
||||||
USB_BTABLE->EP[n].USB_COUNT_RX = 0x8400;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -469,9 +475,12 @@ void EP_Write(uint8_t number, const uint8_t *buf, uint16_t size){
|
|||||||
* @return amount of data read
|
* @return amount of data read
|
||||||
*/
|
*/
|
||||||
int EP_Read(uint8_t number, uint8_t *buf){
|
int EP_Read(uint8_t number, uint8_t *buf){
|
||||||
int i = endpoints[number].rx_cnt;
|
int n = endpoints[number].rx_cnt;
|
||||||
if(i) memcpy(buf, endpoints[number].rx_buf, i);
|
if(n){
|
||||||
return i;
|
for(int i = 0; i < n; ++i)
|
||||||
|
buf[i] = endpoints[number].rx_buf[i];
|
||||||
|
}
|
||||||
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
// USB status
|
// USB status
|
||||||
@ -109,16 +109,29 @@
|
|||||||
#define EP_TYPE_ISO 0x02
|
#define EP_TYPE_ISO 0x02
|
||||||
#define EP_TYPE_INTERRUPT 0x03
|
#define EP_TYPE_INTERRUPT 0x03
|
||||||
|
|
||||||
|
#define LANG_US (uint16_t)0x0409
|
||||||
|
|
||||||
#define _USB_STRING_(name, str) \
|
#define _USB_STRING_(name, str) \
|
||||||
const struct name \
|
static const struct name \
|
||||||
{ \
|
{ \
|
||||||
uint8_t bLength; \
|
uint8_t bLength; \
|
||||||
uint8_t bDescriptorType; \
|
uint8_t bDescriptorType; \
|
||||||
wchar_t bString[(sizeof(str) - 2) / 2]; \
|
uint16_t bString[(sizeof(str) - 2) / 2]; \
|
||||||
\
|
\
|
||||||
} \
|
} \
|
||||||
name = {sizeof(name), 0x03, str};
|
name = {sizeof(name), 0x03, str};
|
||||||
|
|
||||||
|
#define _USB_LANG_ID_(lng_id) \
|
||||||
|
\
|
||||||
|
static const struct USB_StringLangDescriptor \
|
||||||
|
{ \
|
||||||
|
uint8_t bLength; \
|
||||||
|
uint8_t bDescriptorType; \
|
||||||
|
uint16_t bString; \
|
||||||
|
\
|
||||||
|
} \
|
||||||
|
USB_StringLangDescriptor = {0x04, 0x03, lng_id};
|
||||||
|
|
||||||
// EP0 configuration packet
|
// EP0 configuration packet
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t bmRequestType;
|
uint8_t bmRequestType;
|
||||||
@ -169,9 +182,7 @@ typedef struct {
|
|||||||
uint16_t wLength;
|
uint16_t wLength;
|
||||||
} __attribute__ ((packed)) usb_cdc_notification;
|
} __attribute__ ((packed)) usb_cdc_notification;
|
||||||
|
|
||||||
extern uint8_t setlinecoding;
|
extern ep_t endpoints[];
|
||||||
#define SETLINECODING() (setlinecoding)
|
|
||||||
#define CLRLINECODING() do{setlinecoding = 0;}while(0)
|
|
||||||
|
|
||||||
void USB_Init();
|
void USB_Init();
|
||||||
uint8_t USB_GetState();
|
uint8_t USB_GetState();
|
||||||
@ -1,5 +1,3 @@
|
|||||||
Simple code for CAN/USB development board
|
Simple code for CAN/USB development board
|
||||||
|
Simultaneous work of USB CDC (PL2303 emulation) and CAN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
USB: https://github.com/majbthrd/CDCHIDwidget/blob/master/src/main.c
|
|
||||||
Loading…
x
Reference in New Issue
Block a user