fixed schematics @ canon managing, add initialization for absolute positioning, TODO: add CAN bus management

This commit is contained in:
Edward Emelianov 2023-03-15 17:50:49 +03:00
parent 46c77abaed
commit 681f3253d7
37 changed files with 2535 additions and 1735 deletions

View File

@ -1,8 +1,8 @@
BINARY := canonusb
# MCU code
MCU ?= F103x8
MCU ?= F103x6
# change this linking script depending on particular MCU model,
LDSCRIPT ?= stm32f103x8.ld
LDSCRIPT ?= stm32f103x6.ld
DEFINES := -DSTM32F10X_LD
include ../makefile.f1

View File

@ -1,9 +1,21 @@
Canon lens management.
# Canon lens management.
Management of some Canon Lens.
## Pinout
* PA4 - lens detect (zero active);
* PA5,6,7 - SPI SCK, MISO, MOSI;
* PA10 - USB DP pullup (zero active);
* PA11,12 - USB DM, DP;
* PA13,14 - SWD IO, CLK;
* PB8,9 - CAN Rx,Tx;
* PC13 - USB/CAN (solder jumper to turn on CAN instead of USB, zero - CAN).
Protocol have a string form, each string ends with '\n'. You should wait an answer for previous command before sending next,
or have risk to miss all the rest commands in one packet.
USB commands:
## USB commands:
0 - move to smallest foc value (e.g. 2.5m)
1 - move to largest foc value (e.g. infinity)

View File

@ -0,0 +1,229 @@
/*
* This file is part of the canonmanage project.
* Copyright 2023 Edward V. Emelianov <edward.emelianoff@gmail.com>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "can.h"
#include <stm32f1.h>
// REMAPPED to PB8/PB9!!!
#include <string.h> // memcpy
// circular buffer for received messages
static CAN_message messages[CAN_INMESSAGE_SIZE];
static uint8_t first_free_idx = 0; // index of first empty cell
static int8_t first_nonfree_idx = -1; // index of first data cell
static uint16_t oldspeed = 0, oldID = 0;
static void can_process_fifo(uint8_t fifo_num);
// push next message into buffer; return 1 if buffer overfull
static int CAN_messagebuf_push(CAN_message *msg){
if(first_free_idx == first_nonfree_idx){
return 1; // no free space
}
if(first_nonfree_idx < 0) first_nonfree_idx = 0; // first message in empty buffer
memcpy(&messages[first_free_idx++], msg, sizeof(CAN_message));
// need to roll?
if(first_free_idx == CAN_INMESSAGE_SIZE) first_free_idx = 0;
return 0;
}
// pop message from buffer
CAN_message *CAN_messagebuf_pop(){
if(first_nonfree_idx < 0) return NULL;
CAN_message *msg = &messages[first_nonfree_idx++];
if(first_nonfree_idx == CAN_INMESSAGE_SIZE) first_nonfree_idx = 0;
if(first_nonfree_idx == first_free_idx){ // buffer is empty - refresh it
first_nonfree_idx = -1;
first_free_idx = 0;
}
return msg;
}
// speed - in kbps, ID - identificator
void CAN_setup(uint16_t speed, uint16_t ID){
if(speed == 0) return; // didn't initialized yet
if(speed < 25) speed = 25;
else if(speed > 3000) speed = 3000;
oldspeed = speed;
oldID = ID;
uint32_t tmout = 16000000;
// Configure GPIO: PB8 - CAN_Rx, PB9 - CAN_Tx
/* (1) Select AF mode (10) on PB8 and PB9 */
/* (2) AF4 for CAN signals */
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN | RCC_APB2ENR_IOPBEN;
AFIO->MAPR |= AFIO_MAPR_CAN_REMAP_REMAP2;
GPIOB->CRH = 0;
//pin_set(GPIOB, 1<<8);
GPIOB->CRH = (GPIOB->CRH & ~(CRH(8,0xf)|CRH(9,0xf))) |
CRH(8, CNF_FLINPUT | MODE_INPUT) | CRH(9, CNF_AFPP | MODE_NORMAL);
/* Enable the peripheral clock CAN */
RCC->APB1ENR |= RCC_APB1ENR_CAN1EN;
CAN1->MCR |= CAN_MCR_INRQ;
while((CAN1->MSR & CAN_MSR_INAK) != CAN_MSR_INAK)
if(--tmout == 0) break;
CAN1->MCR &=~ CAN_MCR_SLEEP;
CAN1->MCR |= CAN_MCR_ABOM; /* allow automatically bus-off */
CAN1->BTR = 2 << 20 | 3 << 16 | (4500/speed - 1);
CAN1->MCR &= ~CAN_MCR_INRQ;
tmout = 16000000;
while((CAN1->MSR & CAN_MSR_INAK) == CAN_MSR_INAK)
if(--tmout == 0) break;
// accept ALL
CAN1->FMR = CAN_FMR_FINIT;
CAN1->FM1R = CAN_FM1R_FBM0; // filter in list mode
CAN1->FA1R = CAN_FA1R_FACT0; // activate filter0
CAN1->sFilterRegister[0].FR1 = ID;
CAN1->FFA1R = 1; // filter 0 for FIFO1
CAN1->FMR &= ~CAN_FMR_FINIT; /* (12) */
CAN1->IER |= CAN_IER_ERRIE | CAN_IER_FOVIE0 | CAN_IER_FOVIE1 | CAN_IER_BOFIE;
/* Configure IT */
NVIC_SetPriority(USB_LP_CAN1_RX0_IRQn, 0); // RX FIFO0 IRQ
NVIC_SetPriority(CAN1_RX1_IRQn, 0); // RX FIFO1 IRQ
NVIC_SetPriority(CAN1_SCE_IRQn, 0); // RX status changed IRQ
NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn);
NVIC_EnableIRQ(CAN1_RX1_IRQn);
NVIC_EnableIRQ(CAN1_SCE_IRQn);
CAN1->MSR = 0; // clear SLAKI, WKUI, ERRI
}
void can_proc(){
// check for messages in FIFO0 & FIFO1
if(CAN1->RF0R & CAN_RF0R_FMP0){
can_process_fifo(0);
}
if(CAN1->RF1R & CAN_RF1R_FMP1){
can_process_fifo(1);
}
IWDG->KR = IWDG_REFRESH;
if(CAN1->ESR & (CAN_ESR_BOFF | CAN_ESR_EPVF | CAN_ESR_EWGF)){ // much errors - restart CAN BUS
// request abort for all mailboxes
CAN1->TSR |= CAN_TSR_ABRQ0 | CAN_TSR_ABRQ1 | CAN_TSR_ABRQ2;
// reset CAN bus
RCC->APB1RSTR |= RCC_APB1RSTR_CAN1RST;
RCC->APB1RSTR &= ~RCC_APB1RSTR_CAN1RST;
CAN_setup(oldspeed, oldID);
}
}
CAN_status can_send(uint8_t *msg, uint8_t len, uint16_t target_id){
uint8_t mailbox = 0;
// check first free mailbox
if(CAN1->TSR & (CAN_TSR_TME)){
mailbox = (CAN1->TSR & CAN_TSR_CODE) >> 24;
}else{ // no free mailboxes
return CAN_BUSY;
}
CAN_TxMailBox_TypeDef *box = &CAN1->sTxMailBox[mailbox];
uint32_t lb = 0, hb = 0;
switch(len){
case 8:
hb |= (uint32_t)msg[7] << 24;
__attribute__((fallthrough));
case 7:
hb |= (uint32_t)msg[6] << 16;
__attribute__((fallthrough));
case 6:
hb |= (uint32_t)msg[5] << 8;
__attribute__((fallthrough));
case 5:
hb |= (uint32_t)msg[4];
__attribute__((fallthrough));
case 4:
lb |= (uint32_t)msg[3] << 24;
__attribute__((fallthrough));
case 3:
lb |= (uint32_t)msg[2] << 16;
__attribute__((fallthrough));
case 2:
lb |= (uint32_t)msg[1] << 8;
__attribute__((fallthrough));
default:
lb |= (uint32_t)msg[0];
}
box->TDLR = lb;
box->TDHR = hb;
box->TDTR = len;
box->TIR = (target_id & 0x7FF) << 21 | CAN_TI0R_TXRQ;
return CAN_OK;
}
static void can_process_fifo(uint8_t fifo_num){
if(fifo_num > 1) return;
CAN_FIFOMailBox_TypeDef *box = &CAN1->sFIFOMailBox[fifo_num];
volatile uint32_t *RFxR = (fifo_num) ? &CAN1->RF1R : &CAN1->RF0R;
// read all
while(*RFxR & CAN_RF0R_FMP0){ // amount of messages pending
// CAN_RDTxR: (16-31) - timestamp, (8-15) - filter match index, (0-3) - data length
/* TODO: check filter match index if more than one ID can receive */
CAN_message msg;
uint8_t *dat = msg.data;
uint8_t len = box->RDTR & 0x0f;
msg.length = len;
msg.ID = box->RIR >> 21;
if(len){ // message can be without data
uint32_t hb = box->RDHR, lb = box->RDLR;
switch(len){
case 8:
dat[7] = hb>>24;
__attribute__((fallthrough));
case 7:
dat[6] = (hb>>16) & 0xff;
__attribute__((fallthrough));
case 6:
dat[5] = (hb>>8) & 0xff;
__attribute__((fallthrough));
case 5:
dat[4] = hb & 0xff;
__attribute__((fallthrough));
case 4:
dat[3] = lb>>24;
__attribute__((fallthrough));
case 3:
dat[2] = (lb>>16) & 0xff;
__attribute__((fallthrough));
case 2:
dat[1] = (lb>>8) & 0xff;
__attribute__((fallthrough));
case 1:
dat[0] = lb & 0xff;
}
}
if(CAN_messagebuf_push(&msg)) return; // error: buffer is full, try later
*RFxR |= CAN_RF0R_RFOM0; // release fifo for access to next message
}
*RFxR = 0; // clear FOVR & FULL
}
void can_rx1_isr(){ // Rx FIFO1 (overrun)
if(CAN1->RF1R & CAN_RF1R_FOVR1){
CAN1->RF1R &= ~CAN_RF1R_FOVR1;
}
}
void can_sce_isr(){ // status changed
if(CAN1->MSR & CAN_MSR_ERRI){ // Error
CAN1->MSR &= ~CAN_MSR_ERRI;
// request abort for problem mailbox
if(CAN1->TSR & CAN_TSR_TERR0) CAN1->TSR |= CAN_TSR_ABRQ0;
if(CAN1->TSR & CAN_TSR_TERR1) CAN1->TSR |= CAN_TSR_ABRQ1;
if(CAN1->TSR & CAN_TSR_TERR2) CAN1->TSR |= CAN_TSR_ABRQ2;
}
}

View File

@ -0,0 +1,53 @@
/*
* This file is part of the canonmanage project.
* Copyright 2023 Edward V. Emelianov <edward.emelianoff@gmail.com>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <stdint.h>
// amount of filter banks in STM32F0
#define STM32F0FBANKNO 28
// flood period in milliseconds
#define FLOOD_PERIOD_MS 5
// incoming message buffer size
#define CAN_INMESSAGE_SIZE (8)
extern uint32_t floodT;
// CAN message
typedef struct{
uint8_t data[8]; // up to 8 bytes of data
uint8_t length; // data length
uint16_t ID; // ID of receiver
} CAN_message;
typedef enum{
CAN_STOP,
CAN_READY,
CAN_BUSY,
CAN_OK,
CAN_ERR,
CAN_FIFO_OVERRUN
} CAN_status;
void CAN_setup(uint16_t speed, uint16_t ID);
CAN_status can_send(uint8_t *msg, uint8_t len, uint16_t target_id);
void can_proc();
CAN_message *CAN_messagebuf_pop();

View File

@ -17,6 +17,7 @@
*/
#include "canon.h"
#include "flash.h"
#include "hardware.h"
#include "proto.h"
#include "spi.h"
@ -24,6 +25,12 @@
#define CU(a) ((const uint8_t*)a)
// common state machine, init state machine
static lens_state state = LENS_DISCONNECTED;
static lensinit_state inistate = INI_ERR;
// Freal = F - Fdelta, F - F counts, Fdelta - F@0; Forig - when F was @ start; Fmax is F@1
static uint16_t Fdelta = 0, Forig = BADFOCVAL, Fmax = BADFOCVAL;
#if 0
typedef struct{
canon_commands cmd; // command code
@ -51,113 +58,271 @@ static command commands[] = {
};
#endif
// command buffer (buf[0] == last command sent)
static uint8_t buf[SPIBUFSZ] = {0}, ready = 0;
// command buffer
static uint8_t buf[MAXCMDLEN] = {0}, ready = 0;
static void canon_read(uint8_t cmd, uint8_t zeroz){
if(zeroz > MAXCMDLEN - 1) return;
// return 1 if Tms - T0 < MOVING_PAUSE
static int waitstill(uint32_t T0){
if(Tms - T0 < MOVING_PAUSE) return 1;
return 0;
}
/**
* @brief canon_read - read some data
* @param cmd
* @param zeroz
* @return
*/
static int canon_read(uint8_t cmd, uint8_t zeroz){
if(zeroz > MAXCMDLEN - 1) return FALSE;
++zeroz;
*((uint32_t*)buf) = 0;
for(int i = 0; i < MAXCMDLEN/4; ++i) ((uint32_t*)buf)[i] = 0;
buf[0] = cmd;
SPI_transmit(buf, zeroz);
}/*
if(SPI_transmit(buf, zeroz) != zeroz) return FALSE;
return TRUE;
}
// get current F value
static uint16_t getfocval(){
if(!canon_read(CANON_GETDIAL, 2)) return BADFOCVAL;
uint16_t F = (buf[1] << 8) | buf[2];
return (F - Fdelta);
}
typedef enum{
F_MOVING,
F_STOPPED,
F_ERR
} f_movstate;
// return F_STOPPED if current F differs from old; modify old
static f_movstate Fstopped(uint16_t *oldF){
uint16_t f = getfocval();
#ifdef EBUG
USB_send("Curpos="); USB_send(u2str(f)); USB_send("\n");
#endif
if(BADFOCVAL == f) return F_ERR;
if(*oldF == f){
DBG("F stopped");
return F_STOPPED;
}
*oldF = f;
return F_MOVING;
}
/*
static void canon_writeu8(uint8_t cmd, uint8_t u){
*((uint32_t*)buf) = 0;
buf[0] = cmd; buf[1] = u;
SPI_transmit(buf, 2);
}*/
static void canon_writeu16(uint8_t cmd, uint16_t u){
static int canon_writeu16(uint8_t cmd, uint16_t u){
*((uint32_t*)buf) = 0;
buf[0] = cmd; buf[1] = u >> 8; buf[2] = u & 0xff;
SPI_transmit(buf, 3);
if(3 != SPI_transmit(buf, 3)) return FALSE;
return TRUE;
}
static void canon_poll(){
DBG("CANON_POLL");
ready = 0;
canon_read(CANON_POLL, 0);
// wait no more than 1s
uint32_t Tstart = Tms;
while(Tms - Tstart < 1000){
IWDG->KR = IWDG_REFRESH;
if(!canon_read(CANON_POLL, 1)){
continue;
}
if(buf[1] == CANON_POLLANS){// && canon_read(CANON_LONGID, 0)){
ready = 1;
DBG("Ready!");
return;
}
}
// set state to error
DBG("Not poll answer or no 0\n");
state = LENS_ERR;
}
// turn on power and send ack
void canon_init(){
ready = 0;
canon_read(CANON_ID, 31);
inistate = INI_ERR;
state = LENS_ERR;
if(!canon_read(CANON_ID, 31)){
DBG("Can't read ID\n");
return;
}
DBG("turn on power\n");
if(!canon_read(CANON_POWERON, 1)){
DBG("OOps\n");
return;
}
canon_poll();
if(ready){
inistate = INI_START;
state = LENS_INITIALIZED;
Fdelta = 0; Forig = BADFOCVAL; Fmax = BADFOCVAL;
}
// send over USB 16-bit unsigned
static void printu16(uint8_t *b){
USB_send(u2str((b[1] << 8) | b[2]));
}
/**
* @brief canon_proc - check incoming SPI messages
*/
void canon_proc(){
uint8_t lastcmd = buf[0]; // last command sent
uint32_t uval;
uint8_t x;
uint8_t *rbuf = SPI_receive(&x);
if(!rbuf) return;
#ifdef EBUG
//if(lastcmd != CANON_POLL){
USB_send("SPI receive: ");
for(uint8_t i = 0; i < x; ++i){
if(i) USB_send(", ");
USB_send(u2hexstr(rbuf[i]));
static uint32_t Tconn = 0;
if(state == LENS_DISCONNECTED){
if(!LENSCONNECTED()){
Tconn = 0;
return;
}
USB_send("\n");
//}
#endif
int need2poll = 0;
switch (lastcmd){
case CANON_LONGID: // something
// need2poll = 0;
break;
case CANON_ID: // got ID -> turn on power
canon_read(CANON_POWERON, 1);
break;
/*case CANON_POWERON:
;
break;*/
case CANON_POLL:
if(rbuf[0] == CANON_POLLANS){
canon_read(CANON_LONGID, 0);
ready = 1;
#ifdef EBUG
USB_send("Ready!\n");
#endif
}else need2poll = 1;
break;
case CANON_GETINFO:
USB_send("Info="); for(int i = 1; i < 7; ++i){
USB_send(u2hexstr(rbuf[i])); USB_send(" ");
if(0 == Tconn){ // just connected
DBG("Lens connected");
Tconn = Tms ? Tms : 1;
return;
}
if(Tms - Tconn < CONN_TIMEOUT) return;
DBG("Connection timeout left, all OK");
LENS_ON();
if(the_conf.autoinit){
canon_init();
}else{
state = LENS_SLEEPING; // wait until init
ready = 1; // emulate ready flag for manual operations
}
return;
}
uint8_t OC = OVERCURRENT();
if(!LENSCONNECTED() || OC){
DBG("Disconnect or overcurrent");
state = OC ? LENS_OVERCURRENT : LENS_DISCONNECTED;
LENS_OFF();
Tconn = 0;
return;
}
if(state == LENS_ERR){
if(0 == Tconn){
DBG("Wait 5s till next recinit");
Tconn = Tms ? Tms : 1;
return;
}
if(Tms - Tconn < REINIT_PAUSE){
DBG("5s left, try to reinit");
Tconn = 0;
canon_init();
}
}
if(state != LENS_INITIALIZED) return;
// initializing procedure: goto zero, check zeropoint and go back
static uint8_t errctr = 0;
if(errctr > 8){
errctr = 0;
inistate = INI_ERR;
}
static uint16_t oldF = BADFOCVAL; // old focus value (need to know that lens dont moving now)
switch(inistate){
case INI_START:
DBG("INI_START");
if(Forig != BADFOCVAL){
if(canon_sendcmd(CANON_FMIN)){
++errctr;
return;
}
inistate = INI_FGOTOZ;
oldF = Forig;
errctr = 0;
Tconn = Tms;
}else{
Forig = getfocval(); // Fdelta == 0 -> Forig now is pure F counts
++errctr;
}
USB_send("\n");
break;
case CANON_GETREG:
USB_send("Reg="); USB_send(u2hexstr((rbuf[1] << 8) | rbuf[2])); USB_send("\n");
case INI_FGOTOZ: // wait until F changes stopped
if(waitstill(Tconn)) return; // timeout
DBG("INI_FGOTOZ");
switch(Fstopped(&oldF)){
case F_STOPPED:
Fdelta = oldF; // F@0
Forig -= oldF; // F in counts from 0
inistate = INI_FPREPMAX;
errctr = 0;
break;
case CANON_GETMODEL:
USB_send("Lens="); printu16(rbuf); USB_send("\n");
case F_ERR:
++errctr;
break;
case CANON_GETDIAL:
USB_send("Fsteps="); printu16(rbuf); USB_send("\n");
//canon_read(CANON_GETFOCM, 4);
default: // moving
return;
}
break;
case INI_FPREPMAX:
DBG("INI_FPREPMAX");
if(canon_sendcmd(CANON_FMAX)){
++errctr;
return;
}
inistate = INI_FGOTOMAX;
errctr = 0;
Tconn = Tms;
break;
case INI_FGOTOMAX:
if(waitstill(Tconn)) return;
DBG("INI_FGOTOMAX");
switch(Fstopped(&oldF)){
case F_STOPPED:
Fmax = oldF;
inistate = INI_FPREPOLD;
errctr = 0;
break;
case F_ERR:
++errctr;
break;
default: // moving
return;
}
break;
case INI_FPREPOLD:
DBG("INI_FPREPOLD");
if(!canon_writeu16(CANON_FOCMOVE, Forig - Fmax)){
++errctr;
}else{
errctr = 0;
inistate = INI_FGOTOOLD;
Tconn = Tms;
}
break;
case INI_FGOTOOLD:
if(waitstill(Tconn)) return;
DBG("INI_FGOTOOLD");
switch(Fstopped(&oldF)){
case F_STOPPED:
DBG("ON position");
inistate = INI_READY;
state = LENS_READY;
errctr = 0;
break;
case F_ERR:
++errctr;
break;
default: // moving
return;
}
break;
default: // some error - change lens state to `ready` despite of errini
DBG("ERROR in initialization -> ready without ini");
state = LENS_READY;
}
/*
case CANON_GETFOCM: // don't work @EF200
uval = (rbuf[1] << 24) | (rbuf[2] << 16) | (rbuf[3] << 8) | rbuf[4];
USB_send("Fval="); USB_send(u2str(uval)); USB_send("\n");
break;
default:
need2poll = 1; // poll after any other command
break;
}
if(need2poll) canon_poll();
*/
}
/**
* @brief canon_diaphragm - run comands
* @param command: open/close diaphragm by 1 step (+/-), open/close fully (o/c)
* @return 0 if success or error code (1 - not ready, 2 - bad command)
* @return 0 if success or error code (1 - not ready, 2 - bad command, 3 - can't send data)
*/
int canon_diaphragm(char command){
if(!ready) return 1;
@ -180,36 +345,58 @@ int canon_diaphragm(char command){
default:
return 2; // unknown command
}
canon_writeu16(CANON_DIAPHRAGM, (uint16_t)(val << 8));
if(!canon_writeu16(CANON_DIAPHRAGM, (uint16_t)(val << 8))) return 3;
canon_poll();
return 0;
}
int canon_focus(int16_t val){
if(!ready) return 1;
if(val == 0) canon_read(CANON_GETDIAL, 2);
else canon_writeu16(CANON_FOCMOVE, val);
if(val < 0){
USB_send("Fsteps="); USB_send(u2str(getfocval())); USB_send("\n");
}else{
if(val > Fmax){
USB_send("Fmax="); USB_send(u2str(Fmax)); USB_send("\n");
return 2;
}
uint16_t curF = getfocval();
if(curF == BADFOCVAL){
DBG("Unknown current F");
return 1;
}
val -= curF;
if(!canon_writeu16(CANON_FOCMOVE, val)) return 1;
}
canon_poll();
return 0;
}
int canon_sendcmd(uint8_t cmd){
if(!ready) return 1;
canon_read(cmd, 0);
if(!ready || !canon_read(cmd, 0)) return 1;
canon_poll();
return 0;
}
void canon_setlastcmd(uint8_t x){
buf[0] = x;
}
// acquire 16bit value
int canon_asku16(uint8_t cmd){
if(!ready) return 1;
canon_read(cmd, 2);
if(!ready || !canon_read(cmd, 3)) return 1;
USB_send("par=");
USB_send(u2str((buf[1] << 8) | buf[2]));
USB_send("\n");
canon_poll();
return 0;
}
int canon_getinfo(){
if(!ready) return 1;
canon_read(CANON_GETINFO, 6);
if(!ready || !canon_read(CANON_GETINFO, 6)) return 1;
USB_send("Info="); for(int i = 1; i < 7; ++i){
USB_send(u2hexstr(buf[i])); USB_send(" ");
}
canon_poll();
USB_send("\n");
return 0;
}
uint16_t canon_getstate(){
return state | (inistate << 8);
}

View File

@ -22,12 +22,26 @@
// all data sent in big-endian format
// max length of commands
// max length of commands buffer
#define MAXCMDLEN (32)
// connection timeout (100ms): do nothing until this timeout
#define CONN_TIMEOUT (100)
// pause after error before next reinit
#define REINIT_PAUSE (5000)
// waiting for starting moving - 0.25s
#define MOVING_PAUSE (250)
// answer for cmd "POLL"
#define CANON_POLLANS (0xaa)
// bad focus value - 32767
#define BADFOCVAL (0x7fff)
// maximal
typedef enum{
CANON_LONGID = 0x00, // long ID ???
CANON_ID = 0x01, // lens ID and other info ???
@ -37,7 +51,7 @@ typedef enum{
CANON_FMIN = 0x06, // =//= min
CANON_POWERON = 0x07, // turn on motors' power
CANON_POWEROFF = 0x08, // turn off power
CANON_POLL = 0x0a, // bysu poll (ans 0xaa when ready or last command code)
CANON_POLL = 0x0a, // busy poll (ans 0xaa when ready or last command code)
CANON_DIAPHRAGM = 0x13, // open/close diaphragm by given (int8_t) value of steps
CANON_FOCMOVE = 0x44, // move focus dial by given amount of steps (int16)
CANON_FOCBYHANDS= 0x5e, // turn on focus move by hands (to turn off send 4,5 or 6)
@ -48,11 +62,33 @@ typedef enum{
CANON_GETFOCM = 0xc2, // get focus position in meters (not for all lenses)
} canon_commands;
typedef enum{
LENS_DISCONNECTED, // no lens found
LENS_SLEEPING, // do nothing until init
LENS_OVERCURRENT, // short circuit
LENS_INITIALIZED, // initializing process
LENS_READY, // ready to operate
LENS_ERR, // some error occured - reconnect after REINIT_PAUSE
LENS_S_AMOUNT
} lens_state;
typedef enum{
INI_START, // base init done, start F initialization
INI_FGOTOZ, // wait until focus gone to minimal value
INI_FPREPMAX, // prepare to go to max
INI_FGOTOMAX, // go to max F value
INI_FPREPOLD, // prepare to go to old
INI_FGOTOOLD, // go to starting F value
INI_READY, // all OK
INI_ERR, // error on any init step
INI_S_AMOUNT
} lensinit_state;
void canon_init();
void canon_proc();
int canon_diaphragm(char command);
int canon_focus(int16_t val);
int canon_sendcmd(uint8_t cmd);
int canon_asku16(uint8_t cmd);
void canon_setlastcmd(uint8_t x);
int canon_getinfo();
uint16_t canon_getstate();

View File

@ -1,5 +1,9 @@
can.c
can.h
canon.c
canon.h
flash.c
flash.h
hardware.c
hardware.h
main.c

View File

@ -0,0 +1,220 @@
/*
* geany_encoding=koi8-r
* flash.c
*
* Copyright 2017 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*
*/
#include "stm32f1.h"
#include "flash.h"
#include "proto.h"
#include "usb.h" // printout
#include <string.h> // memcpy
extern const uint32_t __varsstart, _BLOCKSIZE;
static const uint32_t FLASH_blocksize = (uint32_t)&_BLOCKSIZE;
static uint32_t maxCnum = 1024 / sizeof(user_conf); // can't use blocksize here
// common structure for all datatypes stored
/*typedef struct {
uint16_t userconf_sz;
} flash_storage;*/
#define USERCONF_INITIALIZER { \
.userconf_sz = sizeof(user_conf) \
,.canspeed = 250 \
,.canID = 0xAA \
}
static int write2flash(const void*, const void*, uint32_t);
const user_conf *Flash_Data = (const user_conf *)(&__varsstart);
user_conf the_conf = USERCONF_INITIALIZER;
static int currentconfidx = -1; // index of current configuration
/**
* @brief binarySearch - binary search in flash for last non-empty cell
* any struct searched should have its sizeof() @ the first field!!!
* @param l - left index
* @param r - right index (should be @1 less than last index!)
* @param start - starting address
* @param stor_size - size of structure to search
* @return index of non-empty cell or -1
*/
static int binarySearch(int r, const uint8_t *start, int stor_size){
int l = 0;
while(r >= l){
int mid = l + (r - l) / 2;
#ifdef EBUG
USB_send("mid/l/r=");
USB_send(u2str(mid)); USB_send("/");
USB_send(u2str(l)); USB_send("/");
USB_send(u2str(r)); USB_send("/");
USB_send("\n");
#endif
const uint8_t *s = start + mid * stor_size;
if(*((const uint16_t*)s) == stor_size){
if(*((const uint16_t*)(s + stor_size)) == 0xffff){ // next is free
return mid;
}else{ // element is to the right
l = mid + 1;
}
}else{ // element is to the left
r = mid - 1;
}
}
return -1; // not found
}
/**
* @brief flashstorage_init - initialization of user conf storage
* run in once @ start
*/
void flashstorage_init(){
if(FLASH_SIZE > 0 && FLASH_SIZE < 20000){
uint32_t flsz = FLASH_SIZE * 1024; // size in bytes
flsz -= (uint32_t)(&__varsstart) - FLASH_BASE;
maxCnum = flsz / sizeof(user_conf);
}
#ifdef EBUG
USB_send("INIT\n");
#endif
// -1 if there's no data at all & flash is clear; maxnum-1 if flash is full
currentconfidx = binarySearch((int)maxCnum-2, (const uint8_t*)Flash_Data, sizeof(user_conf));
if(currentconfidx > -1){
memcpy(&the_conf, &Flash_Data[currentconfidx], sizeof(user_conf));
}
#ifdef EBUG
USB_send("currentconfidx="); USB_send(u2str(currentconfidx)); USB_send("\n");
#endif
}
// store new configuration
// @return 0 if all OK
int store_userconf(){
// maxnum - 3 means that there always should be at least one empty record after last data
// for binarySearch() checking that there's nothing more after it!
if(currentconfidx > (int)maxCnum - 3){ // there's no more place
currentconfidx = 0;
if(erase_storage(-1)) return 1;
}else ++currentconfidx; // take next data position (0 - within first run after firmware flashing)
return write2flash((const void*)&Flash_Data[currentconfidx], &the_conf, sizeof(the_conf));
}
static int write2flash(const void *start, const void *wrdata, uint32_t stor_size){
int ret = 0;
if (FLASH->CR & FLASH_CR_LOCK){ // unloch flash
FLASH->KEYR = FLASH_KEY1;
FLASH->KEYR = FLASH_KEY2;
}
while (FLASH->SR & FLASH_SR_BSY) IWDG->KR = IWDG_REFRESH;
FLASH->SR = FLASH_SR_EOP | FLASH_SR_PGERR | FLASH_SR_WRPRTERR; // clear all flags
FLASH->CR |= FLASH_CR_PG;
const uint16_t *data = (const uint16_t*) wrdata;
volatile uint16_t *address = (volatile uint16_t*) start;
uint32_t i, count = (stor_size + 1) / 2;
for(i = 0; i < count; ++i){
*(volatile uint16_t*)(address + i) = data[i];
while(FLASH->SR & FLASH_SR_BSY) IWDG->KR = IWDG_REFRESH;
if(*(volatile uint16_t*)(address + i) != data[i]){
USB_send("DON'T MATCH!\n");
ret = 1;
break;
}
if(FLASH->SR & FLASH_SR_PGERR){
USB_send("Prog err\n");
ret = 1; // program error - meet not 0xffff
break;
}
#ifdef EBUG
USB_send(u2str(stor_size)); USB_send("bytes stored @0x");
USB_send(u2hexstr((uint32_t)(address + i))); USB_send("\n");
#endif
FLASH->SR = FLASH_SR_EOP | FLASH_SR_PGERR | FLASH_SR_WRPRTERR;
}
FLASH->CR &= ~(FLASH_CR_PG);
return ret;
}
// erase Nth page of flash storage (flash should be prepared!)
static int erase_pageN(int N){
int ret = 0;
#ifdef EBUG
USB_send("Erase page #"); USB_send(u2str(N)); USB_send("\n");
#endif
FLASH->AR = (uint32_t)Flash_Data + N*FLASH_blocksize;
FLASH->CR |= FLASH_CR_STRT;
while(FLASH->SR & FLASH_SR_BSY) IWDG->KR = IWDG_REFRESH;
FLASH->SR = FLASH_SR_EOP;
if(FLASH->SR & FLASH_SR_WRPRTERR){ /* Check Write protection error */
ret = 1;
FLASH->SR = FLASH_SR_WRPRTERR; /* Clear the flag by software by writing it at 1*/
}
return ret;
}
// erase full storage (npage < 0) or its nth page; @return 0 if all OK
int erase_storage(int npage){
int ret = 0;
uint32_t end = 1, start = 0, flsz = 0;
if(FLASH_SIZE > 0 && FLASH_SIZE < 20000){
flsz = FLASH_SIZE * 1024; // size in bytes
flsz -= (uint32_t)Flash_Data - FLASH_BASE;
}
end = flsz / FLASH_blocksize;
#ifdef EBUG
USB_send("FLASH_SIZE="); USB_send(u2str(FLASH_SIZE));
USB_send("\nflsz="); USB_send(u2str(flsz));
USB_send("\nend="); USB_send(u2str(end));
USB_send("\ncurrentconfidx="); USB_send(u2str(currentconfidx));
USB_send("\nmaxCnum="); USB_send(u2str(maxCnum));
USB_send("\n");
#endif
if(end == 0 || end >= FLASH_SIZE) return 1;
if(npage > -1){ // erase only one page
if((uint32_t)npage >= end) return 1;
start = npage;
end = start + 1;
}
if((FLASH->CR & FLASH_CR_LOCK) != 0){
FLASH->KEYR = FLASH_KEY1;
FLASH->KEYR = FLASH_KEY2;
}
while(FLASH->SR & FLASH_SR_BSY) IWDG->KR = IWDG_REFRESH;
FLASH->SR = FLASH_SR_EOP | FLASH_SR_PGERR | FLASH_SR_WRPRTERR;
FLASH->CR |= FLASH_CR_PER;
for(uint32_t i = start; i < end; ++i){
if(erase_pageN(i)){
ret = 1;
break;
}
}
FLASH->CR &= ~FLASH_CR_PER;
return ret;
}
void dump_userconf(){
USB_send("userconf_sz="); printu(the_conf.userconf_sz);
USB_send("\ncurrentconfidx="); USB_send(u2str(currentconfidx));
USB_send("\nCAN_speed="); printu(the_conf.canspeed);
USB_send("\nCAN_ID="); printu(the_conf.canID);
USB_send("\nautoinit="); printu(the_conf.autoinit);
USB_send("\n");
}

View File

@ -0,0 +1,41 @@
/*
* This file is part of the canonmanage project.
* Copyright 2023 Edward V. Emelianov <edward.emelianoff@gmail.com>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <stm32f1.h>
#define FLASH_SIZE_REG ((uint32_t)0x1FFFF7E0)
#define FLASH_SIZE *((uint16_t*)FLASH_SIZE_REG)
/*
* struct to save user configurations
*/
typedef struct __attribute__((packed, aligned(4))){
uint16_t userconf_sz; // "magick number"
uint16_t canspeed; // CAN bus speed
uint16_t canID; // CAN bus device ID
uint8_t autoinit; // == 1 for auto-initialization
} user_conf;
extern user_conf the_conf;
void flashstorage_init();
int store_userconf();
int erase_storage(int npage);
void dump_userconf();

View File

@ -18,22 +18,44 @@
#include "hardware.h"
static inline void gpio_setup(){
#ifndef EBUG
TRUE_INLINE void iwdg_setup(){
uint32_t tmout = 16000000;
RCC->CSR |= RCC_CSR_LSION;
while((RCC->CSR & RCC_CSR_LSIRDY) != RCC_CSR_LSIRDY){if(--tmout == 0) break;} /* (2) */
IWDG->KR = IWDG_START;
IWDG->KR = IWDG_WRITE_ACCESS;
IWDG->PR = IWDG_PR_PR_1;
IWDG->RLR = 1250;
tmout = 16000000;
while(IWDG->SR){if(--tmout == 0) break;}
IWDG->KR = IWDG_REFRESH;
}
#endif
// PA4 (L_Detect), PC13 (USB/CAN), PA9 (~OC) - pullup input
// PA8 (Ven, high active), PA10 (USBPU, low active) - pushpull output
TRUE_INLINE void gpio_setup(){
// Set APB2 clock to 72/4=18MHz
RCC->CFGR = (RCC->CFGR & ~RCC_CFGR_PPRE2) | RCC_CFGR_PPRE2_DIV4;
// Enable clocks to the GPIO subsystems, turn on AFIO clocking to disable SWD/JTAG
RCC->APB2ENR = RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPCEN | RCC_APB2ENR_AFIOEN;
AFIO->MAPR = AFIO_MAPR_SWJ_CFG_JTAGDISABLE; // for PA15 - USB pullup
// Set led as opendrain output
GPIOC->CRH = CRH(13, CNF_ODOUTPUT | MODE_SLOW);
// Enable clocks to the GPIO subsystems
RCC->APB2ENR = RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN | RCC_APB2ENR_IOPCEN;// | RCC_APB2ENR_AFIOEN;
//AFIO->MAPR = AFIO_MAPR_SWJ_CFG_JTAGDISABLE; // for PA15 - USB pullup
GPIOC->ODR = 1<<13; // pullup
GPIOA->ODR = 1<<4 | 1<<9;
GPIOC->CRH = CRH(13, CNF_PUDINPUT | MODE_INPUT);
// setup SPI GPIO - alternate function PP (PA5 - SCK, PA6 - MISO, PA7 - MOSI)
GPIOA->CRL = CRL(5, CNF_AFPP|MODE_FAST) | CRL(6, CNF_FLINPUT) | CRL(7, CNF_AFPP|MODE_FAST);
GPIOA->CRL = CRL(4, CNF_PUDINPUT | MODE_INPUT) | CRL(5, CNF_AFPP|MODE_FAST) | CRL(6, CNF_FLINPUT) | CRL(7, CNF_AFPP|MODE_FAST);
// USB pullup (PA15) - pushpull output
USBPU_OFF();
GPIOA->CRH = CRH(15, CNF_PPOUTPUT | MODE_SLOW);
GPIOA->CRH = CRH(8, CNF_PPOUTPUT | MODE_SLOW) | CRH(9, CNF_PUDINPUT | MODE_INPUT) | CRH(10, CNF_PPOUTPUT | MODE_SLOW);
}
void hw_setup(){
gpio_setup();
#ifndef EBUG
iwdg_setup();
#endif
}

View File

@ -1,6 +1,6 @@
/*
* This file is part of the canonmanage project.
* Copyright 2022 Edward V. Emelianov <edward.emelianoff@gmail.com>.
* Copyright 2023 Edward V. Emelianov <edward.emelianoff@gmail.com>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -17,40 +17,39 @@
*/
#pragma once
#ifndef __HARDWARE_H__
#define __HARDWARE_H__
#include <stm32f1.h>
// LED0 - PC13 (bluepill), blinking each second
#define LED0_port GPIOC
#define LED0_pin (1<<13)
#define LED_blink(x) pin_toggle(x ## _port, x ## _pin)
#define LED_on(x) pin_clear(x ## _port, x ## _pin)
#define LED_off(x) pin_set(x ## _port, x ## _pin)
// USB DP pullup: PA10
#define USBPU_port GPIOA
#define USBPU_pin (1<<15)
#define USBPU_ON() pin_set(USBPU_port, USBPU_pin)
#define USBPU_OFF() pin_clear(USBPU_port, USBPU_pin)
#define USBPU_pin (1<<10)
#define USBPU_ON() pin_clear(USBPU_port, USBPU_pin)
#define USBPU_OFF() pin_set(USBPU_port, USBPU_pin)
// Ven (enable lens voltage) - PA8
#define VEN_port GPIOA
#define VEN_pin (1<<8)
#define LENS_ON() pin_set(VEN_port, VEN_pin)
#define LENS_OFF() pin_clear(VEN_port, VEN_pin)
// CAN-USB switch: PC13, pullup
#define USBCAN_port GPIOC
#define USBCAN_pin (1<<13)
#define ISUSB() (USBCAN_port->IDR & USBCAN_pin)
// Lens detect: PA4, pullup
#define LENSDET_port GPIOA
#define LENSDET_pin (1<<4)
#define LENSCONNECTED() (0 == (LENSDET_port->IDR & LENSDET_pin))
// Overcurrent detect: PA9, pullup
#define OC_port GPIOA
#define OC_pin (1<<9)
#define OVERCURRENT() (0 == (OC_port->IDR & OC_pin))
extern volatile uint32_t Tms;
void hw_setup();
// SPI RX/TX max len
#define SPIBUFSZ (32)
#define DMA_SPI_Rx_IRQ DMA1_Channel2_IRQn
#define SPIx SPI1
#define SPI_APB2 RCC_APB2ENR_SPI1EN
#define DMA_SPI DMA1
#define DMA_SPI_AHBENR RCC_AHBENR_DMA1EN
#define DMA_SPI_TCIF DMA_ISR_TCIF2
#define DMA_SPI_CTCIF DMA_IFCR_CTCIF2
#define DMA_SPI_TxChannel DMA1_Channel3
#define DMA_SPI_RxChannel DMA1_Channel2
#define DMA_SPI_Rx_ISR dma1_channel2_isr
#endif // __HARDWARE_H__

View File

@ -220,49 +220,29 @@
)
(footprint "MountingHole:MountingHole_3.2mm_M3" locked (layer "F.Cu")
(tedit 56D1B4CB) (tstamp 16734d16-1a42-4a22-b869-4a9ca8cedfbe)
(at 125.88 63.225)
(tedit 56D1B4CB) (tstamp 1f52451a-b605-4b37-8d5e-abcdc42150a5)
(at 86.05 63.225)
(descr "Mounting Hole 3.2mm, no annular, M3")
(tags "mounting hole 3.2mm no annular m3")
(attr exclude_from_pos_files exclude_from_bom)
(property "Sheetfile" "Canon_manage.kicad_sch")
(property "Sheetname" "")
(path "/815fbf81-beb8-4c4e-bdc3-f07e25d3e951")
(attr exclude_from_pos_files)
(fp_text reference "H4" (at 0 -4.2) (layer "F.SilkS") hide
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 423b774c-dc00-4fee-ae67-3225fd41f07c)
(tstamp 7299b0f1-69ab-4f01-8610-2772d137165d)
)
(fp_text value "MountingHole_3.2mm_M3" (at 0 4.2) (layer "F.Fab")
(fp_text value "MountingHole" (at 0 4.2) (layer "F.Fab") hide
(effects (font (size 1 1) (thickness 0.15)))
(tstamp aca4c892-5600-4da2-8297-84fb9632dfb6)
(tstamp 4dffff95-92ca-4481-943f-45b7add05de0)
)
(fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab")
(fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") hide
(effects (font (size 1 1) (thickness 0.15)))
(tstamp eeabc154-dc58-4096-b340-0aa7fc3f29de)
(tstamp c90a2aa4-9f12-4914-80bb-b6369d9e55c2)
)
(fp_circle (center 0 0) (end 3.2 0) (layer "Cmts.User") (width 0.15) (fill none) (tstamp 005643d7-0a13-4acb-8109-ee0e20b7b556))
(fp_circle (center 0 0) (end 3.45 0) (layer "F.CrtYd") (width 0.05) (fill none) (tstamp c794eb6e-1514-4227-8dea-1d1fd26599e7))
(pad "" np_thru_hole circle locked (at 0 0) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask) (tstamp 4a0ba1b0-0b27-452d-a7e5-e600d6d34178))
)
(footprint "MountingHole:MountingHole_3.2mm_M3" locked (layer "F.Cu")
(tedit 56D1B4CB) (tstamp 1a961959-902e-4bcd-b673-fc9141544da7)
(at 86.05 110.665)
(descr "Mounting Hole 3.2mm, no annular, M3")
(tags "mounting hole 3.2mm no annular m3")
(attr exclude_from_pos_files exclude_from_bom)
(fp_text reference "H2" (at 0 -4.2) (layer "F.SilkS") hide
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 63a9a259-1d1e-4d35-b593-b1e7816f163e)
)
(fp_text value "MountingHole_3.2mm_M3" (at 0 4.2) (layer "F.Fab")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 15f6d9c0-dd63-4cb2-baa9-364e6544f36c)
)
(fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 46cf29e9-7192-4c1f-8e3b-b51358ebff34)
)
(fp_circle (center 0 0) (end 3.2 0) (layer "Cmts.User") (width 0.15) (fill none) (tstamp 09e7f6c0-c44a-48cd-b80c-13c5653126e8))
(fp_circle (center 0 0) (end 3.45 0) (layer "F.CrtYd") (width 0.05) (fill none) (tstamp 95166638-aa04-4554-a5bf-8dad35c4eb32))
(pad "" np_thru_hole circle locked (at 0 0) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask) (tstamp cf9209c8-1741-4bf1-b789-b6e2ba0d338c))
(fp_circle (center 0 0) (end 3.2 0) (layer "Cmts.User") (width 0.15) (fill none) (tstamp e95ebcd8-a15c-4fb0-844a-c331f47741f5))
(fp_circle (center 0 0) (end 3.45 0) (layer "F.CrtYd") (width 0.05) (fill none) (tstamp b40fe7fb-1db8-4227-b12d-e2efdeeebb7f))
(pad "" np_thru_hole circle locked (at 0 0) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask) (tstamp 5abf1666-97a3-4285-b42d-ae3ae56ada75))
)
(footprint "pins:Pin1.5x2mm" (layer "F.Cu")
@ -290,6 +270,32 @@
(net 14 "Net-(J3-Pad1)") (pinfunction "Pin_1") (pintype "passive") (tstamp 643f38c2-2209-44c5-98f4-6c59d229929b))
)
(footprint "MountingHole:MountingHole_3.2mm_M3" locked (layer "F.Cu")
(tedit 56D1B4CB) (tstamp 2d78e870-7ed8-4503-b034-e1c28def1d2c)
(at 86.05 110.665)
(descr "Mounting Hole 3.2mm, no annular, M3")
(tags "mounting hole 3.2mm no annular m3")
(property "Sheetfile" "Canon_manage.kicad_sch")
(property "Sheetname" "")
(path "/96a85704-1d3f-41dc-85e8-ca55d20ba69a")
(attr exclude_from_pos_files)
(fp_text reference "H2" (at 0 -4.2) (layer "F.SilkS") hide
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 7db34386-d81b-4450-822f-841cf0ffd4d2)
)
(fp_text value "MountingHole" (at 0 4.2) (layer "F.Fab") hide
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 861dfbd6-6bc2-4c69-b91f-a1e4c1a23bc0)
)
(fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") hide
(effects (font (size 1 1) (thickness 0.15)))
(tstamp e4dc35a9-1f7d-46df-8953-083627a557d9)
)
(fp_circle (center 0 0) (end 3.2 0) (layer "Cmts.User") (width 0.15) (fill none) (tstamp 9447bc25-e9fd-4447-9041-f664ba825feb))
(fp_circle (center 0 0) (end 3.45 0) (layer "F.CrtYd") (width 0.05) (fill none) (tstamp 58b15950-7523-4b6f-9216-cc76af372d88))
(pad "" np_thru_hole circle locked (at 0 0) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask) (tstamp ae2c7cbf-b419-4938-9183-1dc4c25c650a))
)
(footprint "pins:Pin1.5x2mm" (layer "F.Cu")
(tedit 5A0F774F) (tstamp 371e2d2f-11bf-4c8f-b211-db9c061de80d)
(at 109.64 64.82)
@ -315,6 +321,32 @@
(net 2 "GND") (pinfunction "Pin_1") (pintype "passive") (tstamp b403a92e-2530-4852-99ef-2c64f0fb02f7))
)
(footprint "MountingHole:MountingHole_3.2mm_M3" locked (layer "F.Cu")
(tedit 56D1B4CB) (tstamp 37a4f545-23e5-4392-ae21-4a857e2dc22a)
(at 125.88 63.225)
(descr "Mounting Hole 3.2mm, no annular, M3")
(tags "mounting hole 3.2mm no annular m3")
(property "Sheetfile" "Canon_manage.kicad_sch")
(property "Sheetname" "")
(path "/043d2f7b-4c22-4806-a095-c3e2c7a41696")
(attr exclude_from_pos_files)
(fp_text reference "H3" (at 0 -4.2) (layer "F.SilkS") hide
(effects (font (size 1 1) (thickness 0.15)))
(tstamp d9f5f5a3-2e6d-46a8-8f7b-80df8c5520e5)
)
(fp_text value "MountingHole" (at 0 4.2) (layer "F.Fab") hide
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 0964047c-629e-4247-b794-c006198d862a)
)
(fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") hide
(effects (font (size 1 1) (thickness 0.15)))
(tstamp e510d8ba-bcaa-446d-9204-e8e3fdea19b5)
)
(fp_circle (center 0 0) (end 3.2 0) (layer "Cmts.User") (width 0.15) (fill none) (tstamp d5e6d297-5b69-449f-a9dd-7c29a3ab4f13))
(fp_circle (center 0 0) (end 3.45 0) (layer "F.CrtYd") (width 0.05) (fill none) (tstamp 4a7a1926-78f4-4264-acf1-68c87b5e700d))
(pad "" np_thru_hole circle locked (at 0 0) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask) (tstamp a09501f7-61bf-4798-b503-46d66587d85c))
)
(footprint "pins:Pin1.5x2mm" (layer "F.Cu")
(tedit 5A0F774F) (tstamp 3d86eae8-4725-4b17-8ece-6d07ec290772)
(at 99.5 65.5)
@ -598,27 +630,46 @@
)
)
(footprint "MountingHole:MountingHole_3.2mm_M3" locked (layer "F.Cu")
(tedit 56D1B4CB) (tstamp a715d835-13de-4a94-9347-ded7789445f9)
(at 86.05 63.225)
(descr "Mounting Hole 3.2mm, no annular, M3")
(tags "mounting hole 3.2mm no annular m3")
(attr exclude_from_pos_files exclude_from_bom)
(fp_text reference "H3" (at 0 -4.2) (layer "F.SilkS") hide
(footprint "Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder" (layer "F.Cu")
(tedit 5F68FEEE) (tstamp a35e7d11-e2a1-4dc4-9be3-c5cceeb133ad)
(at 81.026 81.6845 90)
(descr "Resistor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
(tags "resistor handsolder")
(property "Sheetfile" "Canon_manage.kicad_sch")
(property "Sheetname" "")
(path "/0b63ce88-aa3d-4225-9db7-c40346512ac6")
(attr smd)
(fp_text reference "R12" (at 0 -1.43 90) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp fbe06430-6383-4629-b04f-90fe35677ad2)
(tstamp 943d471b-41c8-4a31-a8a0-fa73abc4d0e7)
)
(fp_text value "MountingHole_3.2mm_M3" (at 0 4.2) (layer "F.Fab")
(fp_text value "4k7" (at 0 1.43 90) (layer "F.Fab")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 4e800cc9-d234-4e28-8b27-758aad307521)
(tstamp 9e5996b6-8cdc-4d3e-848e-64841a622b41)
)
(fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 974b8d93-8342-4b28-bf97-71adc66708b7)
(fp_text user "${REFERENCE}" (at 0 0 90) (layer "F.Fab")
(effects (font (size 0.4 0.4) (thickness 0.06)))
(tstamp 5c5c328d-cbeb-4268-9321-e259c5ee3371)
)
(fp_line (start -0.254724 -0.5225) (end 0.254724 -0.5225) (layer "F.SilkS") (width 0.12) (tstamp 9873bf99-fddd-4799-98be-f64f1c52b16e))
(fp_line (start -0.254724 0.5225) (end 0.254724 0.5225) (layer "F.SilkS") (width 0.12) (tstamp b5dcc3bc-2a8c-4b26-8f98-f96b55f26c11))
(fp_line (start -1.65 -0.73) (end 1.65 -0.73) (layer "F.CrtYd") (width 0.05) (tstamp 0994633d-4350-4a75-9ebe-fadea03c3dbe))
(fp_line (start -1.65 0.73) (end -1.65 -0.73) (layer "F.CrtYd") (width 0.05) (tstamp 24fc1602-395d-4152-8d7f-deda95bbafe9))
(fp_line (start 1.65 -0.73) (end 1.65 0.73) (layer "F.CrtYd") (width 0.05) (tstamp 2bcec582-d46b-4be1-ae75-6e0e787ae295))
(fp_line (start 1.65 0.73) (end -1.65 0.73) (layer "F.CrtYd") (width 0.05) (tstamp a2ad4536-880e-4f10-b50c-1426373b683b))
(fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer "F.Fab") (width 0.1) (tstamp 2e353638-2c3e-4462-bbbd-5bb4aa0a9dcd))
(fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer "F.Fab") (width 0.1) (tstamp 3df4bdf7-67b7-47e0-be85-3a703e426a03))
(fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer "F.Fab") (width 0.1) (tstamp 89c18f4c-1328-4f30-a2f8-2120c1db049e))
(fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer "F.Fab") (width 0.1) (tstamp e9546b2c-5079-4ed3-9442-78b7696be04d))
(pad "1" smd roundrect (at -0.9125 0 90) (size 0.975 0.95) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
(net 5 "+3V3") (pintype "passive") (tstamp 76d1ac48-d2f8-4d15-bdb0-eeb93226824c))
(pad "2" smd roundrect (at 0.9125 0 90) (size 0.975 0.95) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
(net 8 "/SPI_MISO") (pintype "passive") (tstamp ed38931e-53d6-47c4-9bff-7ca4e4846800))
(model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0603_1608Metric.wrl"
(offset (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
(fp_circle (center 0 0) (end 3.2 0) (layer "Cmts.User") (width 0.15) (fill none) (tstamp 1b073049-b474-4704-a731-8831ffb40981))
(fp_circle (center 0 0) (end 3.45 0) (layer "F.CrtYd") (width 0.05) (fill none) (tstamp 1c02cde8-d1e8-46c0-8d61-f3c5ae69ddba))
(pad "" np_thru_hole circle locked (at 0 0) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask) (tstamp ff4556d0-5661-4b9f-b2d2-5f484c47d027))
)
(footprint "pins:Pin1.5x2mm" (layer "F.Cu")
@ -646,29 +697,6 @@
(net 36 "/Vlens") (pinfunction "Pin_1") (pintype "passive") (tstamp 8b0a16fe-b739-4867-a2d3-631059457000))
)
(footprint "MountingHole:MountingHole_3.2mm_M3" locked (layer "F.Cu")
(tedit 56D1B4CB) (tstamp b1a0ea7c-550a-4e9e-ba53-becec6e7b063)
(at 125.88 110.665)
(descr "Mounting Hole 3.2mm, no annular, M3")
(tags "mounting hole 3.2mm no annular m3")
(attr exclude_from_pos_files exclude_from_bom)
(fp_text reference "H1" (at 0 -4.2) (layer "F.SilkS") hide
(effects (font (size 1 1) (thickness 0.15)))
(tstamp d1077c1c-6626-4803-ba6f-e90763c2f29b)
)
(fp_text value "MountingHole_3.2mm_M3" (at 0 4.2) (layer "F.Fab")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 70f9b518-1e74-4881-8506-9a45895e59da)
)
(fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp f12cf1bf-0c1d-4553-97e4-93bbfac252c7)
)
(fp_circle (center 0 0) (end 3.2 0) (layer "Cmts.User") (width 0.15) (fill none) (tstamp d8c4537e-5602-4826-8c4e-551ef9170947))
(fp_circle (center 0 0) (end 3.45 0) (layer "F.CrtYd") (width 0.05) (fill none) (tstamp eb80521f-faaf-4d41-9674-6ee59ea1bc5a))
(pad "" np_thru_hole circle locked (at 0 0) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask) (tstamp b9f916d9-362d-46d1-a8aa-86ad9c1ed087))
)
(footprint "pins:Pin1.5x2mm" (layer "F.Cu")
(tedit 5A0F774F) (tstamp b72e6226-01d2-4e4c-b5d0-fefc78e0bcd9)
(at 101.7 64.91)
@ -736,6 +764,32 @@
)
)
(footprint "MountingHole:MountingHole_3.2mm_M3" locked (layer "F.Cu")
(tedit 56D1B4CB) (tstamp be0aee75-4862-4d0d-b27f-5dee529173c0)
(at 125.88 110.665)
(descr "Mounting Hole 3.2mm, no annular, M3")
(tags "mounting hole 3.2mm no annular m3")
(property "Sheetfile" "Canon_manage.kicad_sch")
(property "Sheetname" "")
(path "/7262490d-8a4f-4839-996e-829c60ad379f")
(attr exclude_from_pos_files)
(fp_text reference "H1" (at 0 -4.2) (layer "F.SilkS") hide
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 9fe4648b-144d-4d85-9e73-368119f37ad1)
)
(fp_text value "MountingHole" (at 0 4.2) (layer "F.Fab") hide
(effects (font (size 1 1) (thickness 0.15)))
(tstamp f0fefcda-105c-4a9d-aaf6-72fe2c47eaae)
)
(fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") hide
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 7962260c-3477-4d2f-a127-145e4b2a27ea)
)
(fp_circle (center 0 0) (end 3.2 0) (layer "Cmts.User") (width 0.15) (fill none) (tstamp c0221cad-722a-42ba-a111-4a7117bad6e4))
(fp_circle (center 0 0) (end 3.45 0) (layer "F.CrtYd") (width 0.05) (fill none) (tstamp b5ebc091-d33d-406a-8bb9-1030630ecbbf))
(pad "" np_thru_hole circle locked (at 0 0) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask) (tstamp 5300a82f-d322-44b1-bee1-14c05cf72ebc))
)
(footprint "pins:Pin1.5x2mm" (layer "F.Cu")
(tedit 5A0F774F) (tstamp ccbefbd2-71d6-4dc7-9a51-06952b253b7c)
(at 106.27 64.49)
@ -2903,6 +2957,8 @@
(segment (start 131.064 84.8868) (end 128.613199 84.8868) (width 1) (layer "F.Cu") (net 5) (tstamp 29eb11c4-fc4f-4471-850d-cfaa2616180c))
(segment (start 128.613199 84.8868) (end 128.499999 85) (width 1) (layer "F.Cu") (net 5) (tstamp 34208ed1-3e08-43bd-8bea-eee98a13cddd))
(segment (start 80.1624 87.2236) (end 80.1624 86.8426) (width 0.25) (layer "F.Cu") (net 5) (tstamp 4b0097ec-bdd0-476b-a0a1-be69494f1791))
(segment (start 81.1006 82.5224) (end 81.026 82.597) (width 0.25) (layer "F.Cu") (net 5) (tstamp 5e32793a-0e12-4bca-bf4a-ad86e0c1bf47))
(segment (start 82.677 82.5224) (end 81.1006 82.5224) (width 0.25) (layer "F.Cu") (net 5) (tstamp 6dcf74f7-4c20-4439-9cca-f695bc218b95))
(segment (start 131.064 84.8868) (end 131.064 84.936) (width 1) (layer "F.Cu") (net 5) (tstamp 75f1484f-c5be-4fd1-8294-82bcac522de0))
(segment (start 82.6516 82.5478) (end 82.677 82.5224) (width 0.5) (layer "F.Cu") (net 5) (tstamp 8255f17f-b25f-4bf7-b619-f39db5d40b22))
(segment (start 83.197476 86.8426) (end 83.355274 87.000398) (width 1) (layer "F.Cu") (net 5) (tstamp 85521da3-a16e-4e28-9daf-5450ed36dd45))
@ -2978,13 +3034,15 @@
(segment (start 73.925 88.44) (end 76.66 88.44) (width 0.25) (layer "B.Cu") (net 7) (tstamp 599cae64-23e3-4137-b8aa-51ac4df74cc6))
(segment (start 78.5876 86.5124) (end 78.5876 84.4296) (width 0.25) (layer "B.Cu") (net 7) (tstamp a9f5becb-001f-40a4-8796-22b8fc539d4e))
(segment (start 76.66 88.44) (end 78.5876 86.5124) (width 0.25) (layer "B.Cu") (net 7) (tstamp f92bcc1c-2343-4881-a166-48ad65a8c542))
(segment (start 79.3496 80.772) (end 79.3496 80.264) (width 0.25) (layer "F.Cu") (net 8) (tstamp 25391ded-eb00-4ef4-b8b8-8224d67291f5))
(segment (start 79.3496 84.8868) (end 79.3496 80.772) (width 0.25) (layer "F.Cu") (net 8) (tstamp 35952afd-cd25-4a6c-8647-c8ecb8959a01))
(segment (start 81.026 80.772) (end 79.3496 80.772) (width 0.25) (layer "F.Cu") (net 8) (tstamp 36561c37-e955-4a40-8077-de768fa499a7))
(segment (start 79.8068 78.0288) (end 78.196232 78.0288) (width 0.25) (layer "F.Cu") (net 8) (tstamp 576c4823-b61d-4455-9127-3f9aa1c092d4))
(segment (start 77.6732 86.0442) (end 78.1922 86.0442) (width 0.25) (layer "F.Cu") (net 8) (tstamp 7f1ac5c0-62c1-49bf-a25e-e7194cb6e7ec))
(segment (start 78.1922 86.0442) (end 79.3496 84.8868) (width 0.25) (layer "F.Cu") (net 8) (tstamp 8356ad68-0fb7-4551-83c9-a1d29aec28b0))
(segment (start 80.0608 78.2828) (end 79.8068 78.0288) (width 0.25) (layer "F.Cu") (net 8) (tstamp c5cd7a92-4f3f-49f7-9458-41ef2a41aad2))
(segment (start 78.196232 78.0288) (end 77.334532 78.8905) (width 0.25) (layer "F.Cu") (net 8) (tstamp e4d1e57f-3a3a-444a-80fc-296642c1c811))
(segment (start 79.3496 80.264) (end 80.0608 79.5528) (width 0.25) (layer "F.Cu") (net 8) (tstamp f321af12-cdf9-4805-b953-3c03c0e46b33))
(segment (start 79.3496 84.8868) (end 79.3496 80.264) (width 0.25) (layer "F.Cu") (net 8) (tstamp f6906bce-a422-401a-a7cd-990b16d0f3ee))
(segment (start 80.0608 79.5528) (end 80.0608 78.2828) (width 0.25) (layer "F.Cu") (net 8) (tstamp fe069bf4-fc2f-420e-82e4-340202c237bb))
(via (at 77.6732 86.0442) (size 0.7) (drill 0.3) (layers "F.Cu" "B.Cu") (net 8) (tstamp 342f5985-ad4d-47e8-9ccd-44bd847ce7a7))
(segment (start 77.1 86.0442) (end 75.2042 87.94) (width 0.25) (layer "B.Cu") (net 8) (tstamp b6b8e868-bd9d-4fc8-b197-dac435299fe3))
@ -4685,12 +4743,12 @@
(xy 127.012811 82.466616)
(xy 127.012809 82.466607)
(xy 127.012559 82.465296)
(xy 126.881541 81.9067)
(xy 126.868913 81.85286)
(xy 126.807099 81.589314)
(xy 126.807095 81.5893)
(xy 126.806794 81.588015)
(xy 126.564474 80.72012)
(xy 126.348837 80.056457)
(xy 126.340787 80.031682)
(xy 126.28643 79.864389)
(xy 126.286427 79.864379)
(xy 126.286022 79.863134)
@ -6585,7 +6643,7 @@
(xy 73.515797 79.729929)
(xy 73.522027 79.733769)
(xy 73.522028 79.73377)
(xy 73.599271 79.781383)
(xy 73.606477 79.785825)
(xy 73.66388 79.821209)
(xy 73.828991 79.875974)
(xy 73.835827 79.876674)
@ -6691,7 +6749,7 @@
(xy 69.974744 82.600633)
(xy 70.039808 81.916)
(xy 70.041043 81.9067)
(xy 70.050999 81.848445)
(xy 70.044085 81.8889)
(xy 70.62311 78.500935)
(xy 70.626615 78.485981)
(xy 70.637056 78.451156)
@ -7129,12 +7187,12 @@
(xy 85.652378 79.863134)
(xy 85.651973 79.864379)
(xy 85.65197 79.864389)
(xy 85.589563 80.056457)
(xy 85.597613 80.031682)
(xy 85.373926 80.72012)
(xy 85.131606 81.588015)
(xy 85.131305 81.5893)
(xy 85.131301 81.589314)
(xy 85.056859 81.9067)
(xy 85.069487 81.85286)
(xy 84.925841 82.465296)
(xy 84.925591 82.466607)
(xy 84.925589 82.466616)
@ -7216,6 +7274,9 @@
(xy 83.513569 82.157129)
(xy 83.511527 82.150844)
(xy 83.41604 81.985456)
(xy 83.32151 81.880469)
(xy 83.292675 81.848445)
(xy 83.292674 81.848444)
(xy 83.288253 81.843534)
(xy 83.133752 81.731282)
(xy 83.127724 81.728598)
@ -7237,136 +7298,59 @@
(xy 82.226278 81.728597)
(xy 82.226276 81.728598)
(xy 82.220248 81.731282)
(xy 82.214907 81.735162)
(xy 82.214906 81.735163)
(xy 82.169428 81.768205)
(xy 82.065747 81.843534)
(xy 81.93796 81.985456)
(xy 81.842473 82.150844)
(xy 81.783458 82.332472)
(xy 81.763496 82.5224)
(xy 81.764186 82.528965)
(xy 81.781618 82.694818)
(xy 81.783458 82.712328)
(xy 81.842473 82.893956)
(xy 81.845776 82.899678)
(xy 81.845777 82.899679)
(xy 81.855198 82.915997)
(xy 81.93796 83.059344)
(xy 81.942378 83.064251)
(xy 81.942379 83.064252)
(xy 81.966458 83.090994)
(xy 82.065747 83.201266)
(xy 82.220248 83.313518)
(xy 82.226274 83.316201)
(xy 82.226281 83.316205)
(xy 82.364224 83.37762)
(xy 82.41832 83.4236)
(xy 82.438976 83.492727)
(xy 82.438976 85.7081)
(xy 82.418974 85.776221)
(xy 82.365318 85.822714)
(xy 82.312976 85.8341)
(xy 81.739661 85.8341)
(xy 81.67154 85.814098)
(xy 81.625047 85.760442)
(xy 81.614943 85.690168)
(xy 81.619828 85.669164)
(xy 81.665125 85.529754)
(xy 81.665125 85.529753)
(xy 81.667165 85.523475)
(xy 81.686029 85.344)
(xy 81.680835 85.294583)
(xy 81.667855 85.171089)
(xy 81.667855 85.171088)
(xy 81.667165 85.164525)
(xy 81.656507 85.131721)
(xy 81.625725 85.036983)
(xy 81.611399 84.992893)
(xy 81.603181 84.978658)
(xy 81.542525 84.8736)
(xy 81.525787 84.804605)
(xy 81.542525 84.7476)
(xy 81.608095 84.63403)
(xy 81.608096 84.634029)
(xy 81.611399 84.628307)
(xy 81.652683 84.501246)
(xy 81.665125 84.462954)
(xy 81.665125 84.462953)
(xy 81.667165 84.456675)
(xy 81.673994 84.391708)
(xy 81.685339 84.283765)
(xy 81.686029 84.2772)
(xy 81.678236 84.203059)
(xy 81.667855 84.104289)
(xy 81.667855 84.104288)
(xy 81.667165 84.097725)
(xy 81.648631 84.040681)
(xy 81.618011 83.946444)
(xy 81.611399 83.926093)
(xy 81.607839 83.919926)
(xy 81.549146 83.818268)
(xy 81.521167 83.769807)
(xy 81.400413 83.635696)
(xy 81.254415 83.529622)
(xy 81.248387 83.526938)
(xy 81.248385 83.526937)
(xy 81.095583 83.458905)
(xy 81.095581 83.458905)
(xy 81.089552 83.45622)
(xy 81.001292 83.43746)
(xy 80.919489 83.420072)
(xy 80.919485 83.420072)
(xy 80.913032 83.4187)
(xy 80.732568 83.4187)
(xy 80.726115 83.420072)
(xy 80.726111 83.420072)
(xy 80.644308 83.43746)
(xy 80.556048 83.45622)
(xy 80.550019 83.458904)
(xy 80.550017 83.458905)
(xy 80.397216 83.526937)
(xy 80.397214 83.526938)
(xy 80.391186 83.529622)
(xy 80.385845 83.533502)
(xy 80.385844 83.533503)
(xy 80.250531 83.631813)
(xy 80.250529 83.631815)
(xy 80.245187 83.635696)
(xy 80.202734 83.682845)
(xy 80.142291 83.720083)
(xy 80.071307 83.718732)
(xy 80.012322 83.679218)
(xy 79.984064 83.614087)
(xy 79.9831 83.598533)
(xy 79.9831 80.578594)
(xy 80.003102 80.510473)
(xy 80.020005 80.489499)
(xy 80.453047 80.056457)
(xy 80.461337 80.048913)
(xy 80.467818 80.0448)
(xy 80.514459 79.995132)
(xy 80.517213 79.992291)
(xy 80.536935 79.972569)
(xy 80.539419 79.969367)
(xy 80.547117 79.960355)
(xy 80.571961 79.933898)
(xy 80.577386 79.928121)
(xy 80.587147 79.910366)
(xy 80.597998 79.893847)
(xy 80.610414 79.877841)
(xy 80.620375 79.854823)
(xy 80.627974 79.837263)
(xy 80.633191 79.826613)
(xy 80.654495 79.78786)
(xy 80.659533 79.768237)
(xy 80.665937 79.749534)
(xy 80.670833 79.73822)
(xy 80.670833 79.738219)
(xy 80.673981 79.730945)
(xy 80.67522 79.723122)
(xy 80.675223 79.723112)
(xy 80.680899 79.687276)
(xy 80.683305 79.675656)
(xy 80.692328 79.640511)
(xy 80.692328 79.64051)
(xy 82.061332 81.848437)
(xy 82.05642 81.85286)
(xy 82.055295 81.851611)
(xy 82.001986 81.884451)
(xy 81.9688 81.8889)
(xy 81.912688 81.8889)
(xy 81.844567 81.868898)
(xy 81.82367 81.852073)
(xy 81.823208 81.851611)
(xy 81.788589 81.817053)
(xy 81.745214 81.773753)
(xy 81.711135 81.71147)
(xy 81.716138 81.64065)
(xy 81.745059 81.595563)
(xy 81.847754 81.492688)
(xy 81.847758 81.492683)
(xy 81.852929 81.487503)
(xy 81.861875 81.47299)
(xy 81.940369 81.34565)
(xy 81.94037 81.345648)
(xy 81.944209 81.33942)
(xy 81.998974 81.174309)
(xy 82.0095 81.071572)
(xy 82.0095 80.472428)
(xy 82.007302 80.451244)
(xy 81.999419 80.375265)
(xy 81.999418 80.375261)
(xy 81.998707 80.368407)
(xy 81.973074 80.291574)
(xy 81.945972 80.210341)
(xy 81.943654 80.203393)
(xy 81.852116 80.055469)
(xy 81.83718 80.040559)
(xy 81.734184 79.937742)
(xy 81.734179 79.937738)
(xy 81.729003 79.932571)
(xy 81.722772 79.92873)
(xy 81.58715 79.845131)
(xy 81.587148 79.84513)
(xy 81.58092 79.841291)
(xy 81.415809 79.786526)
(xy 81.408973 79.785826)
(xy 81.40897 79.785825)
(xy 81.357474 79.780549)
(xy 81.313072 79.776)
(xy 80.818131 79.776)
(xy 80.75001 79.755998)
(xy 80.703517 79.702342)
(xy 80.69343 79.636217)
(xy 80.6943 79.63283)
(xy 80.6943 79.612576)
(xy 80.695851 79.592865)
@ -7586,6 +7570,9 @@
(xy 76.911843 83.000712)
(xy 76.91012 83.006643)
(xy 76.867638 83.152869)
(xy 76.867134 83.159274)
(xy 76.867133 83.159279)
(xy 76.864893 83.187742)
(xy 76.8647 83.190198)
(xy 76.8647 84.348202)
(xy 76.867638 84.385531)
@ -7640,6 +7627,9 @@
(xy 76.578762 84.385531)
(xy 76.5817 84.348202)
(xy 76.5817 83.190198)
(xy 76.581507 83.187742)
(xy 76.579267 83.159279)
(xy 76.579266 83.159274)
(xy 76.578762 83.152869)
(xy 76.53628 83.006643)
(xy 76.534557 83.000712)
@ -7667,10 +7657,10 @@
(xy 77.107922 81.616603)
(xy 77.107924 81.616602)
(xy 77.113952 81.613918)
(xy 77.147766 81.589351)
(xy 77.139216 81.595563)
(xy 77.169357 81.573664)
(xy 77.268453 81.501666)
(xy 77.346822 81.414628)
(xy 77.276537 81.492688)
(xy 77.391821 81.364652)
(xy 77.391822 81.364651)
(xy 77.39624 81.359744)
@ -9267,12 +9257,12 @@
(xy 127.012811 82.466616)
(xy 127.012809 82.466607)
(xy 127.012559 82.465296)
(xy 126.881541 81.9067)
(xy 126.868913 81.85286)
(xy 126.807099 81.589314)
(xy 126.807095 81.5893)
(xy 126.806794 81.588015)
(xy 126.564474 80.72012)
(xy 126.348837 80.056457)
(xy 126.340787 80.031682)
(xy 126.28643 79.864389)
(xy 126.286427 79.864379)
(xy 126.286022 79.863134)
@ -11167,7 +11157,7 @@
(xy 73.515797 79.729929)
(xy 73.522027 79.733769)
(xy 73.522028 79.73377)
(xy 73.599271 79.781383)
(xy 73.606477 79.785825)
(xy 73.66388 79.821209)
(xy 73.828991 79.875974)
(xy 73.835827 79.876674)
@ -11273,7 +11263,7 @@
(xy 69.974744 82.600633)
(xy 70.039808 81.916)
(xy 70.041043 81.9067)
(xy 70.050999 81.848445)
(xy 70.044085 81.8889)
(xy 70.62311 78.500935)
(xy 70.626615 78.485981)
(xy 70.637056 78.451156)
@ -11711,12 +11701,12 @@
(xy 85.652378 79.863134)
(xy 85.651973 79.864379)
(xy 85.65197 79.864389)
(xy 85.589563 80.056457)
(xy 85.597613 80.031682)
(xy 85.373926 80.72012)
(xy 85.131606 81.588015)
(xy 85.131305 81.5893)
(xy 85.131301 81.589314)
(xy 85.056859 81.9067)
(xy 85.069487 81.85286)
(xy 84.925841 82.465296)
(xy 84.925591 82.466607)
(xy 84.925589 82.466616)
@ -11798,6 +11788,9 @@
(xy 83.513569 82.157129)
(xy 83.511527 82.150844)
(xy 83.41604 81.985456)
(xy 83.32151 81.880469)
(xy 83.292675 81.848445)
(xy 83.292674 81.848444)
(xy 83.288253 81.843534)
(xy 83.133752 81.731282)
(xy 83.127724 81.728598)
@ -11819,136 +11812,59 @@
(xy 82.226278 81.728597)
(xy 82.226276 81.728598)
(xy 82.220248 81.731282)
(xy 82.214907 81.735162)
(xy 82.214906 81.735163)
(xy 82.169428 81.768205)
(xy 82.065747 81.843534)
(xy 81.93796 81.985456)
(xy 81.842473 82.150844)
(xy 81.783458 82.332472)
(xy 81.763496 82.5224)
(xy 81.764186 82.528965)
(xy 81.781618 82.694818)
(xy 81.783458 82.712328)
(xy 81.842473 82.893956)
(xy 81.845776 82.899678)
(xy 81.845777 82.899679)
(xy 81.855198 82.915997)
(xy 81.93796 83.059344)
(xy 81.942378 83.064251)
(xy 81.942379 83.064252)
(xy 81.966458 83.090994)
(xy 82.065747 83.201266)
(xy 82.220248 83.313518)
(xy 82.226274 83.316201)
(xy 82.226281 83.316205)
(xy 82.364224 83.37762)
(xy 82.41832 83.4236)
(xy 82.438976 83.492727)
(xy 82.438976 85.7081)
(xy 82.418974 85.776221)
(xy 82.365318 85.822714)
(xy 82.312976 85.8341)
(xy 81.739661 85.8341)
(xy 81.67154 85.814098)
(xy 81.625047 85.760442)
(xy 81.614943 85.690168)
(xy 81.619828 85.669164)
(xy 81.665125 85.529754)
(xy 81.665125 85.529753)
(xy 81.667165 85.523475)
(xy 81.686029 85.344)
(xy 81.680835 85.294583)
(xy 81.667855 85.171089)
(xy 81.667855 85.171088)
(xy 81.667165 85.164525)
(xy 81.656507 85.131721)
(xy 81.625725 85.036983)
(xy 81.611399 84.992893)
(xy 81.603181 84.978658)
(xy 81.542525 84.8736)
(xy 81.525787 84.804605)
(xy 81.542525 84.7476)
(xy 81.608095 84.63403)
(xy 81.608096 84.634029)
(xy 81.611399 84.628307)
(xy 81.652683 84.501246)
(xy 81.665125 84.462954)
(xy 81.665125 84.462953)
(xy 81.667165 84.456675)
(xy 81.673994 84.391708)
(xy 81.685339 84.283765)
(xy 81.686029 84.2772)
(xy 81.678236 84.203059)
(xy 81.667855 84.104289)
(xy 81.667855 84.104288)
(xy 81.667165 84.097725)
(xy 81.648631 84.040681)
(xy 81.618011 83.946444)
(xy 81.611399 83.926093)
(xy 81.607839 83.919926)
(xy 81.549146 83.818268)
(xy 81.521167 83.769807)
(xy 81.400413 83.635696)
(xy 81.254415 83.529622)
(xy 81.248387 83.526938)
(xy 81.248385 83.526937)
(xy 81.095583 83.458905)
(xy 81.095581 83.458905)
(xy 81.089552 83.45622)
(xy 81.001292 83.43746)
(xy 80.919489 83.420072)
(xy 80.919485 83.420072)
(xy 80.913032 83.4187)
(xy 80.732568 83.4187)
(xy 80.726115 83.420072)
(xy 80.726111 83.420072)
(xy 80.644308 83.43746)
(xy 80.556048 83.45622)
(xy 80.550019 83.458904)
(xy 80.550017 83.458905)
(xy 80.397216 83.526937)
(xy 80.397214 83.526938)
(xy 80.391186 83.529622)
(xy 80.385845 83.533502)
(xy 80.385844 83.533503)
(xy 80.250531 83.631813)
(xy 80.250529 83.631815)
(xy 80.245187 83.635696)
(xy 80.202734 83.682845)
(xy 80.142291 83.720083)
(xy 80.071307 83.718732)
(xy 80.012322 83.679218)
(xy 79.984064 83.614087)
(xy 79.9831 83.598533)
(xy 79.9831 80.578594)
(xy 80.003102 80.510473)
(xy 80.020005 80.489499)
(xy 80.453047 80.056457)
(xy 80.461337 80.048913)
(xy 80.467818 80.0448)
(xy 80.514459 79.995132)
(xy 80.517213 79.992291)
(xy 80.536935 79.972569)
(xy 80.539419 79.969367)
(xy 80.547117 79.960355)
(xy 80.571961 79.933898)
(xy 80.577386 79.928121)
(xy 80.587147 79.910366)
(xy 80.597998 79.893847)
(xy 80.610414 79.877841)
(xy 80.620375 79.854823)
(xy 80.627974 79.837263)
(xy 80.633191 79.826613)
(xy 80.654495 79.78786)
(xy 80.659533 79.768237)
(xy 80.665937 79.749534)
(xy 80.670833 79.73822)
(xy 80.670833 79.738219)
(xy 80.673981 79.730945)
(xy 80.67522 79.723122)
(xy 80.675223 79.723112)
(xy 80.680899 79.687276)
(xy 80.683305 79.675656)
(xy 80.692328 79.640511)
(xy 80.692328 79.64051)
(xy 82.061332 81.848437)
(xy 82.05642 81.85286)
(xy 82.055295 81.851611)
(xy 82.001986 81.884451)
(xy 81.9688 81.8889)
(xy 81.912688 81.8889)
(xy 81.844567 81.868898)
(xy 81.82367 81.852073)
(xy 81.823208 81.851611)
(xy 81.788589 81.817053)
(xy 81.745214 81.773753)
(xy 81.711135 81.71147)
(xy 81.716138 81.64065)
(xy 81.745059 81.595563)
(xy 81.847754 81.492688)
(xy 81.847758 81.492683)
(xy 81.852929 81.487503)
(xy 81.861875 81.47299)
(xy 81.940369 81.34565)
(xy 81.94037 81.345648)
(xy 81.944209 81.33942)
(xy 81.998974 81.174309)
(xy 82.0095 81.071572)
(xy 82.0095 80.472428)
(xy 82.007302 80.451244)
(xy 81.999419 80.375265)
(xy 81.999418 80.375261)
(xy 81.998707 80.368407)
(xy 81.973074 80.291574)
(xy 81.945972 80.210341)
(xy 81.943654 80.203393)
(xy 81.852116 80.055469)
(xy 81.83718 80.040559)
(xy 81.734184 79.937742)
(xy 81.734179 79.937738)
(xy 81.729003 79.932571)
(xy 81.722772 79.92873)
(xy 81.58715 79.845131)
(xy 81.587148 79.84513)
(xy 81.58092 79.841291)
(xy 81.415809 79.786526)
(xy 81.408973 79.785826)
(xy 81.40897 79.785825)
(xy 81.357474 79.780549)
(xy 81.313072 79.776)
(xy 80.818131 79.776)
(xy 80.75001 79.755998)
(xy 80.703517 79.702342)
(xy 80.69343 79.636217)
(xy 80.6943 79.63283)
(xy 80.6943 79.612576)
(xy 80.695851 79.592865)
@ -12168,6 +12084,9 @@
(xy 76.911843 83.000712)
(xy 76.91012 83.006643)
(xy 76.867638 83.152869)
(xy 76.867134 83.159274)
(xy 76.867133 83.159279)
(xy 76.864893 83.187742)
(xy 76.8647 83.190198)
(xy 76.8647 84.348202)
(xy 76.867638 84.385531)
@ -12222,6 +12141,9 @@
(xy 76.578762 84.385531)
(xy 76.5817 84.348202)
(xy 76.5817 83.190198)
(xy 76.581507 83.187742)
(xy 76.579267 83.159279)
(xy 76.579266 83.159274)
(xy 76.578762 83.152869)
(xy 76.53628 83.006643)
(xy 76.534557 83.000712)
@ -12249,10 +12171,10 @@
(xy 77.107922 81.616603)
(xy 77.107924 81.616602)
(xy 77.113952 81.613918)
(xy 77.147766 81.589351)
(xy 77.139216 81.595563)
(xy 77.169357 81.573664)
(xy 77.268453 81.501666)
(xy 77.346822 81.414628)
(xy 77.276537 81.492688)
(xy 77.391821 81.364652)
(xy 77.391822 81.364651)
(xy 77.39624 81.359744)

View File

@ -1,6 +1,6 @@
{
"board": {
"active_layer": 31,
"active_layer": 0,
"active_layer_preset": "",
"auto_track_width": true,
"hidden_nets": [],
@ -63,7 +63,7 @@
36
],
"visible_layers": "ffffeff_ffffffff",
"zone_display_mode": 1
"zone_display_mode": 0
},
"meta": {
"filename": "Canon_manage.kicad_prl",

View File

@ -1976,6 +1976,9 @@
(junction (at 143.383 49.149) (diameter 0) (color 0 0 0 0)
(uuid 20ec4793-2a48-4c19-ab14-3b6cebd4bedf)
)
(junction (at 94.996 68.453) (diameter 0) (color 0 0 0 0)
(uuid 24742a9a-b84f-4f75-9178-7aa73655fe71)
)
(junction (at 138.176 56.769) (diameter 0) (color 0 0 0 0)
(uuid 2adb69ca-9e90-44d4-991e-b981f94776cb)
)
@ -2079,6 +2082,10 @@
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 13d2e704-8c76-42c2-86b7-8da373348c13)
)
(wire (pts (xy 96.901 68.453) (xy 94.996 68.453))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 195d9c80-07f4-410b-bf46-a0ea1446b7b3)
)
(wire (pts (xy 154.178 29.972) (xy 157.099 29.972))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 2924441e-2797-4328-8ecd-c1b769c7574b)
@ -2167,6 +2174,10 @@
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 9e0da585-daed-4502-a63f-de3f02b4d91f)
)
(wire (pts (xy 94.996 68.453) (xy 81.534 68.453))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid a87d1d78-29f3-470e-b92f-e4f5f6b8d83b)
)
(wire (pts (xy 119.761 86.487) (xy 131.699 86.487))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid aa8d8a3e-f7ae-4a1e-ac07-b14aab5e3af2)
@ -2340,7 +2351,7 @@
(effects (font (size 1.27 1.27)) (justify left bottom))
(uuid 6f0720a0-ddd7-4fea-8dd6-ddcaaf98509d)
)
(label "SPI_MISO" (at 81.534 68.453 0)
(label "SPI_MISO" (at 96.901 68.453 0)
(effects (font (size 1.27 1.27)) (justify left bottom))
(uuid 7481ae00-45fc-45d5-814f-292d3161f9f8)
)
@ -2514,6 +2525,21 @@
)
)
(symbol (lib_id "Device:R") (at 94.996 64.643 0) (unit 1)
(in_bom yes) (on_board yes)
(uuid 0b63ce88-aa3d-4225-9db7-c40346512ac6)
(property "Reference" "R12" (id 0) (at 97.536 64.643 0))
(property "Value" "4k7" (id 1) (at 94.996 64.77 90))
(property "Footprint" "Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder" (id 2) (at 93.218 64.643 90)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "~" (id 3) (at 94.996 64.643 0)
(effects (font (size 1.27 1.27)) hide)
)
(pin "1" (uuid 7c0d8e43-b137-467f-b547-0ce7d20e89a9))
(pin "2" (uuid 4bc741a3-84b0-4451-9a0a-6a91198037d5))
)
(symbol (lib_id "Device:R") (at 263.017 31.877 0) (unit 1)
(in_bom yes) (on_board yes)
(uuid 0dfec3b5-9ee1-43b4-8ea0-660a4b8bc85e)
@ -3243,6 +3269,22 @@
(pin "2" (uuid 639fc6fd-d3b0-4008-b218-9aff71444221))
)
(symbol (lib_id "power:+3V3") (at 94.996 60.833 0) (unit 1)
(in_bom yes) (on_board yes) (fields_autoplaced)
(uuid a216f69b-d762-4c63-943f-36571c08cabf)
(property "Reference" "#PWR017" (id 0) (at 94.996 64.643 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Value" "+3V3" (id 1) (at 94.996 57.2572 0))
(property "Footprint" "" (id 2) (at 94.996 60.833 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (id 3) (at 94.996 60.833 0)
(effects (font (size 1.27 1.27)) hide)
)
(pin "1" (uuid 5ce5bf39-a1e8-4708-acb6-a8e633ae7356))
)
(symbol (lib_id "Connector:Conn_01x01_Male") (at 136.779 81.407 180) (unit 1)
(in_bom yes) (on_board yes) (fields_autoplaced)
(uuid a5775530-a18e-4f83-8d4f-2a5a128645d7)
@ -3788,6 +3830,9 @@
(path "/153eb370-b202-4674-971f-4d10f8163e7a"
(reference "#PWR016") (unit 1) (value "GND") (footprint "")
)
(path "/a216f69b-d762-4c63-943f-36571c08cabf"
(reference "#PWR017") (unit 1) (value "+3V3") (footprint "")
)
(path "/4bdf2397-8c1b-4e8c-9445-9d74caf700a9"
(reference "#PWR0101") (unit 1) (value "+3V3") (footprint "")
)
@ -3923,6 +3968,9 @@
(path "/794eecad-d01e-422c-8c32-56eec85114f2"
(reference "R11") (unit 1) (value "4k7") (footprint "Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder")
)
(path "/0b63ce88-aa3d-4225-9db7-c40346512ac6"
(reference "R12") (unit 1) (value "4k7") (footprint "Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder")
)
(path "/a7aad451-d177-4036-941b-7ff8e9fd7d3a"
(reference "U1") (unit 1) (value "STM32F103C6Tx") (footprint "Package_QFP:LQFP-48_7x7mm_P0.5mm")
)

View File

@ -1,12 +1,12 @@
%TF.GenerationSoftware,KiCad,Pcbnew,6.0.10*%
%TF.CreationDate,2023-03-14T09:48:46+03:00*%
%TF.CreationDate,2023-03-14T16:41:35+03:00*%
%TF.ProjectId,Canon_manage,43616e6f-6e5f-46d6-916e-6167652e6b69,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Copper,L2,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 6.0.10) date 2023-03-14 09:48:46*
G04 Created by KiCad (PCBNEW 6.0.10) date 2023-03-14 16:41:35*
%MOMM*%
%LPD*%
G01*
@ -103,25 +103,25 @@ G04 Aperture macros list end*
%ADD32RoundRect,0.075000X0.662500X-0.075000X0.662500X0.075000X-0.662500X0.075000X-0.662500X-0.075000X0*%
%TD*%
%TA.AperFunction,ViaPad*%
%ADD33C,0.800000*%
%ADD33C,1.200000*%
%TD*%
%TA.AperFunction,ViaPad*%
%ADD34C,1.200000*%
%ADD34C,0.700000*%
%TD*%
%TA.AperFunction,ViaPad*%
%ADD35C,0.700000*%
%ADD35C,0.800000*%
%TD*%
%TA.AperFunction,Conductor*%
%ADD36C,1.000000*%
%ADD36C,0.250000*%
%TD*%
%TA.AperFunction,Conductor*%
%ADD37C,0.200000*%
%TD*%
%TA.AperFunction,Conductor*%
%ADD38C,0.250000*%
%ADD38C,0.500000*%
%TD*%
%TA.AperFunction,Conductor*%
%ADD39C,0.500000*%
%ADD39C,1.000000*%
%TD*%
G04 APERTURE END LIST*
D10*
@ -526,47 +526,39 @@ X82250000Y-88940000D03*
X82250000Y-89440000D03*
%TD*%
D33*
%TO.N,/Ven*%
X112928400Y-56134000D03*
%TO.N,/~{OC}*%
X115620800Y-56134000D03*
%TO.N,/VBUS*%
X95021400Y-60133000D03*
%TO.N,/CANRX*%
X96164400Y-61671200D03*
%TO.N,GND*%
X117348000Y-57099200D03*
%TO.N,/Vlens*%
X115570000Y-58064400D03*
%TO.N,GND*%
X112826800Y-63500000D03*
X107035600Y-61417200D03*
D34*
X109321600Y-58674000D03*
X107619800Y-115290600D03*
D35*
X76708000Y-84342100D03*
D34*
X99060000Y-56184800D03*
X76708000Y-84342100D03*
D33*
X99060000Y-56184800D03*
D35*
X112826800Y-63500000D03*
X72059800Y-81965800D03*
X138658600Y-84658200D03*
X77343000Y-92938600D03*
X82677000Y-80797400D03*
X101057965Y-59820647D03*
X131227800Y-72135600D03*
X117348000Y-57099200D03*
X74904600Y-99949000D03*
D33*
X109321600Y-58674000D03*
D35*
X107035600Y-61417200D03*
X72085200Y-79349600D03*
D34*
%TO.N,/VBUS*%
X95021400Y-60133000D03*
D33*
%TO.N,+3V3*%
X131064000Y-84886800D03*
X80162400Y-86842600D03*
D33*
D35*
X82677000Y-82522400D03*
%TO.N,/L_DETECT*%
X74218800Y-78892400D03*
X76657200Y-80822800D03*
D35*
D34*
%TO.N,/SPI_SCK*%
X78587600Y-84429600D03*
%TO.N,/SPI_MISO*%
@ -577,7 +569,7 @@ X75773200Y-86044200D03*
X80822800Y-84277200D03*
%TO.N,/SWDIO*%
X80822800Y-85344000D03*
D33*
D35*
%TO.N,/BOOT0*%
X80445588Y-88464412D03*
%TO.N,/NRST*%
@ -593,6 +585,10 @@ X81635600Y-78486000D03*
%TO.N,/USBDP*%
X84023200Y-72542400D03*
X82550000Y-78079600D03*
%TO.N,/Vlens*%
X115570000Y-58064400D03*
%TO.N,/CANRX*%
X96164400Y-61671200D03*
%TO.N,/CANTX*%
X93116400Y-62534800D03*
%TO.N,/CANL*%
@ -600,166 +596,12 @@ X102721437Y-53082163D03*
X106900000Y-53212500D03*
%TO.N,/CANH*%
X104343200Y-53238400D03*
%TO.N,/Ven*%
X112928400Y-56134000D03*
%TO.N,/~{OC}*%
X115620800Y-56134000D03*
%TD*%
D36*
%TO.N,/Vlens*%
X115570000Y-58064400D02*
X115570000Y-62077600D01*
X115570000Y-62077600D02*
X115570000Y-64560000D01*
X106270000Y-64490000D02*
X108631600Y-62128400D01*
X108631600Y-62128400D02*
X115519200Y-62128400D01*
X115519200Y-62128400D02*
X115570000Y-62077600D01*
X115570000Y-64560000D02*
X114040000Y-66090000D01*
D37*
%TO.N,GND*%
X107619800Y-115290600D02*
X116789200Y-115290600D01*
X116789200Y-115290600D02*
X138633200Y-93446600D01*
X138633200Y-93446600D02*
X138633200Y-89560400D01*
D38*
%TO.N,/Ven*%
X92786200Y-57988200D02*
X93065600Y-57708800D01*
X104698800Y-56946800D02*
X105156000Y-56489600D01*
X93065600Y-57708800D02*
X96824800Y-57708800D01*
X96824800Y-57708800D02*
X97028000Y-57505600D01*
X97028000Y-57505600D02*
X102971600Y-57505600D01*
X102971600Y-57505600D02*
X103530400Y-56946800D01*
X103530400Y-56946800D02*
X104698800Y-56946800D01*
X105156000Y-56489600D02*
X112572800Y-56489600D01*
X112572800Y-56489600D02*
X112928400Y-56134000D01*
X90424000Y-60350400D02*
X92786200Y-57988200D01*
X92786200Y-57988200D02*
X92887800Y-57886600D01*
X93065600Y-57708800D02*
X92887800Y-57886600D01*
%TO.N,/~{OC}*%
X90830400Y-60553600D02*
X90830400Y-64414400D01*
X97028000Y-58267600D02*
X93116400Y-58267600D01*
X93116400Y-58267600D02*
X90830400Y-60553600D01*
X97332800Y-57962800D02*
X97028000Y-58267600D01*
X80416400Y-74371200D02*
X80416400Y-78638400D01*
X113995200Y-56997600D02*
X105359200Y-56997600D01*
X80416400Y-78638400D02*
X78028800Y-81026000D01*
X114858800Y-56134000D02*
X113995200Y-56997600D01*
X115620800Y-56134000D02*
X114858800Y-56134000D01*
X103174800Y-57962800D02*
X97332800Y-57962800D01*
X103682800Y-57454800D02*
X103174800Y-57962800D01*
X104902000Y-57454800D02*
X103682800Y-57454800D01*
X84429600Y-70358000D02*
X80416400Y-74371200D01*
X105359200Y-56997600D02*
X104902000Y-57454800D01*
X90830400Y-64414400D02*
X84886800Y-70358000D01*
X84886800Y-70358000D02*
X84429600Y-70358000D01*
%TO.N,GND*%
X114757200Y-57099200D02*
X117348000Y-57099200D01*
X109321600Y-58674000D02*
X113182400Y-58674000D01*
X113182400Y-58674000D02*
X114757200Y-57099200D01*
X107035600Y-61417200D02*
X107035600Y-60960000D01*
X107035600Y-60960000D02*
X109321600Y-58674000D01*
%TO.N,/Ven*%
X77571600Y-80822800D02*
X80010000Y-78384400D01*
X80010000Y-78384400D02*
X80010000Y-74168000D01*
X80010000Y-74168000D02*
X84226400Y-69951600D01*
X84226400Y-69951600D02*
X84734400Y-69951600D01*
X84734400Y-69951600D02*
X90424000Y-64262000D01*
X90424000Y-64262000D02*
X90424000Y-60350400D01*
D37*
X77337500Y-82527500D02*
X77337500Y-81056900D01*
X77337500Y-81056900D02*
X77571600Y-80822800D01*
%TO.N,/~{OC}*%
X77837500Y-82527500D02*
X77837500Y-81217300D01*
X77837500Y-81217300D02*
X78028800Y-81026000D01*
D38*
%TO.N,/VBUS*%
X98392000Y-59817000D02*
X95337400Y-59817000D01*
X95337400Y-59817000D02*
X95021400Y-60133000D01*
%TO.N,/USBDM*%
X91744800Y-61518800D02*
X91744800Y-64770000D01*
X98392000Y-60767000D02*
X92496600Y-60767000D01*
X92496600Y-60767000D02*
X91744800Y-61518800D01*
%TO.N,/CANRX*%
X92506800Y-61671200D02*
X96164400Y-61671200D01*
X92278200Y-61899800D02*
X92506800Y-61671200D01*
X92278200Y-64947800D02*
X92278200Y-61899800D01*
%TO.N,/CANTX*%
X86309200Y-78282800D02*
X84429600Y-80162400D01*
X93116400Y-62534800D02*
X93116400Y-65125600D01*
X86309200Y-71932800D02*
X86309200Y-78282800D01*
X93116400Y-65125600D02*
X86309200Y-71932800D01*
X84429600Y-80162400D02*
X84429600Y-82651600D01*
X84429600Y-82651600D02*
X84226400Y-82854800D01*
X84226400Y-82854800D02*
X84226400Y-88138000D01*
X84226400Y-88138000D02*
X84124800Y-88239600D01*
%TO.N,GND*%
X112826800Y-63500000D02*
X110960000Y-63500000D01*
D39*
X110960000Y-63500000D02*
X109640000Y-64820000D01*
D38*
%TO.N,/OSC_IN*%
X78837500Y-94128300D02*
X80365600Y-95656400D01*
@ -773,24 +615,28 @@ D37*
%TO.N,GND*%
X84480400Y-102019600D02*
X84480400Y-91160600D01*
D36*
X113182400Y-58674000D02*
X114757200Y-57099200D01*
D37*
X82250000Y-88940000D02*
X84012400Y-88940000D01*
D38*
D36*
X104343200Y-51413400D02*
X106874100Y-51413400D01*
D39*
D38*
X131227800Y-70608400D02*
X132443400Y-69392800D01*
D38*
D36*
X75742800Y-100787200D02*
X74904600Y-99949000D01*
D37*
X77337500Y-90852500D02*
X77337500Y-92933100D01*
D39*
D38*
X138658600Y-84658200D02*
X138658600Y-89535000D01*
D38*
D36*
X77343000Y-93395800D02*
X76708000Y-94030800D01*
X71780400Y-92608400D02*
@ -800,25 +646,29 @@ X71577200Y-87579200D01*
D37*
X84012400Y-88940000D02*
X84480400Y-89408000D01*
D38*
D36*
X71577200Y-87579200D02*
X71780400Y-87782400D01*
X82499200Y-98348800D02*
X81762600Y-99085400D01*
D36*
D39*
X97310000Y-66260000D02*
X97476600Y-66260000D01*
D37*
X138633200Y-93446600D02*
X138633200Y-89560400D01*
X81164600Y-102664600D02*
X81500000Y-103000000D01*
X107619800Y-115290600D02*
X116789200Y-115290600D01*
X81500000Y-103000000D02*
X83500000Y-103000000D01*
D39*
D38*
X131227800Y-72135600D02*
X131227800Y-70608400D01*
X137693400Y-81203800D02*
X138658600Y-82169000D01*
D38*
D36*
X74904600Y-99085400D02*
X74904600Y-99949000D01*
X72059800Y-83616800D02*
@ -829,26 +679,38 @@ X106874100Y-51413400D02*
X106900000Y-51387500D01*
X99771200Y-60198000D02*
X99771200Y-61620400D01*
X107035600Y-61417200D02*
X107035600Y-60960000D01*
X74574400Y-97382500D02*
X74904600Y-97712700D01*
D37*
X80337500Y-82527500D02*
X80337500Y-81407300D01*
D38*
D36*
X76610100Y-84440000D02*
X76708000Y-84342100D01*
X99771200Y-61620400D02*
X97310000Y-64081600D01*
D39*
X109321600Y-58674000D02*
X113182400Y-58674000D01*
D38*
X110960000Y-63500000D02*
X109640000Y-64820000D01*
D36*
X112826800Y-63500000D02*
X110960000Y-63500000D01*
D38*
X138658600Y-89535000D02*
X138633200Y-89560400D01*
D38*
D36*
X74904600Y-97712700D02*
X74904600Y-99085400D01*
X100152200Y-59817000D02*
X99771200Y-60198000D01*
X97310000Y-64081600D02*
X97310000Y-66260000D01*
X114757200Y-57099200D02*
X117348000Y-57099200D01*
X73925000Y-84440000D02*
X76610100Y-84440000D01*
X71780400Y-87782400D02*
@ -856,22 +718,24 @@ X71780400Y-92608400D01*
D37*
X77337500Y-92933100D02*
X77343000Y-92938600D01*
D38*
D36*
X81762600Y-99085400D02*
X74904600Y-99085400D01*
D37*
X116789200Y-115290600D02*
X138633200Y-93446600D01*
X80337500Y-81407300D02*
X80947400Y-80797400D01*
D38*
D36*
X101092000Y-59817000D02*
X100152200Y-59817000D01*
D37*
X83500000Y-103000000D02*
X84480400Y-102019600D01*
D39*
D38*
X138658600Y-82169000D02*
X138658600Y-84658200D01*
D38*
D36*
X77343000Y-92938600D02*
X77343000Y-93395800D01*
D37*
@ -879,19 +743,21 @@ X80947400Y-80797400D02*
X82677000Y-80797400D01*
X84480400Y-89408000D02*
X84480400Y-91160600D01*
D38*
D36*
X72059800Y-81965800D02*
X72059800Y-83616800D01*
D39*
D38*
X135305800Y-81203800D02*
X137693400Y-81203800D01*
D38*
D36*
X73202800Y-94030800D02*
X76708000Y-94030800D01*
D37*
X81164600Y-100787200D02*
X81164600Y-102664600D01*
D38*
D36*
X107035600Y-60960000D02*
X109321600Y-58674000D01*
X72883000Y-84440000D02*
X73925000Y-84440000D01*
X82499200Y-97382500D02*
@ -905,7 +771,7 @@ X78337500Y-93984500D02*
X76665600Y-95656400D01*
X76664500Y-95657500D02*
X76665600Y-95656400D01*
D36*
D39*
%TO.N,/VBUS*%
X134518400Y-67792600D02*
X134289800Y-67564000D01*
@ -915,25 +781,31 @@ X135827800Y-72135600D02*
X135827800Y-70702200D01*
X135827800Y-70702200D02*
X134518400Y-69392800D01*
D36*
X95337400Y-59817000D02*
X95021400Y-60133000D01*
X98392000Y-59817000D02*
X95337400Y-59817000D01*
D39*
X134289800Y-67564000D02*
X129006600Y-67564000D01*
X129006600Y-67564000D02*
X127609600Y-68961000D01*
X134518400Y-69392800D02*
X134518400Y-67792600D01*
D39*
D38*
%TO.N,+3V3*%
X80162400Y-86842600D02*
X79578200Y-87426800D01*
D38*
D36*
X78790800Y-83667600D02*
X79262600Y-84139400D01*
D36*
D39*
X133558600Y-84658200D02*
X133558600Y-81226000D01*
X133330000Y-84886800D02*
X133558600Y-84658200D01*
D38*
D36*
X77825600Y-88544400D02*
X77622400Y-88544400D01*
X77622400Y-88544400D02*
@ -944,13 +816,13 @@ X79262600Y-84139400D02*
X79262600Y-84952200D01*
X79578200Y-89179400D02*
X79838800Y-89440000D01*
D36*
D39*
X131064000Y-84886800D02*
X133330000Y-84886800D01*
D37*
X76837500Y-91767700D02*
X76837500Y-90852500D01*
D36*
D39*
X133580800Y-78488600D02*
X133527800Y-78435600D01*
D37*
@ -958,21 +830,21 @@ X75666600Y-92938600D02*
X76837500Y-91767700D01*
X82250000Y-89440000D02*
X81044800Y-89440000D01*
D36*
D39*
X133558600Y-81226000D02*
X133580800Y-81203800D01*
D37*
X80837500Y-82527500D02*
X82671900Y-82527500D01*
D39*
D38*
X79578200Y-87426800D02*
X79578200Y-88544400D01*
D38*
D36*
X75488800Y-83667600D02*
X78790800Y-83667600D01*
X79262600Y-84952200D02*
X80162400Y-85852000D01*
D39*
D38*
X133558600Y-84658200D02*
X133558600Y-89351800D01*
X133558600Y-89351800D02*
@ -982,13 +854,13 @@ X76837500Y-89329300D02*
X76837500Y-90852500D01*
X73784800Y-83799800D02*
X73925000Y-83940000D01*
D39*
D38*
X133527800Y-72135600D02*
X133527800Y-78435600D01*
D37*
X81044800Y-89440000D02*
X80837500Y-89647300D01*
D38*
D36*
X75216400Y-83940000D02*
X75488800Y-83667600D01*
X83474800Y-81724600D02*
@ -1000,19 +872,19 @@ X80837500Y-89647300D02*
X80837500Y-90852500D01*
X75618000Y-92938600D02*
X75666600Y-92938600D01*
D38*
D36*
X73925000Y-83940000D02*
X75216400Y-83940000D01*
D37*
X82250000Y-90655200D02*
X82755400Y-91160600D01*
D39*
D38*
X79578200Y-88544400D02*
X79578200Y-89179400D01*
D38*
D36*
X83474800Y-77022000D02*
X83474800Y-81724600D01*
D36*
D39*
X133580800Y-81203800D02*
X133580800Y-78488600D01*
D37*
@ -1020,7 +892,7 @@ X82250000Y-89440000D02*
X82250000Y-90655200D01*
X73784800Y-81965800D02*
X73784800Y-83799800D01*
D38*
D36*
X79578200Y-88544400D02*
X77825600Y-88544400D01*
%TO.N,/L_DETECT*%
@ -1081,7 +953,7 @@ X81470000Y-87440000D02*
X80445588Y-88464412D01*
X82250000Y-87440000D02*
X81470000Y-87440000D01*
D38*
D36*
%TO.N,/NRST*%
X77837500Y-89572300D02*
X77825600Y-89560400D01*
@ -1116,8 +988,10 @@ X103481500Y-61087000D02*
X103161500Y-60767000D01*
X103161500Y-60767000D02*
X101092000Y-60767000D01*
D38*
D36*
%TO.N,/USBDM*%
X92496600Y-60767000D02*
X91744800Y-61518800D01*
X84836000Y-71678800D02*
X84747700Y-71678800D01*
D37*
@ -1125,13 +999,17 @@ X78837500Y-81662500D02*
X78837500Y-82527500D01*
X81635600Y-78864400D02*
X78837500Y-81662500D01*
D38*
D36*
X98392000Y-60767000D02*
X92496600Y-60767000D01*
X91744800Y-64770000D02*
X84836000Y-71678800D01*
X91744800Y-61518800D02*
X91744800Y-64770000D01*
D37*
X81635600Y-78864400D02*
X81635600Y-78486000D01*
D38*
D36*
%TO.N,/USBDP*%
X84480400Y-70967600D02*
X84023200Y-71424800D01*
@ -1148,7 +1026,7 @@ X81974800Y-76757200D01*
D37*
X79337500Y-82527500D02*
X79337500Y-81723900D01*
D38*
D36*
X91236800Y-60830596D02*
X91236800Y-64617600D01*
X98392000Y-58867000D02*
@ -1156,7 +1034,7 @@ X93200395Y-58867000D01*
D37*
X79337500Y-81723900D02*
X82410300Y-78651100D01*
D38*
D36*
X82550000Y-78511400D02*
X82550000Y-78079600D01*
X93200395Y-58867000D02*
@ -1164,14 +1042,43 @@ X91236800Y-60830596D01*
D37*
X82550000Y-78511400D02*
X82410300Y-78651100D01*
D38*
D39*
%TO.N,/Vlens*%
X115570000Y-62077600D02*
X115570000Y-64560000D01*
X115570000Y-64560000D02*
X114040000Y-66090000D01*
X115570000Y-58064400D02*
X115570000Y-62077600D01*
X108631600Y-62128400D02*
X115519200Y-62128400D01*
X115519200Y-62128400D02*
X115570000Y-62077600D01*
X106270000Y-64490000D02*
X108631600Y-62128400D01*
D36*
%TO.N,Net-(JP1-Pad2)*%
X83769200Y-94589600D02*
X81991200Y-92811600D01*
X81991200Y-92811600D02*
X80924400Y-92811600D01*
X80337500Y-92224700D02*
X80337500Y-90852500D01*
X82614600Y-100787200D02*
X83464400Y-100787200D01*
X80924400Y-92811600D02*
X80337500Y-92224700D01*
X83464400Y-100787200D02*
X83769200Y-100482400D01*
X83769200Y-100482400D02*
X83769200Y-94589600D01*
%TO.N,/USB_PU*%
X81330800Y-75844400D02*
X84277200Y-75844400D01*
D37*
X78337500Y-82527500D02*
X78337500Y-81562500D01*
D38*
D36*
X84774800Y-76342000D02*
X84774800Y-77022000D01*
X80850000Y-79050000D02*
@ -1183,7 +1090,7 @@ X81330800Y-75844400D01*
D37*
X78337500Y-81562500D02*
X80850000Y-79050000D01*
D38*
D36*
%TO.N,Net-(Q1-Pad3)*%
X84124800Y-74362000D02*
X82545000Y-74362000D01*
@ -1203,18 +1110,44 @@ X85750400Y-71475600D01*
D37*
X83256000Y-87940000D02*
X83718400Y-87477600D01*
D38*
D36*
X85750400Y-78130400D02*
X83972400Y-79908400D01*
X92278200Y-61899800D02*
X92506800Y-61671200D01*
D37*
X82250000Y-87940000D02*
X83256000Y-87940000D01*
D36*
X92278200Y-64947800D02*
X92278200Y-61899800D01*
X92506800Y-61671200D02*
X96164400Y-61671200D01*
%TO.N,/CANTX*%
X84226400Y-88138000D02*
X84124800Y-88239600D01*
X86309200Y-78282800D02*
X84429600Y-80162400D01*
X93116400Y-65125600D02*
X86309200Y-71932800D01*
D37*
X83924400Y-88440000D02*
X84124800Y-88239600D01*
D36*
X84429600Y-80162400D02*
X84429600Y-82651600D01*
X86309200Y-71932800D02*
X86309200Y-78282800D01*
X84226400Y-82854800D02*
X84226400Y-88138000D01*
D37*
X82250000Y-88440000D02*
X83924400Y-88440000D01*
D38*
D36*
X84429600Y-82651600D02*
X84226400Y-82854800D01*
X93116400Y-62534800D02*
X93116400Y-65125600D01*
%TO.N,/CANL*%
X105562400Y-52374800D02*
X103428800Y-52374800D01*
@ -1224,21 +1157,92 @@ X103428800Y-52374800D02*
X102721437Y-53082163D01*
X106400100Y-53212500D02*
X105562400Y-52374800D01*
%TO.N,Net-(JP1-Pad2)*%
X83769200Y-94589600D02*
X81991200Y-92811600D01*
X81991200Y-92811600D02*
X80924400Y-92811600D01*
X80337500Y-92224700D02*
X80337500Y-90852500D01*
X82614600Y-100787200D02*
X83464400Y-100787200D01*
X80924400Y-92811600D02*
X80337500Y-92224700D01*
X83464400Y-100787200D02*
X83769200Y-100482400D01*
X83769200Y-100482400D02*
X83769200Y-94589600D01*
%TO.N,/Ven*%
X92786200Y-57988200D02*
X92887800Y-57886600D01*
X105156000Y-56489600D02*
X112572800Y-56489600D01*
D37*
X77337500Y-81056900D02*
X77571600Y-80822800D01*
D36*
X112572800Y-56489600D02*
X112928400Y-56134000D01*
X77571600Y-80822800D02*
X80010000Y-78384400D01*
X96824800Y-57708800D02*
X97028000Y-57505600D01*
X103530400Y-56946800D02*
X104698800Y-56946800D01*
X84226400Y-69951600D02*
X84734400Y-69951600D01*
X80010000Y-74168000D02*
X84226400Y-69951600D01*
X93065600Y-57708800D02*
X96824800Y-57708800D01*
X92786200Y-57988200D02*
X93065600Y-57708800D01*
X93065600Y-57708800D02*
X92887800Y-57886600D01*
X90424000Y-64262000D02*
X90424000Y-60350400D01*
X97028000Y-57505600D02*
X102971600Y-57505600D01*
X102971600Y-57505600D02*
X103530400Y-56946800D01*
X80010000Y-78384400D02*
X80010000Y-74168000D01*
X104698800Y-56946800D02*
X105156000Y-56489600D01*
D37*
X77337500Y-82527500D02*
X77337500Y-81056900D01*
D36*
X84734400Y-69951600D02*
X90424000Y-64262000D01*
X90424000Y-60350400D02*
X92786200Y-57988200D01*
%TO.N,/~{OC}*%
X97028000Y-58267600D02*
X93116400Y-58267600D01*
X114858800Y-56134000D02*
X113995200Y-56997600D01*
X105359200Y-56997600D02*
X104902000Y-57454800D01*
X80416400Y-78638400D02*
X78028800Y-81026000D01*
X90830400Y-60553600D02*
X90830400Y-64414400D01*
D37*
X77837500Y-81217300D02*
X78028800Y-81026000D01*
D36*
X115620800Y-56134000D02*
X114858800Y-56134000D01*
X104902000Y-57454800D02*
X103682800Y-57454800D01*
X84429600Y-70358000D02*
X80416400Y-74371200D01*
X103682800Y-57454800D02*
X103174800Y-57962800D01*
X90830400Y-64414400D02*
X84886800Y-70358000D01*
D37*
X77837500Y-82527500D02*
X77837500Y-81217300D01*
D36*
X84886800Y-70358000D02*
X84429600Y-70358000D01*
X103174800Y-57962800D02*
X97332800Y-57962800D01*
X97332800Y-57962800D02*
X97028000Y-58267600D01*
X93116400Y-58267600D02*
X90830400Y-60553600D01*
X113995200Y-56997600D02*
X105359200Y-56997600D01*
X80416400Y-74371200D02*
X80416400Y-78638400D01*
%TD*%
%TA.AperFunction,Conductor*%
%TO.N,GND*%

View File

@ -1,12 +1,12 @@
%TF.GenerationSoftware,KiCad,Pcbnew,6.0.10*%
%TF.CreationDate,2023-03-14T09:48:46+03:00*%
%TF.CreationDate,2023-03-14T16:41:35+03:00*%
%TF.ProjectId,Canon_manage,43616e6f-6e5f-46d6-916e-6167652e6b69,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Soldermask,Bot*%
%TF.FilePolarity,Negative*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 6.0.10) date 2023-03-14 09:48:46*
G04 Created by KiCad (PCBNEW 6.0.10) date 2023-03-14 16:41:35*
%MOMM*%
%LPD*%
G01*
@ -33,8 +33,8 @@ G04 Aperture macros list*
%AMFreePoly1*
4,1,6,0.500000,-0.750000,-0.650000,-0.750000,-0.150000,0.000000,-0.650000,0.750000,0.500000,0.750000,0.500000,-0.750000,0.500000,-0.750000,$1*%
G04 Aperture macros list end*
%ADD10C,2.000000*%
%ADD11C,3.200000*%
%ADD10C,3.200000*%
%ADD11C,2.000000*%
%ADD12C,0.650000*%
%ADD13O,1.000000X2.100000*%
%ADD14O,1.000000X1.600000*%
@ -60,17 +60,22 @@ G04 Aperture macros list end*
%ADD34RoundRect,0.075000X0.662500X-0.075000X0.662500X0.075000X-0.662500X0.075000X-0.662500X-0.075000X0*%
G04 APERTURE END LIST*
D10*
%TO.C,J6*%
X103980000Y-64570000D03*
%TD*%
D11*
%TO.C,H4*%
X86050000Y-63225000D03*
%TD*%
%TO.C,H3*%
X125880000Y-63225000D03*
%TD*%
%TO.C,H2*%
X86050000Y-110665000D03*
%TD*%
D10*
%TO.C,H1*%
X125880000Y-110665000D03*
%TD*%
D11*
%TO.C,J6*%
X103980000Y-64570000D03*
%TD*%
%TO.C,J3*%
X111930000Y-65330000D03*
%TD*%
@ -95,18 +100,9 @@ X109930000Y-50420000D03*
X101290000Y-50420000D03*
%TD*%
D11*
%TO.C,H3*%
X86050000Y-63225000D03*
%TD*%
D10*
%TO.C,J2*%
X114040000Y-66090000D03*
%TD*%
D11*
%TO.C,H1*%
X125880000Y-110665000D03*
%TD*%
D10*
%TO.C,J7*%
X101700000Y-64910000D03*
%TD*%

View File

@ -1,12 +1,12 @@
%TF.GenerationSoftware,KiCad,Pcbnew,6.0.10*%
%TF.CreationDate,2023-03-14T09:48:46+03:00*%
%TF.CreationDate,2023-03-14T16:41:35+03:00*%
%TF.ProjectId,Canon_manage,43616e6f-6e5f-46d6-916e-6167652e6b69,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Paste,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 6.0.10) date 2023-03-14 09:48:46*
G04 Created by KiCad (PCBNEW 6.0.10) date 2023-03-14 16:41:35*
%MOMM*%
%LPD*%
G01*

View File

@ -1,12 +1,12 @@
%TF.GenerationSoftware,KiCad,Pcbnew,6.0.10*%
%TF.CreationDate,2023-03-14T09:48:46+03:00*%
%TF.CreationDate,2023-03-14T16:41:35+03:00*%
%TF.ProjectId,Canon_manage,43616e6f-6e5f-46d6-916e-6167652e6b69,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Legend,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 6.0.10) date 2023-03-14 09:48:46*
G04 Created by KiCad (PCBNEW 6.0.10) date 2023-03-14 16:41:35*
%MOMM*%
%LPD*%
G01*

View File

@ -1,11 +1,11 @@
%TF.GenerationSoftware,KiCad,Pcbnew,6.0.10*%
%TF.CreationDate,2023-03-14T09:48:46+03:00*%
%TF.CreationDate,2023-03-14T16:41:35+03:00*%
%TF.ProjectId,Canon_manage,43616e6f-6e5f-46d6-916e-6167652e6b69,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Profile,NP*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 6.0.10) date 2023-03-14 09:48:46*
G04 Created by KiCad (PCBNEW 6.0.10) date 2023-03-14 16:41:35*
%MOMM*%
%LPD*%
G01*

View File

@ -1,12 +1,12 @@
%TF.GenerationSoftware,KiCad,Pcbnew,6.0.10*%
%TF.CreationDate,2023-03-14T09:48:46+03:00*%
%TF.CreationDate,2023-03-14T16:41:35+03:00*%
%TF.ProjectId,Canon_manage,43616e6f-6e5f-46d6-916e-6167652e6b69,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Soldermask,Top*%
%TF.FilePolarity,Negative*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 6.0.10) date 2023-03-14 09:48:46*
G04 Created by KiCad (PCBNEW 6.0.10) date 2023-03-14 16:41:35*
%MOMM*%
%LPD*%
G01*
@ -29,12 +29,12 @@ G04 Aperture macros list*
20,1,$1+$1,$6,$7,$8,$9,0*
20,1,$1+$1,$8,$9,$2,$3,0*%
G04 Aperture macros list end*
%ADD10R,1.560000X0.650000*%
%ADD11C,2.000000*%
%ADD12C,3.200000*%
%ADD13RoundRect,0.150000X-0.150000X0.512500X-0.150000X-0.512500X0.150000X-0.512500X0.150000X0.512500X0*%
%ADD14RoundRect,0.150000X0.150000X-0.825000X0.150000X0.825000X-0.150000X0.825000X-0.150000X-0.825000X0*%
%ADD15RoundRect,0.237500X0.237500X-0.250000X0.237500X0.250000X-0.237500X0.250000X-0.237500X-0.250000X0*%
%ADD10RoundRect,0.237500X0.237500X-0.250000X0.237500X0.250000X-0.237500X0.250000X-0.237500X-0.250000X0*%
%ADD11C,3.200000*%
%ADD12C,2.000000*%
%ADD13R,1.560000X0.650000*%
%ADD14RoundRect,0.150000X-0.150000X0.512500X-0.150000X-0.512500X0.150000X-0.512500X0.150000X0.512500X0*%
%ADD15RoundRect,0.150000X0.150000X-0.825000X0.150000X0.825000X-0.150000X0.825000X-0.150000X-0.825000X0*%
%ADD16C,0.650000*%
%ADD17R,0.600000X1.450000*%
%ADD18R,0.300000X1.450000*%
@ -46,6 +46,28 @@ G04 Aperture macros list end*
%ADD24RoundRect,0.237500X0.250000X0.237500X-0.250000X0.237500X-0.250000X-0.237500X0.250000X-0.237500X0*%
G04 APERTURE END LIST*
D10*
%TO.C,R12*%
X81026000Y-82597000D03*
X81026000Y-80772000D03*
%TD*%
D11*
%TO.C,H4*%
X86050000Y-63225000D03*
%TD*%
%TO.C,H3*%
X125880000Y-63225000D03*
%TD*%
%TO.C,H2*%
X86050000Y-110665000D03*
%TD*%
%TO.C,H1*%
X125880000Y-110665000D03*
%TD*%
D12*
%TO.C,J6*%
X103980000Y-64570000D03*
%TD*%
D13*
%TO.C,U5*%
X115620800Y-58049200D03*
X115620800Y-57099200D03*
@ -53,18 +75,7 @@ X115620800Y-56149200D03*
X112920800Y-56149200D03*
X112920800Y-58049200D03*
%TD*%
D11*
%TO.C,J6*%
X103980000Y-64570000D03*
%TD*%
D12*
%TO.C,H4*%
X125880000Y-63225000D03*
%TD*%
%TO.C,H2*%
X86050000Y-110665000D03*
%TD*%
D11*
%TO.C,J3*%
X111930000Y-65330000D03*
%TD*%
@ -74,7 +85,7 @@ X109640000Y-64820000D03*
%TO.C,J8*%
X99500000Y-65500000D03*
%TD*%
D13*
D14*
%TO.C,D1*%
X77673200Y-83769200D03*
X76723200Y-83769200D03*
@ -82,7 +93,7 @@ X75773200Y-83769200D03*
X75773200Y-86044200D03*
X77673200Y-86044200D03*
%TD*%
D14*
D15*
%TO.C,U4*%
X92481400Y-60133000D03*
X93751400Y-60133000D03*
@ -93,11 +104,11 @@ X95021400Y-55183000D03*
X93751400Y-55183000D03*
X92481400Y-55183000D03*
%TD*%
D11*
D12*
%TO.C,J9*%
X97310000Y-66260000D03*
%TD*%
D15*
D10*
%TO.C,R3*%
X75776666Y-78890500D03*
X75776666Y-77065500D03*
@ -135,27 +146,18 @@ X109930000Y-50420000D03*
X101290000Y-50420000D03*
%TD*%
D12*
%TO.C,H3*%
X86050000Y-63225000D03*
%TD*%
D11*
%TO.C,J2*%
X114040000Y-66090000D03*
%TD*%
D12*
%TO.C,H1*%
X125880000Y-110665000D03*
%TD*%
D11*
%TO.C,J7*%
X101700000Y-64910000D03*
%TD*%
D15*
D10*
%TO.C,R4*%
X77334532Y-78890500D03*
X77334532Y-77065500D03*
%TD*%
D11*
D12*
%TO.C,J5*%
X106270000Y-64490000D03*
%TD*%
@ -163,7 +165,7 @@ D21*
%TO.C,J35*%
X138633200Y-89560400D03*
%TD*%
D15*
D10*
%TO.C,R2*%
X74218800Y-78890500D03*
X74218800Y-77065500D03*

View File

@ -1,12 +1,12 @@
%TF.GenerationSoftware,KiCad,Pcbnew,6.0.10*%
%TF.CreationDate,2023-03-14T09:48:46+03:00*%
%TF.CreationDate,2023-03-14T16:41:35+03:00*%
%TF.ProjectId,Canon_manage,43616e6f-6e5f-46d6-916e-6167652e6b69,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Paste,Top*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 6.0.10) date 2023-03-14 09:48:46*
G04 Created by KiCad (PCBNEW 6.0.10) date 2023-03-14 16:41:35*
%MOMM*%
%LPD*%
G01*
@ -29,15 +29,20 @@ G04 Aperture macros list*
20,1,$1+$1,$6,$7,$8,$9,0*
20,1,$1+$1,$8,$9,$2,$3,0*%
G04 Aperture macros list end*
%ADD10R,1.560000X0.650000*%
%ADD11RoundRect,0.150000X-0.150000X0.512500X-0.150000X-0.512500X0.150000X-0.512500X0.150000X0.512500X0*%
%ADD12RoundRect,0.150000X0.150000X-0.825000X0.150000X0.825000X-0.150000X0.825000X-0.150000X-0.825000X0*%
%ADD13RoundRect,0.237500X0.237500X-0.250000X0.237500X0.250000X-0.237500X0.250000X-0.237500X-0.250000X0*%
%ADD10RoundRect,0.237500X0.237500X-0.250000X0.237500X0.250000X-0.237500X0.250000X-0.237500X-0.250000X0*%
%ADD11R,1.560000X0.650000*%
%ADD12RoundRect,0.150000X-0.150000X0.512500X-0.150000X-0.512500X0.150000X-0.512500X0.150000X0.512500X0*%
%ADD13RoundRect,0.150000X0.150000X-0.825000X0.150000X0.825000X-0.150000X0.825000X-0.150000X-0.825000X0*%
%ADD14R,0.600000X1.450000*%
%ADD15R,0.300000X1.450000*%
%ADD16RoundRect,0.237500X0.250000X0.237500X-0.250000X0.237500X-0.250000X-0.237500X0.250000X-0.237500X0*%
G04 APERTURE END LIST*
D10*
%TO.C,R12*%
X81026000Y-82597000D03*
X81026000Y-80772000D03*
%TD*%
D11*
%TO.C,U5*%
X115620800Y-58049200D03*
X115620800Y-57099200D03*
@ -45,7 +50,7 @@ X115620800Y-56149200D03*
X112920800Y-56149200D03*
X112920800Y-58049200D03*
%TD*%
D11*
D12*
%TO.C,D1*%
X77673200Y-83769200D03*
X76723200Y-83769200D03*
@ -53,7 +58,7 @@ X75773200Y-83769200D03*
X75773200Y-86044200D03*
X77673200Y-86044200D03*
%TD*%
D12*
D13*
%TO.C,U4*%
X92481400Y-60133000D03*
X93751400Y-60133000D03*
@ -64,7 +69,7 @@ X95021400Y-55183000D03*
X93751400Y-55183000D03*
X92481400Y-55183000D03*
%TD*%
D13*
D10*
%TO.C,R3*%
X75776666Y-78890500D03*
X75776666Y-77065500D03*
@ -92,7 +97,7 @@ D14*
X108060000Y-55515000D03*
X108860000Y-55515000D03*
%TD*%
D13*
D10*
%TO.C,R4*%
X77334532Y-78890500D03*
X77334532Y-77065500D03*

View File

@ -1,21 +1,409 @@
%TF.GenerationSoftware,KiCad,Pcbnew,6.0.10*%
%TF.CreationDate,2023-03-14T09:48:46+03:00*%
%TF.CreationDate,2023-03-14T16:41:35+03:00*%
%TF.ProjectId,Canon_manage,43616e6f-6e5f-46d6-916e-6167652e6b69,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Legend,Top*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 6.0.10) date 2023-03-14 09:48:46*
G04 Created by KiCad (PCBNEW 6.0.10) date 2023-03-14 16:41:35*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.400000*%
%ADD11C,0.150000*%
%ADD10C,0.150000*%
%ADD11C,0.400000*%
%ADD12C,0.120000*%
G04 APERTURE END LIST*
D10*
X72728776Y-88035809D02*
X72871633Y-88073904D01*
X73109728Y-88073904D01*
X73204966Y-88035809D01*
X73252585Y-87997714D01*
X73300204Y-87921523D01*
X73300204Y-87845333D01*
X73252585Y-87769142D01*
X73204966Y-87731047D01*
X73109728Y-87692952D01*
X72919252Y-87654857D01*
X72824014Y-87616761D01*
X72776395Y-87578666D01*
X72728776Y-87502476D01*
X72728776Y-87426285D01*
X72776395Y-87350095D01*
X72824014Y-87312000D01*
X72919252Y-87273904D01*
X73157347Y-87273904D01*
X73300204Y-87312000D01*
X73633538Y-87273904D02*
X73871633Y-88073904D01*
X74062109Y-87502476D01*
X74252585Y-88073904D01*
X74490680Y-87273904D01*
X75443061Y-87997714D02*
X75395442Y-88035809D01*
X75252585Y-88073904D01*
X75157347Y-88073904D01*
X75014490Y-88035809D01*
X74919252Y-87959619D01*
X74871633Y-87883428D01*
X74824014Y-87731047D01*
X74824014Y-87616761D01*
X74871633Y-87464380D01*
X74919252Y-87388190D01*
X75014490Y-87312000D01*
X75157347Y-87273904D01*
X75252585Y-87273904D01*
X75395442Y-87312000D01*
X75443061Y-87350095D01*
X76347823Y-88073904D02*
X75871633Y-88073904D01*
X75871633Y-87273904D01*
X76681157Y-88073904D02*
X76681157Y-87273904D01*
X77252585Y-88073904D02*
X76824014Y-87616761D01*
X77252585Y-87273904D02*
X76681157Y-87731047D01*
X72728776Y-89323809D02*
X72871633Y-89361904D01*
X73109728Y-89361904D01*
X73204966Y-89323809D01*
X73252585Y-89285714D01*
X73300204Y-89209523D01*
X73300204Y-89133333D01*
X73252585Y-89057142D01*
X73204966Y-89019047D01*
X73109728Y-88980952D01*
X72919252Y-88942857D01*
X72824014Y-88904761D01*
X72776395Y-88866666D01*
X72728776Y-88790476D01*
X72728776Y-88714285D01*
X72776395Y-88638095D01*
X72824014Y-88600000D01*
X72919252Y-88561904D01*
X73157347Y-88561904D01*
X73300204Y-88600000D01*
X73633538Y-88561904D02*
X73871633Y-89361904D01*
X74062109Y-88790476D01*
X74252585Y-89361904D01*
X74490680Y-88561904D01*
X74871633Y-89361904D02*
X74871633Y-88561904D01*
X75109728Y-88561904D01*
X75252585Y-88600000D01*
X75347823Y-88676190D01*
X75395442Y-88752380D01*
X75443061Y-88904761D01*
X75443061Y-89019047D01*
X75395442Y-89171428D01*
X75347823Y-89247619D01*
X75252585Y-89323809D01*
X75109728Y-89361904D01*
X74871633Y-89361904D01*
X75871633Y-89361904D02*
X75871633Y-88561904D01*
X76538300Y-88561904D02*
X76728776Y-88561904D01*
X76824014Y-88600000D01*
X76919252Y-88676190D01*
X76966871Y-88828571D01*
X76966871Y-89095238D01*
X76919252Y-89247619D01*
X76824014Y-89323809D01*
X76728776Y-89361904D01*
X76538300Y-89361904D01*
X76443061Y-89323809D01*
X76347823Y-89247619D01*
X76300204Y-89095238D01*
X76300204Y-88828571D01*
X76347823Y-88676190D01*
X76443061Y-88600000D01*
X76538300Y-88561904D01*
X73300204Y-89888000D02*
X73204966Y-89849904D01*
X73062109Y-89849904D01*
X72919252Y-89888000D01*
X72824014Y-89964190D01*
X72776395Y-90040380D01*
X72728776Y-90192761D01*
X72728776Y-90307047D01*
X72776395Y-90459428D01*
X72824014Y-90535619D01*
X72919252Y-90611809D01*
X73062109Y-90649904D01*
X73157347Y-90649904D01*
X73300204Y-90611809D01*
X73347823Y-90573714D01*
X73347823Y-90307047D01*
X73157347Y-90307047D01*
X73776395Y-90649904D02*
X73776395Y-89849904D01*
X74347823Y-90649904D01*
X74347823Y-89849904D01*
X74824014Y-90649904D02*
X74824014Y-89849904D01*
X75062109Y-89849904D01*
X75204966Y-89888000D01*
X75300204Y-89964190D01*
X75347823Y-90040380D01*
X75395442Y-90192761D01*
X75395442Y-90307047D01*
X75347823Y-90459428D01*
X75300204Y-90535619D01*
X75204966Y-90611809D01*
X75062109Y-90649904D01*
X74824014Y-90649904D01*
X72681157Y-91137904D02*
X73300204Y-91137904D01*
X72966871Y-91442666D01*
X73109728Y-91442666D01*
X73204966Y-91480761D01*
X73252585Y-91518857D01*
X73300204Y-91595047D01*
X73300204Y-91785523D01*
X73252585Y-91861714D01*
X73204966Y-91899809D01*
X73109728Y-91937904D01*
X72824014Y-91937904D01*
X72728776Y-91899809D01*
X72681157Y-91861714D01*
X73585919Y-91137904D02*
X73919252Y-91937904D01*
X74252585Y-91137904D01*
X74490680Y-91137904D02*
X75109728Y-91137904D01*
X74776395Y-91442666D01*
X74919252Y-91442666D01*
X75014490Y-91480761D01*
X75062109Y-91518857D01*
X75109728Y-91595047D01*
X75109728Y-91785523D01*
X75062109Y-91861714D01*
X75014490Y-91899809D01*
X74919252Y-91937904D01*
X74633538Y-91937904D01*
X74538300Y-91899809D01*
X74490680Y-91861714D01*
X73109728Y-92806857D02*
X73252585Y-92844952D01*
X73300204Y-92883047D01*
X73347823Y-92959238D01*
X73347823Y-93073523D01*
X73300204Y-93149714D01*
X73252585Y-93187809D01*
X73157347Y-93225904D01*
X72776395Y-93225904D01*
X72776395Y-92425904D01*
X73109728Y-92425904D01*
X73204966Y-92464000D01*
X73252585Y-92502095D01*
X73300204Y-92578285D01*
X73300204Y-92654476D01*
X73252585Y-92730666D01*
X73204966Y-92768761D01*
X73109728Y-92806857D01*
X72776395Y-92806857D01*
X73966871Y-92425904D02*
X74157347Y-92425904D01*
X74252585Y-92464000D01*
X74347823Y-92540190D01*
X74395442Y-92692571D01*
X74395442Y-92959238D01*
X74347823Y-93111619D01*
X74252585Y-93187809D01*
X74157347Y-93225904D01*
X73966871Y-93225904D01*
X73871633Y-93187809D01*
X73776395Y-93111619D01*
X73728776Y-92959238D01*
X73728776Y-92692571D01*
X73776395Y-92540190D01*
X73871633Y-92464000D01*
X73966871Y-92425904D01*
X75014490Y-92425904D02*
X75204966Y-92425904D01*
X75300204Y-92464000D01*
X75395442Y-92540190D01*
X75443061Y-92692571D01*
X75443061Y-92959238D01*
X75395442Y-93111619D01*
X75300204Y-93187809D01*
X75204966Y-93225904D01*
X75014490Y-93225904D01*
X74919252Y-93187809D01*
X74824014Y-93111619D01*
X74776395Y-92959238D01*
X74776395Y-92692571D01*
X74824014Y-92540190D01*
X74919252Y-92464000D01*
X75014490Y-92425904D01*
X75728776Y-92425904D02*
X76300204Y-92425904D01*
X76014490Y-93225904D02*
X76014490Y-92425904D01*
X76824014Y-92425904D02*
X76919252Y-92425904D01*
X77014490Y-92464000D01*
X77062109Y-92502095D01*
X77109728Y-92578285D01*
X77157347Y-92730666D01*
X77157347Y-92921142D01*
X77109728Y-93073523D01*
X77062109Y-93149714D01*
X77014490Y-93187809D01*
X76919252Y-93225904D01*
X76824014Y-93225904D01*
X76728776Y-93187809D01*
X76681157Y-93149714D01*
X76633538Y-93073523D01*
X76585919Y-92921142D01*
X76585919Y-92730666D01*
X76633538Y-92578285D01*
X76681157Y-92502095D01*
X76728776Y-92464000D01*
X76824014Y-92425904D01*
X72776395Y-94513904D02*
X72776395Y-93713904D01*
X73347823Y-94513904D01*
X73347823Y-93713904D01*
X74395442Y-94513904D02*
X74062109Y-94132952D01*
X73824014Y-94513904D02*
X73824014Y-93713904D01*
X74204966Y-93713904D01*
X74300204Y-93752000D01*
X74347823Y-93790095D01*
X74395442Y-93866285D01*
X74395442Y-93980571D01*
X74347823Y-94056761D01*
X74300204Y-94094857D01*
X74204966Y-94132952D01*
X73824014Y-94132952D01*
X74776395Y-94475809D02*
X74919252Y-94513904D01*
X75157347Y-94513904D01*
X75252585Y-94475809D01*
X75300204Y-94437714D01*
X75347823Y-94361523D01*
X75347823Y-94285333D01*
X75300204Y-94209142D01*
X75252585Y-94171047D01*
X75157347Y-94132952D01*
X74966871Y-94094857D01*
X74871633Y-94056761D01*
X74824014Y-94018666D01*
X74776395Y-93942476D01*
X74776395Y-93866285D01*
X74824014Y-93790095D01*
X74871633Y-93752000D01*
X74966871Y-93713904D01*
X75204966Y-93713904D01*
X75347823Y-93752000D01*
X75633538Y-93713904D02*
X76204966Y-93713904D01*
X75919252Y-94513904D02*
X75919252Y-93713904D01*
D11*
X127959219Y-92224361D02*
X129197314Y-92224361D01*
X128530647Y-92986266D01*
X128816361Y-92986266D01*
X129006838Y-93081504D01*
X129102076Y-93176742D01*
X129197314Y-93367219D01*
X129197314Y-93843409D01*
X129102076Y-94033885D01*
X129006838Y-94129123D01*
X128816361Y-94224361D01*
X128244933Y-94224361D01*
X128054457Y-94129123D01*
X127959219Y-94033885D01*
X130054457Y-94033885D02*
X130149695Y-94129123D01*
X130054457Y-94224361D01*
X129959219Y-94129123D01*
X130054457Y-94033885D01*
X130054457Y-94224361D01*
X130816361Y-92224361D02*
X132054457Y-92224361D01*
X131387790Y-92986266D01*
X131673504Y-92986266D01*
X131863980Y-93081504D01*
X131959219Y-93176742D01*
X132054457Y-93367219D01*
X132054457Y-93843409D01*
X131959219Y-94033885D01*
X131863980Y-94129123D01*
X131673504Y-94224361D01*
X131102076Y-94224361D01*
X130911600Y-94129123D01*
X130816361Y-94033885D01*
X132625885Y-92224361D02*
X133292552Y-94224361D01*
X133959219Y-92224361D01*
X128073209Y-74576952D02*
X126882733Y-74576952D01*
X126763685Y-75767428D01*
X126882733Y-75648380D01*
X127120828Y-75529333D01*
X127716066Y-75529333D01*
X127954161Y-75648380D01*
X128073209Y-75767428D01*
X128192257Y-76005523D01*
X128192257Y-76600761D01*
X128073209Y-76838857D01*
X127954161Y-76957904D01*
X127716066Y-77076952D01*
X127120828Y-77076952D01*
X126882733Y-76957904D01*
X126763685Y-76838857D01*
X128906542Y-74576952D02*
X129739876Y-77076952D01*
X130573209Y-74576952D01*
X137347485Y-92116400D02*
X137157009Y-92021161D01*
X136871295Y-92021161D01*
X136585580Y-92116400D01*
X136395104Y-92306876D01*
X136299866Y-92497352D01*
X136204628Y-92878304D01*
X136204628Y-93164019D01*
X136299866Y-93544971D01*
X136395104Y-93735447D01*
X136585580Y-93925923D01*
X136871295Y-94021161D01*
X137061771Y-94021161D01*
X137347485Y-93925923D01*
X137442723Y-93830685D01*
X137442723Y-93164019D01*
X137061771Y-93164019D01*
X138299866Y-92687828D02*
X138299866Y-94021161D01*
X138299866Y-92878304D02*
X138395104Y-92783066D01*
X138585580Y-92687828D01*
X138871295Y-92687828D01*
X139061771Y-92783066D01*
X139157009Y-92973542D01*
X139157009Y-94021161D01*
X140966533Y-94021161D02*
X140966533Y-92021161D01*
X140966533Y-93925923D02*
X140776057Y-94021161D01*
X140395104Y-94021161D01*
X140204628Y-93925923D01*
X140109390Y-93830685D01*
X140014152Y-93640209D01*
X140014152Y-93068780D01*
X140109390Y-92878304D01*
X140204628Y-92783066D01*
X140395104Y-92687828D01*
X140776057Y-92687828D01*
X140966533Y-92783066D01*
X97873561Y-109820352D02*
X97873561Y-111844161D01*
X97992609Y-112082257D01*
@ -334,423 +722,39 @@ X116980704Y-120013209D01*
X117099752Y-120251304D01*
X117337847Y-120370352D01*
X117575942Y-120370352D01*
D11*
X72728776Y-88035809D02*
X72871633Y-88073904D01*
X73109728Y-88073904D01*
X73204966Y-88035809D01*
X73252585Y-87997714D01*
X73300204Y-87921523D01*
X73300204Y-87845333D01*
X73252585Y-87769142D01*
X73204966Y-87731047D01*
X73109728Y-87692952D01*
X72919252Y-87654857D01*
X72824014Y-87616761D01*
X72776395Y-87578666D01*
X72728776Y-87502476D01*
X72728776Y-87426285D01*
X72776395Y-87350095D01*
X72824014Y-87312000D01*
X72919252Y-87273904D01*
X73157347Y-87273904D01*
X73300204Y-87312000D01*
X73633538Y-87273904D02*
X73871633Y-88073904D01*
X74062109Y-87502476D01*
X74252585Y-88073904D01*
X74490680Y-87273904D01*
X75443061Y-87997714D02*
X75395442Y-88035809D01*
X75252585Y-88073904D01*
X75157347Y-88073904D01*
X75014490Y-88035809D01*
X74919252Y-87959619D01*
X74871633Y-87883428D01*
X74824014Y-87731047D01*
X74824014Y-87616761D01*
X74871633Y-87464380D01*
X74919252Y-87388190D01*
X75014490Y-87312000D01*
X75157347Y-87273904D01*
X75252585Y-87273904D01*
X75395442Y-87312000D01*
X75443061Y-87350095D01*
X76347823Y-88073904D02*
X75871633Y-88073904D01*
X75871633Y-87273904D01*
X76681157Y-88073904D02*
X76681157Y-87273904D01*
X77252585Y-88073904D02*
X76824014Y-87616761D01*
X77252585Y-87273904D02*
X76681157Y-87731047D01*
X72728776Y-89323809D02*
X72871633Y-89361904D01*
X73109728Y-89361904D01*
X73204966Y-89323809D01*
X73252585Y-89285714D01*
X73300204Y-89209523D01*
X73300204Y-89133333D01*
X73252585Y-89057142D01*
X73204966Y-89019047D01*
X73109728Y-88980952D01*
X72919252Y-88942857D01*
X72824014Y-88904761D01*
X72776395Y-88866666D01*
X72728776Y-88790476D01*
X72728776Y-88714285D01*
X72776395Y-88638095D01*
X72824014Y-88600000D01*
X72919252Y-88561904D01*
X73157347Y-88561904D01*
X73300204Y-88600000D01*
X73633538Y-88561904D02*
X73871633Y-89361904D01*
X74062109Y-88790476D01*
X74252585Y-89361904D01*
X74490680Y-88561904D01*
X74871633Y-89361904D02*
X74871633Y-88561904D01*
X75109728Y-88561904D01*
X75252585Y-88600000D01*
X75347823Y-88676190D01*
X75395442Y-88752380D01*
X75443061Y-88904761D01*
X75443061Y-89019047D01*
X75395442Y-89171428D01*
X75347823Y-89247619D01*
X75252585Y-89323809D01*
X75109728Y-89361904D01*
X74871633Y-89361904D01*
X75871633Y-89361904D02*
X75871633Y-88561904D01*
X76538300Y-88561904D02*
X76728776Y-88561904D01*
X76824014Y-88600000D01*
X76919252Y-88676190D01*
X76966871Y-88828571D01*
X76966871Y-89095238D01*
X76919252Y-89247619D01*
X76824014Y-89323809D01*
X76728776Y-89361904D01*
X76538300Y-89361904D01*
X76443061Y-89323809D01*
X76347823Y-89247619D01*
X76300204Y-89095238D01*
X76300204Y-88828571D01*
X76347823Y-88676190D01*
X76443061Y-88600000D01*
X76538300Y-88561904D01*
X73300204Y-89888000D02*
X73204966Y-89849904D01*
X73062109Y-89849904D01*
X72919252Y-89888000D01*
X72824014Y-89964190D01*
X72776395Y-90040380D01*
X72728776Y-90192761D01*
X72728776Y-90307047D01*
X72776395Y-90459428D01*
X72824014Y-90535619D01*
X72919252Y-90611809D01*
X73062109Y-90649904D01*
X73157347Y-90649904D01*
X73300204Y-90611809D01*
X73347823Y-90573714D01*
X73347823Y-90307047D01*
X73157347Y-90307047D01*
X73776395Y-90649904D02*
X73776395Y-89849904D01*
X74347823Y-90649904D01*
X74347823Y-89849904D01*
X74824014Y-90649904D02*
X74824014Y-89849904D01*
X75062109Y-89849904D01*
X75204966Y-89888000D01*
X75300204Y-89964190D01*
X75347823Y-90040380D01*
X75395442Y-90192761D01*
X75395442Y-90307047D01*
X75347823Y-90459428D01*
X75300204Y-90535619D01*
X75204966Y-90611809D01*
X75062109Y-90649904D01*
X74824014Y-90649904D01*
X72681157Y-91137904D02*
X73300204Y-91137904D01*
X72966871Y-91442666D01*
X73109728Y-91442666D01*
X73204966Y-91480761D01*
X73252585Y-91518857D01*
X73300204Y-91595047D01*
X73300204Y-91785523D01*
X73252585Y-91861714D01*
X73204966Y-91899809D01*
X73109728Y-91937904D01*
X72824014Y-91937904D01*
X72728776Y-91899809D01*
X72681157Y-91861714D01*
X73585919Y-91137904D02*
X73919252Y-91937904D01*
X74252585Y-91137904D01*
X74490680Y-91137904D02*
X75109728Y-91137904D01*
X74776395Y-91442666D01*
X74919252Y-91442666D01*
X75014490Y-91480761D01*
X75062109Y-91518857D01*
X75109728Y-91595047D01*
X75109728Y-91785523D01*
X75062109Y-91861714D01*
X75014490Y-91899809D01*
X74919252Y-91937904D01*
X74633538Y-91937904D01*
X74538300Y-91899809D01*
X74490680Y-91861714D01*
X73109728Y-92806857D02*
X73252585Y-92844952D01*
X73300204Y-92883047D01*
X73347823Y-92959238D01*
X73347823Y-93073523D01*
X73300204Y-93149714D01*
X73252585Y-93187809D01*
X73157347Y-93225904D01*
X72776395Y-93225904D01*
X72776395Y-92425904D01*
X73109728Y-92425904D01*
X73204966Y-92464000D01*
X73252585Y-92502095D01*
X73300204Y-92578285D01*
X73300204Y-92654476D01*
X73252585Y-92730666D01*
X73204966Y-92768761D01*
X73109728Y-92806857D01*
X72776395Y-92806857D01*
X73966871Y-92425904D02*
X74157347Y-92425904D01*
X74252585Y-92464000D01*
X74347823Y-92540190D01*
X74395442Y-92692571D01*
X74395442Y-92959238D01*
X74347823Y-93111619D01*
X74252585Y-93187809D01*
X74157347Y-93225904D01*
X73966871Y-93225904D01*
X73871633Y-93187809D01*
X73776395Y-93111619D01*
X73728776Y-92959238D01*
X73728776Y-92692571D01*
X73776395Y-92540190D01*
X73871633Y-92464000D01*
X73966871Y-92425904D01*
X75014490Y-92425904D02*
X75204966Y-92425904D01*
X75300204Y-92464000D01*
X75395442Y-92540190D01*
X75443061Y-92692571D01*
X75443061Y-92959238D01*
X75395442Y-93111619D01*
X75300204Y-93187809D01*
X75204966Y-93225904D01*
X75014490Y-93225904D01*
X74919252Y-93187809D01*
X74824014Y-93111619D01*
X74776395Y-92959238D01*
X74776395Y-92692571D01*
X74824014Y-92540190D01*
X74919252Y-92464000D01*
X75014490Y-92425904D01*
X75728776Y-92425904D02*
X76300204Y-92425904D01*
X76014490Y-93225904D02*
X76014490Y-92425904D01*
X76824014Y-92425904D02*
X76919252Y-92425904D01*
X77014490Y-92464000D01*
X77062109Y-92502095D01*
X77109728Y-92578285D01*
X77157347Y-92730666D01*
X77157347Y-92921142D01*
X77109728Y-93073523D01*
X77062109Y-93149714D01*
X77014490Y-93187809D01*
X76919252Y-93225904D01*
X76824014Y-93225904D01*
X76728776Y-93187809D01*
X76681157Y-93149714D01*
X76633538Y-93073523D01*
X76585919Y-92921142D01*
X76585919Y-92730666D01*
X76633538Y-92578285D01*
X76681157Y-92502095D01*
X76728776Y-92464000D01*
X76824014Y-92425904D01*
X72776395Y-94513904D02*
X72776395Y-93713904D01*
X73347823Y-94513904D01*
X73347823Y-93713904D01*
X74395442Y-94513904D02*
X74062109Y-94132952D01*
X73824014Y-94513904D02*
X73824014Y-93713904D01*
X74204966Y-93713904D01*
X74300204Y-93752000D01*
X74347823Y-93790095D01*
X74395442Y-93866285D01*
X74395442Y-93980571D01*
X74347823Y-94056761D01*
X74300204Y-94094857D01*
X74204966Y-94132952D01*
X73824014Y-94132952D01*
X74776395Y-94475809D02*
X74919252Y-94513904D01*
X75157347Y-94513904D01*
X75252585Y-94475809D01*
X75300204Y-94437714D01*
X75347823Y-94361523D01*
X75347823Y-94285333D01*
X75300204Y-94209142D01*
X75252585Y-94171047D01*
X75157347Y-94132952D01*
X74966871Y-94094857D01*
X74871633Y-94056761D01*
X74824014Y-94018666D01*
X74776395Y-93942476D01*
X74776395Y-93866285D01*
X74824014Y-93790095D01*
X74871633Y-93752000D01*
X74966871Y-93713904D01*
X75204966Y-93713904D01*
X75347823Y-93752000D01*
X75633538Y-93713904D02*
X76204966Y-93713904D01*
X75919252Y-94513904D02*
X75919252Y-93713904D01*
D10*
X127959219Y-92224361D02*
X129197314Y-92224361D01*
X128530647Y-92986266D01*
X128816361Y-92986266D01*
X129006838Y-93081504D01*
X129102076Y-93176742D01*
X129197314Y-93367219D01*
X129197314Y-93843409D01*
X129102076Y-94033885D01*
X129006838Y-94129123D01*
X128816361Y-94224361D01*
X128244933Y-94224361D01*
X128054457Y-94129123D01*
X127959219Y-94033885D01*
X130054457Y-94033885D02*
X130149695Y-94129123D01*
X130054457Y-94224361D01*
X129959219Y-94129123D01*
X130054457Y-94033885D01*
X130054457Y-94224361D01*
X130816361Y-92224361D02*
X132054457Y-92224361D01*
X131387790Y-92986266D01*
X131673504Y-92986266D01*
X131863980Y-93081504D01*
X131959219Y-93176742D01*
X132054457Y-93367219D01*
X132054457Y-93843409D01*
X131959219Y-94033885D01*
X131863980Y-94129123D01*
X131673504Y-94224361D01*
X131102076Y-94224361D01*
X130911600Y-94129123D01*
X130816361Y-94033885D01*
X132625885Y-92224361D02*
X133292552Y-94224361D01*
X133959219Y-92224361D01*
X128073209Y-74576952D02*
X126882733Y-74576952D01*
X126763685Y-75767428D01*
X126882733Y-75648380D01*
X127120828Y-75529333D01*
X127716066Y-75529333D01*
X127954161Y-75648380D01*
X128073209Y-75767428D01*
X128192257Y-76005523D01*
X128192257Y-76600761D01*
X128073209Y-76838857D01*
X127954161Y-76957904D01*
X127716066Y-77076952D01*
X127120828Y-77076952D01*
X126882733Y-76957904D01*
X126763685Y-76838857D01*
X128906542Y-74576952D02*
X129739876Y-77076952D01*
X130573209Y-74576952D01*
X137347485Y-92116400D02*
X137157009Y-92021161D01*
X136871295Y-92021161D01*
X136585580Y-92116400D01*
X136395104Y-92306876D01*
X136299866Y-92497352D01*
X136204628Y-92878304D01*
X136204628Y-93164019D01*
X136299866Y-93544971D01*
X136395104Y-93735447D01*
X136585580Y-93925923D01*
X136871295Y-94021161D01*
X137061771Y-94021161D01*
X137347485Y-93925923D01*
X137442723Y-93830685D01*
X137442723Y-93164019D01*
X137061771Y-93164019D01*
X138299866Y-92687828D02*
X138299866Y-94021161D01*
X138299866Y-92878304D02*
X138395104Y-92783066D01*
X138585580Y-92687828D01*
X138871295Y-92687828D01*
X139061771Y-92783066D01*
X139157009Y-92973542D01*
X139157009Y-94021161D01*
X140966533Y-94021161D02*
X140966533Y-92021161D01*
X140966533Y-93925923D02*
X140776057Y-94021161D01*
X140395104Y-94021161D01*
X140204628Y-93925923D01*
X140109390Y-93830685D01*
X140014152Y-93640209D01*
X140014152Y-93068780D01*
X140109390Y-92878304D01*
X140204628Y-92783066D01*
X140395104Y-92687828D01*
X140776057Y-92687828D01*
X140966533Y-92783066D01*
D11*
%TO.C,U5*%
X113508895Y-59451580D02*
X113508895Y-60261104D01*
X113556514Y-60356342D01*
X113604133Y-60403961D01*
X113699371Y-60451580D01*
X113889847Y-60451580D01*
X113985085Y-60403961D01*
X114032704Y-60356342D01*
X114080323Y-60261104D01*
X114080323Y-59451580D01*
X115032704Y-59451580D02*
X114556514Y-59451580D01*
X114508895Y-59927771D01*
X114556514Y-59880152D01*
X114651752Y-59832533D01*
X114889847Y-59832533D01*
X114985085Y-59880152D01*
X115032704Y-59927771D01*
X115080323Y-60023009D01*
X115080323Y-60261104D01*
X115032704Y-60356342D01*
X114985085Y-60403961D01*
X114889847Y-60451580D01*
X114651752Y-60451580D01*
X114556514Y-60403961D01*
X114508895Y-60356342D01*
%TO.C,R12*%
X80048380Y-82327357D02*
X79572190Y-82660690D01*
X80048380Y-82898785D02*
X79048380Y-82898785D01*
X79048380Y-82517833D01*
X79096000Y-82422595D01*
X79143619Y-82374976D01*
X79238857Y-82327357D01*
X79381714Y-82327357D01*
X79476952Y-82374976D01*
X79524571Y-82422595D01*
X79572190Y-82517833D01*
X79572190Y-82898785D01*
X80048380Y-81374976D02*
X80048380Y-81946404D01*
X80048380Y-81660690D02*
X79048380Y-81660690D01*
X79191238Y-81755928D01*
X79286476Y-81851166D01*
X79334095Y-81946404D01*
X79143619Y-80994023D02*
X79096000Y-80946404D01*
X79048380Y-80851166D01*
X79048380Y-80613071D01*
X79096000Y-80517833D01*
X79143619Y-80470214D01*
X79238857Y-80422595D01*
X79334095Y-80422595D01*
X79476952Y-80470214D01*
X80048380Y-81041642D01*
X80048380Y-80422595D01*
%TO.C,J6*%
X104389180Y-63090228D02*
X103389180Y-63090228D01*
@ -796,6 +800,33 @@ X103389180Y-60518800D01*
X103436800Y-60375942D01*
X104389180Y-59947371D02*
X103389180Y-59947371D01*
%TO.C,U5*%
X113508895Y-59451580D02*
X113508895Y-60261104D01*
X113556514Y-60356342D01*
X113604133Y-60403961D01*
X113699371Y-60451580D01*
X113889847Y-60451580D01*
X113985085Y-60403961D01*
X114032704Y-60356342D01*
X114080323Y-60261104D01*
X114080323Y-59451580D01*
X115032704Y-59451580D02*
X114556514Y-59451580D01*
X114508895Y-59927771D01*
X114556514Y-59880152D01*
X114651752Y-59832533D01*
X114889847Y-59832533D01*
X114985085Y-59880152D01*
X115032704Y-59927771D01*
X115080323Y-60023009D01*
X115080323Y-60261104D01*
X115032704Y-60356342D01*
X114985085Y-60403961D01*
X114889847Y-60451580D01*
X114651752Y-60451580D01*
X114556514Y-60403961D01*
X114508895Y-60356342D01*
%TO.C,J3*%
X112466380Y-63442742D02*
X112466380Y-63918933D01*
@ -1267,11 +1298,16 @@ X79879461Y-91931838D01*
X79784223Y-92027076D01*
X79688985Y-92074695D01*
D12*
%TO.C,R12*%
X80503500Y-81939224D02*
X80503500Y-81429776D01*
X81548500Y-81939224D02*
X81548500Y-81429776D01*
%TO.C,U5*%
X113370800Y-58709200D02*
X115820800Y-58709200D01*
X115170800Y-55489200D02*
X113370800Y-55489200D01*
X113370800Y-58709200D02*
X115820800Y-58709200D01*
%TO.C,D1*%
X78283200Y-84906700D02*
X78283200Y-85706700D01*

View File

@ -1,5 +1,5 @@
Drill report for Canon_manage.kicad_pcb
Created on Вт 14 мар 2023 09:48:43
Created on Вт 14 мар 2023 16:41:33
Copper Layer Stackup:
=============================================================

View File

@ -1,12 +1,12 @@
%TF.GenerationSoftware,KiCad,Pcbnew,6.0.10*%
%TF.CreationDate,2023-03-14T09:48:38+03:00*%
%TF.CreationDate,2023-03-14T16:41:31+03:00*%
%TF.ProjectId,Canon_manage,43616e6f-6e5f-46d6-916e-6167652e6b69,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Drillmap*%
%TF.FilePolarity,Positive*%
%FSLAX45Y45*%
G04 Gerber Fmt 4.5, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 6.0.10) date 2023-03-14 09:48:38*
G04 Created by KiCad (PCBNEW 6.0.10) date 2023-03-14 16:41:31*
%MOMM*%
%LPD*%
G01*

View File

@ -5,7 +5,7 @@
"Application": "Pcbnew",
"Version": "6.0.10"
},
"CreationDate": "2023-03-14T09:48:46+03:00"
"CreationDate": "2023-03-14T16:41:35+03:00"
},
"GeneralSpecs": {
"ProjectId": {

View File

@ -1,7 +1,7 @@
M48
; DRILL file {KiCad 6.0.10} date Вт 14 мар 2023 09:48:43
; DRILL file {KiCad 6.0.10} date Вт 14 мар 2023 16:41:34
; FORMAT={-:-/ absolute / metric / decimal}
; #@! TF.CreationDate,2023-03-14T09:48:43+03:00
; #@! TF.CreationDate,2023-03-14T16:41:34+03:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,6.0.10
; #@! TF.FileFunction,MixedPlating,1,2
FMAT,2

View File

@ -16,7 +16,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "can.h"
#include "canon.h"
#include "flash.h"
#include "hardware.h"
#include "proto.h"
#include "spi.h"
@ -54,24 +56,22 @@ int main(void){
sysreset();
StartHSE();
SysTick_Config(72000);
flashstorage_init();
hw_setup();
USB_setup();
if(ISUSB()) USB_setup();
else CAN_setup(the_conf.canspeed, the_conf.canID);
spi_setup();
canon_init();
uint32_t ctr = Tms, SPIctr = Tms;
uint32_t SPIctr = Tms;
while(1){
if(Tms - ctr > 499){
ctr = Tms;
LED_blink(LED0);
}
IWDG->KR = IWDG_REFRESH;
char *txt = NULL;
usb_proc();
if((txt = get_USB())){
const char *ans = parse_cmd(txt);
if(ans) USB_send(ans);
}
if(Tms != SPIctr){ // not more than once per 1ms
if(Tms - SPIctr > 10){ // not more than once per 10ms
SPIctr = Tms;
canon_proc();
}

View File

@ -0,0 +1,6 @@
# STM32F103C8 "Blue Pill"
set FLASH_SIZE 0x20000
source [find interface/stlink-v2-1.cfg]
source [find target/stm32f1x.cfg]

View File

@ -17,12 +17,15 @@
*/
#include "canon.h"
#include "flash.h"
#include "hardware.h"
#include "proto.h"
#include "spi.h"
#include "usb.h"
#include "version.inc"
static const char *OK = "OK", *FAIL = "FAIL";
char *omit_spaces(const char *buf){
while(*buf){
if(*buf > ' ') break;
@ -154,22 +157,29 @@ char *getnum(const char *txt, uint32_t *N){
}
const char* helpmsg =
"https://github.com/eddyem/stm32samples/tree/master/F1-nolib/USB_Canon_management build#" BUILD_NUMBER " @ " BUILD_DATE "\n"
"https://github.com/eddyem/stm32samples/tree/master/F1-nolib/Canon_managing_device build#" BUILD_NUMBER " @ " BUILD_DATE "\n"
"0 - move to smallest foc value (e.g. 2.5m)\n"
"1 - move to largest foc value (e.g. infinity)\n"
"a - set (!0) or reset (0) autoinit\n"
"d - open/close diaphragm by 1 step (+/-), open/close fully (o/c) (no way to know it current status)\n"
"f - get focus state or move it to given relative position\n"
"f - move focus to given ABSOLUTE position or get current value (without number)\n"
"h - turn on hand focus management\n"
"i - get lens information\n"
"l - get lens model\n"
"r - get regulators' state\n"
"\t\tdebugging commands:\n"
"\t\tdebugging/conf commands:\n"
"C - set CAN speed (25-3000 kbaud)\n"
"D - set CAN ID (11 bit)\n"
"E - erase full flash storage\n"
"F - change SPI flags (F f val), f== l-LSBFIRST, b-BR [18MHz/2^(b+1)], p-CPOL, h-CPHA\n"
"G - get SPI status\n"
"I - reinit SPI\n"
"P - dump current config\n"
"s - get state\n"
"R - software reset\n"
"S - send data over SPI\n"
"T - show Tms value\n"
"X - save current config to flash\n"
;
#define STBUFSZ 255
@ -190,15 +200,38 @@ static void errw(int e){
add2buf("Error with code ");
add2buf(u2str(e));
if(e == 1) add2buf(" (busy or need initialization)");
}else add2buf("OK");
}else add2buf(OK);
}
extern uint8_t usbON;
const char *connmsgs[LENS_S_AMOUNT+1] = {
[LENS_DISCONNECTED] = "disconnected",
[LENS_SLEEPING] = "sleeping, need init",
[LENS_OVERCURRENT] = "overcurrent",
[LENS_INITIALIZED] = "initialized",
[LENS_READY] = "ready",
[LENS_ERR] = "error",
[LENS_S_AMOUNT] = "wrong state"
};
const char *inimsgs[INI_S_AMOUNT+1] = {
[INI_START] = "started",
[INI_FGOTOZ] = "go to min F",
[INI_FPREPMAX] = "prepare to go to max F",
[INI_FGOTOMAX] = "go to max F",
[INI_FPREPOLD] = "prepare to return to original F",
[INI_FGOTOOLD] = "go to starting F",
[INI_READY] = "ready",
[INI_ERR] = "error in init procedure",
[INI_S_AMOUNT] = "wrong state"
};
const char *parse_cmd(const char *buf){
//uint32_t u3;
initbuf();
if(buf[1] == '\n' || !buf[1]){ // one symbol commands
switch(*buf){
case '-':
flashstorage_init();
break;
case '0':
errw(canon_sendcmd(CANON_FMIN));
break;
@ -206,7 +239,7 @@ const char *parse_cmd(const char *buf){
errw(canon_sendcmd(CANON_FMAX));
break;
case 'f':
errw(canon_focus(0));
errw(canon_focus(-1));
break;
case 'i':
errw(canon_getinfo());
@ -217,6 +250,10 @@ const char *parse_cmd(const char *buf){
case 'r':
errw(canon_asku16(CANON_GETREG));
break;
case 'E':
if(erase_storage(-1)) add2buf(FAIL);
add2buf(OK);
break;
case 'F': // just watch SPI->CR1 value
add2buf("SPI1->CR1="); add2buf(u2hexstr(SPI_CR1));
break;
@ -244,14 +281,33 @@ const char *parse_cmd(const char *buf){
spi_setup();
canon_init();
break;
case 'P':
dump_userconf();
return NULL;
break;
case 'R':
USB_send("Soft reset\n");
NVIC_SystemReset();
break;
case 's':
add2buf("state=");
uint16_t s = canon_getstate();
uint8_t idx = s & 0xff;
if(idx > LENS_S_AMOUNT) idx = LENS_S_AMOUNT;
add2buf(connmsgs[idx]);
idx = s >> 8;
add2buf("\ninistate=");
if(idx > INI_S_AMOUNT) idx = INI_S_AMOUNT;
add2buf(inimsgs[idx]);
break;
case 'T':
add2buf("Tms=");
add2buf(u2str(Tms));
break;
case 'X':
if(store_userconf()) add2buf(FAIL);
else add2buf(OK);
break;
default:
return helpmsg;
}
@ -260,22 +316,44 @@ const char *parse_cmd(const char *buf){
}
uint32_t D = 0, N = 0;
char *nxt;
switch(*buf){ // long messages
switch(*buf++){ // long messages
case 'a':
nxt = getnum(buf, &D);
if(nxt != buf){
if(D) the_conf.autoinit = 1;
else the_conf.autoinit = 0;
}
USB_send("autoinit="); USB_send(u2str(the_conf.autoinit)); USB_send("\n");
break;
case 'd':
nxt = omit_spaces(buf+1);
nxt = omit_spaces(buf);
errw(canon_diaphragm(*nxt));
break;
case 'f': // move focus
buf = omit_spaces(buf + 1);
buf = omit_spaces(buf);
int16_t neg = 1;
if(*buf == '-'){ ++buf; neg = -1; }
nxt = getnum(buf, &D);
if(nxt == buf) add2buf("Need number");
else if(D > 0x7fff) add2buf("From -0x7fff to 0x7fff");
else errw(canon_focus(neg * (int32_t)D));
else errw(canon_focus(neg * (int16_t)D));
break;
case 'C':
nxt = getnum(buf, &D);
if(nxt != buf && D >= 25 && D <= 3000){
the_conf.canspeed = D;
add2buf("CAN_speed="); add2buf(u2str(the_conf.canspeed));
}else add2buf(FAIL);
break;
case 'D':
nxt = getnum(buf, &D);
if(nxt != buf && D < 0x800){
the_conf.canID = D;
add2buf("CAN_ID="); add2buf(u2str(the_conf.canID));
}else add2buf(FAIL);
break;
case 'F': // SPI flags
nxt = omit_spaces(buf+1);
nxt = omit_spaces(buf);
char c = *nxt;
if(*nxt && *nxt != '\n'){
buf = nxt + 1;
@ -305,7 +383,6 @@ const char *parse_cmd(const char *buf){
add2buf("SPI_CR1="); add2buf(u2hexstr(SPI_CR1));
break;
case 'S': // use stbuf here to store user data
++buf;
do{
nxt = getnum(buf, &D);
if(buf == nxt) break;
@ -327,9 +404,14 @@ const char *parse_cmd(const char *buf){
USB_send(u2hexstr(stbuf[i]));
}
USB_send("\n... ");
canon_setlastcmd(stbuf[0]);
if(N == SPI_transmit((uint8_t*)stbuf, (uint8_t)N)) USB_send("OK\n");
else USB_send("Failed\n");
if(N == SPI_transmit((uint8_t*)stbuf, (uint8_t)N)){
USB_send("OK\nGot SPI answer: ");
for(int i = 0; i < (int)N; ++i){
if(i) USB_send(", ");
USB_send(u2hexstr(stbuf[i]));
}
USB_send("\n");
}else USB_send("Failed\n");
return NULL;
break;
default:

View File

@ -22,6 +22,15 @@
#include <stm32f1.h>
#define printu(x) do{USB_send(u2str(x));}while(0)
#define printuhex(x) do{USB_send(uhex2str(x));}while(0)
#ifdef EBUG
#define DBG(x) do{USB_send(x); USB_send("\n");}while(0)
#else
#define DBG(x)
#endif
const char *parse_cmd(const char *buf);
char *omit_spaces(const char *buf);
char *getnum(const char *buf, uint32_t *N);

View File

@ -34,7 +34,6 @@ static void mymemcpy(uint8_t *dest, uint8_t *src, int len){
uint32_t SPI_CR1 = SPI_CR1_MSTR | SPI_CR1_BR | SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_CPHA | SPI_CR1_CPOL;
spiStatus SPI_status = SPI_NOTREADY;
static uint8_t inbuff[SPIBUFSZ], lastlen = 0;
void spi_setup(){
RCC->APB2ENR |= SPI_APB2; // Enable the peripheral clock SPI1
@ -44,37 +43,40 @@ void spi_setup(){
SPIx->CR1 |= SPI_CR1_SPE; // enable SPI
}
volatile uint32_t wctr;
#define WAITX(x) do{wctr = 0; while((x) && (++wctr < 360000)) IWDG->KR = IWDG_REFRESH; if(wctr==360000) return -1;}while(0)
/**
* @brief SPI_transmit - transmit data over SPI DMA
* @param buf - data to transmit
* @param len - its length
* @return amount of transmitted data
* @return amount of transmitted data or -1 if error
*/
uint8_t SPI_transmit(const uint8_t *buf, uint8_t len){
uint8_t SPI_transmit(uint8_t *buf, uint8_t len){
if(!buf || !len) return 0; // bad data format
if(SPI_status != SPI_READY) return 0; // spi not ready to transmit data
#ifdef EBUG
USB_send("SPI send "); USB_send(u2str(len));
USB_send("bytes, data: ");
#endif
for(uint8_t x = 0; x < len; ++x){
while(!(SPI1->SR & SPI_SR_TXE));
WAITX(!(SPI1->SR & SPI_SR_TXE));
SPI1->DR = buf[x];
while(!(SPI1->SR & SPI_SR_BSY));
while(!(SPI1->SR & SPI_SR_RXNE));
inbuff[x] = SPI1->DR;
for(int ctr = 0; ctr < 3600; ++ctr) nop(); // ~100mks delay
WAITX(!(SPI1->SR & SPI_SR_BSY));
#ifdef EBUG
USB_send(u2hexstr(buf[x])); USB_send(", ");
#endif
WAITX(!(SPI1->SR & SPI_SR_RXNE));
buf[x] = SPI1->DR;
for(int ctr = 0; ctr < 3600; ++ctr) IWDG->KR = IWDG_REFRESH; // ~100mks delay
}
lastlen = len;
#ifdef EBUG
USB_send("\nReceive: ");
for(int i = 0; i < len; ++i){
USB_send(u2hexstr(buf[i])); USB_send(", ");
}
USB_send("\n");
#endif
return len;
}
/**
* @brief SPI_receive - get received data
* @param len (o) - received length
* @return received buffer
*/
uint8_t *SPI_receive(uint8_t *len){
if(SPI_status != SPI_READY) return NULL;
if(lastlen == 0) return NULL;
if(len) *len = lastlen;
lastlen = 0;
return inbuff;
}

View File

@ -20,7 +20,7 @@
#ifndef SPI_H__
#define SPI_H__
#include "stm32f1.h"
#include <stm32f1.h>
extern uint32_t SPI_CR1;
@ -33,7 +33,6 @@ typedef enum{
extern spiStatus SPI_status;
void spi_setup();
uint8_t SPI_transmit(const uint8_t *buf, uint8_t len);
uint8_t *SPI_receive(uint8_t *len);
uint8_t SPI_transmit(uint8_t *buf, uint8_t len);
#endif // SPI_H__

View File

@ -79,6 +79,9 @@ static void receive_Handler(){ // EP2OUT
}
void usb_proc(){
if(CAN1->RF0R & CAN_RF0R_FOVR0){ // FIFO overrun
CAN1->RF0R &= ~CAN_RF0R_FOVR0;
}
switch(USB_Dev.USB_Status){
case USB_STATE_CONFIGURED:
// make new BULK endpoint

View File

@ -1,2 +1,2 @@
#define BUILD_NUMBER "50"
#define BUILD_DATE "2022-09-10"
#define BUILD_NUMBER "93"
#define BUILD_DATE "2023-03-15"

View File

@ -1,7 +1,7 @@
{
"board": {
"active_layer": 40,
"active_layer_preset": "",
"active_layer_preset": "All Layers",
"auto_track_width": false,
"hidden_nets": [],
"high_contrast_mode": 0,
@ -62,7 +62,7 @@
35,
36
],
"visible_layers": "ffbfeff_ffffffff",
"visible_layers": "fffffff_ffffffff",
"zone_display_mode": 1
},
"meta": {