From 681f3253d7ad6e3d45dfc62b29e1df2ec27d8549 Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Wed, 15 Mar 2023 17:50:49 +0300 Subject: [PATCH] fixed schematics @ canon managing, add initialization for absolute positioning, TODO: add CAN bus management --- F1:F103/Canon_managing_device/Makefile | 4 +- .../{Readme => Readme.md} | 16 +- F1:F103/Canon_managing_device/can.c | 229 +++++ F1:F103/Canon_managing_device/can.h | 53 ++ F1:F103/Canon_managing_device/canon.c | 347 +++++-- F1:F103/Canon_managing_device/canon.h | 42 +- .../Canon_managing_device/canonmanage.files | 4 + F1:F103/Canon_managing_device/canonusb.bin | Bin 7996 -> 13252 bytes F1:F103/Canon_managing_device/flash.c | 220 +++++ F1:F103/Canon_managing_device/flash.h | 41 + F1:F103/Canon_managing_device/hardware.c | 38 +- F1:F103/Canon_managing_device/hardware.h | 53 +- .../kicad/Canon_manage/Canon_manage.kicad_pcb | 618 ++++++------ .../kicad/Canon_manage/Canon_manage.kicad_prl | 4 +- .../kicad/Canon_manage/Canon_manage.kicad_sch | 50 +- .../gerbers/Canon_manage-B_Cu.gbr | 510 +++++----- .../gerbers/Canon_manage-B_Mask.gbr | 32 +- .../gerbers/Canon_manage-B_Paste.gbr | 4 +- .../gerbers/Canon_manage-B_Silkscreen.gbr | 4 +- .../gerbers/Canon_manage-Edge_Cuts.gbr | 4 +- .../gerbers/Canon_manage-F_Cu.gbr | 805 +++++++--------- .../gerbers/Canon_manage-F_Mask.gbr | 72 +- .../gerbers/Canon_manage-F_Paste.gbr | 25 +- .../gerbers/Canon_manage-F_Silkscreen.gbr | 880 +++++++++--------- .../Canon_manage/gerbers/Canon_manage-drl.rpt | 2 +- .../gerbers/Canon_manage-drl_map.gbr | 4 +- .../gerbers/Canon_manage-job.gbrjob | 2 +- .../Canon_manage/gerbers/Canon_manage.drl | 4 +- F1:F103/Canon_managing_device/main.c | 16 +- F1:F103/Canon_managing_device/openocd.cfg | 6 + F1:F103/Canon_managing_device/proto.c | 110 ++- F1:F103/Canon_managing_device/proto.h | 9 + F1:F103/Canon_managing_device/spi.c | 46 +- F1:F103/Canon_managing_device/spi.h | 5 +- F1:F103/Canon_managing_device/usb.c | 3 + F1:F103/Canon_managing_device/version.inc | 4 +- .../kicad/nitrogen/nitrogen.kicad_prl | 4 +- 37 files changed, 2535 insertions(+), 1735 deletions(-) rename F1:F103/Canon_managing_device/{Readme => Readme.md} (69%) create mode 100644 F1:F103/Canon_managing_device/can.c create mode 100644 F1:F103/Canon_managing_device/can.h create mode 100644 F1:F103/Canon_managing_device/flash.c create mode 100644 F1:F103/Canon_managing_device/flash.h create mode 100644 F1:F103/Canon_managing_device/openocd.cfg diff --git a/F1:F103/Canon_managing_device/Makefile b/F1:F103/Canon_managing_device/Makefile index f225445..5b8d6f5 100644 --- a/F1:F103/Canon_managing_device/Makefile +++ b/F1:F103/Canon_managing_device/Makefile @@ -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 diff --git a/F1:F103/Canon_managing_device/Readme b/F1:F103/Canon_managing_device/Readme.md similarity index 69% rename from F1:F103/Canon_managing_device/Readme rename to F1:F103/Canon_managing_device/Readme.md index 77f80bf..e6dfea7 100644 --- a/F1:F103/Canon_managing_device/Readme +++ b/F1:F103/Canon_managing_device/Readme.md @@ -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) diff --git a/F1:F103/Canon_managing_device/can.c b/F1:F103/Canon_managing_device/can.c new file mode 100644 index 0000000..43efda7 --- /dev/null +++ b/F1:F103/Canon_managing_device/can.c @@ -0,0 +1,229 @@ +/* + * This file is part of the canonmanage project. + * Copyright 2023 Edward V. Emelianov . + * + * 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 . + */ + +#include "can.h" +#include + +// REMAPPED to PB8/PB9!!! + +#include // 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; + } +} diff --git a/F1:F103/Canon_managing_device/can.h b/F1:F103/Canon_managing_device/can.h new file mode 100644 index 0000000..6b7b8e7 --- /dev/null +++ b/F1:F103/Canon_managing_device/can.h @@ -0,0 +1,53 @@ +/* + * This file is part of the canonmanage project. + * Copyright 2023 Edward V. Emelianov . + * + * 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 . + */ + +#pragma once + +#include + +// 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(); diff --git a/F1:F103/Canon_managing_device/canon.c b/F1:F103/Canon_managing_device/canon.c index 5a789b7..32c1871 100644 --- a/F1:F103/Canon_managing_device/canon.c +++ b/F1:F103/Canon_managing_device/canon.c @@ -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); -} - -// send over USB 16-bit unsigned -static void printu16(uint8_t *b){ - USB_send(u2str((b[1] << 8) | b[2])); + 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; + } } /** * @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 F_ERR: + ++errctr; + break; + default: // moving + return; + } break; - case CANON_GETMODEL: - USB_send("Lens="); printu16(rbuf); USB_send("\n"); + case INI_FPREPMAX: + DBG("INI_FPREPMAX"); + if(canon_sendcmd(CANON_FMAX)){ + ++errctr; + return; + } + inistate = INI_FGOTOMAX; + errctr = 0; + Tconn = Tms; break; - case CANON_GETDIAL: - USB_send("Fsteps="); printu16(rbuf); USB_send("\n"); - //canon_read(CANON_GETFOCM, 4); + 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); +} diff --git a/F1:F103/Canon_managing_device/canon.h b/F1:F103/Canon_managing_device/canon.h index c889cfd..34ab8de 100644 --- a/F1:F103/Canon_managing_device/canon.h +++ b/F1:F103/Canon_managing_device/canon.h @@ -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(); diff --git a/F1:F103/Canon_managing_device/canonmanage.files b/F1:F103/Canon_managing_device/canonmanage.files index 51b91de..be314c9 100644 --- a/F1:F103/Canon_managing_device/canonmanage.files +++ b/F1:F103/Canon_managing_device/canonmanage.files @@ -1,5 +1,9 @@ +can.c +can.h canon.c canon.h +flash.c +flash.h hardware.c hardware.h main.c diff --git a/F1:F103/Canon_managing_device/canonusb.bin b/F1:F103/Canon_managing_device/canonusb.bin index e52fd1971d73927cda19d08f7ba03e316f7f9544..4dd4a16e6941d60aac40c2b71c16a0f3373eab7d 100755 GIT binary patch literal 13252 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 + * + * 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 // 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"); +} diff --git a/F1:F103/Canon_managing_device/flash.h b/F1:F103/Canon_managing_device/flash.h new file mode 100644 index 0000000..d6c30cb --- /dev/null +++ b/F1:F103/Canon_managing_device/flash.h @@ -0,0 +1,41 @@ +/* + * This file is part of the canonmanage project. + * Copyright 2023 Edward V. Emelianov . + * + * 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 . + */ + +#pragma once + +#include + +#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(); diff --git a/F1:F103/Canon_managing_device/hardware.c b/F1:F103/Canon_managing_device/hardware.c index bc1a229..cbc7af5 100644 --- a/F1:F103/Canon_managing_device/hardware.c +++ b/F1:F103/Canon_managing_device/hardware.c @@ -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 } diff --git a/F1:F103/Canon_managing_device/hardware.h b/F1:F103/Canon_managing_device/hardware.h index e1dbdaf..a306f52 100644 --- a/F1:F103/Canon_managing_device/hardware.h +++ b/F1:F103/Canon_managing_device/hardware.h @@ -1,6 +1,6 @@ /* * This file is part of the canonmanage project. - * Copyright 2022 Edward V. Emelianov . + * Copyright 2023 Edward V. Emelianov . * * 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 -// 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__ diff --git a/F1:F103/Canon_managing_device/kicad/Canon_manage/Canon_manage.kicad_pcb b/F1:F103/Canon_managing_device/kicad/Canon_manage/Canon_manage.kicad_pcb index 5d20d78..d6bbe64 100644 --- a/F1:F103/Canon_managing_device/kicad/Canon_manage/Canon_manage.kicad_pcb +++ b/F1:F103/Canon_managing_device/kicad/Canon_manage/Canon_manage.kicad_pcb @@ -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) diff --git a/F1:F103/Canon_managing_device/kicad/Canon_manage/Canon_manage.kicad_prl b/F1:F103/Canon_managing_device/kicad/Canon_manage/Canon_manage.kicad_prl index 28f6ae2..c137293 100644 --- a/F1:F103/Canon_managing_device/kicad/Canon_manage/Canon_manage.kicad_prl +++ b/F1:F103/Canon_managing_device/kicad/Canon_manage/Canon_manage.kicad_prl @@ -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", diff --git a/F1:F103/Canon_managing_device/kicad/Canon_manage/Canon_manage.kicad_sch b/F1:F103/Canon_managing_device/kicad/Canon_manage/Canon_manage.kicad_sch index 4972cb7..f6652dd 100644 --- a/F1:F103/Canon_managing_device/kicad/Canon_manage/Canon_manage.kicad_sch +++ b/F1:F103/Canon_managing_device/kicad/Canon_manage/Canon_manage.kicad_sch @@ -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") ) diff --git a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-B_Cu.gbr b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-B_Cu.gbr index 82f0032..05f2607 100644 --- a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-B_Cu.gbr +++ b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-B_Cu.gbr @@ -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*% diff --git a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-B_Mask.gbr b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-B_Mask.gbr index 73de5ca..133907c 100644 --- a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-B_Mask.gbr +++ b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-B_Mask.gbr @@ -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*% diff --git a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-B_Paste.gbr b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-B_Paste.gbr index a480040..68e6c3d 100644 --- a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-B_Paste.gbr +++ b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-B_Paste.gbr @@ -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* diff --git a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-B_Silkscreen.gbr b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-B_Silkscreen.gbr index 6b1abd9..5360345 100644 --- a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-B_Silkscreen.gbr +++ b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-B_Silkscreen.gbr @@ -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* diff --git a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-Edge_Cuts.gbr b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-Edge_Cuts.gbr index 8f1d4ee..dd2be93 100644 --- a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-Edge_Cuts.gbr +++ b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-Edge_Cuts.gbr @@ -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* diff --git a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-F_Cu.gbr b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-F_Cu.gbr index 56a1e3a..1cbd7cf 100644 --- a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-F_Cu.gbr +++ b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-F_Cu.gbr @@ -1,12 +1,12 @@ %TF.GenerationSoftware,KiCad,Pcbnew,6.0.10*% -%TF.CreationDate,2023-03-14T09:48:45+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,L1,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:45* +G04 Created by KiCad (PCBNEW 6.0.10) date 2023-03-14 16:41:35* %MOMM*% %LPD*% G01* @@ -30,19 +30,19 @@ G04 Aperture macros list* 20,1,$1+$1,$8,$9,$2,$3,0*% G04 Aperture macros list end* %TA.AperFunction,SMDPad,CuDef*% -%ADD10R,1.560000X0.650000*% +%ADD10RoundRect,0.237500X0.237500X-0.250000X0.237500X0.250000X-0.237500X0.250000X-0.237500X-0.250000X0*% %TD*% %TA.AperFunction,ComponentPad*% %ADD11C,2.000000*% %TD*% %TA.AperFunction,SMDPad,CuDef*% -%ADD12RoundRect,0.150000X-0.150000X0.512500X-0.150000X-0.512500X0.150000X-0.512500X0.150000X0.512500X0*% +%ADD12R,1.560000X0.650000*% %TD*% %TA.AperFunction,SMDPad,CuDef*% -%ADD13RoundRect,0.150000X0.150000X-0.825000X0.150000X0.825000X-0.150000X0.825000X-0.150000X-0.825000X0*% +%ADD13RoundRect,0.150000X-0.150000X0.512500X-0.150000X-0.512500X0.150000X-0.512500X0.150000X0.512500X0*% %TD*% %TA.AperFunction,SMDPad,CuDef*% -%ADD14RoundRect,0.237500X0.237500X-0.250000X0.237500X0.250000X-0.237500X0.250000X-0.237500X-0.250000X0*% +%ADD14RoundRect,0.150000X0.150000X-0.825000X0.150000X0.825000X-0.150000X0.825000X-0.150000X-0.825000X0*% %TD*% %TA.AperFunction,SMDPad,CuDef*% %ADD15R,0.600000X1.450000*% @@ -69,19 +69,19 @@ G04 Aperture macros list end* %ADD22RoundRect,0.237500X0.250000X0.237500X-0.250000X0.237500X-0.250000X-0.237500X0.250000X-0.237500X0*% %TD*% %TA.AperFunction,ViaPad*% -%ADD23C,0.800000*% +%ADD23C,1.200000*% %TD*% %TA.AperFunction,ViaPad*% -%ADD24C,1.200000*% +%ADD24C,0.700000*% %TD*% %TA.AperFunction,ViaPad*% -%ADD25C,0.700000*% +%ADD25C,0.800000*% %TD*% %TA.AperFunction,Conductor*% -%ADD26C,0.200000*% +%ADD26C,0.250000*% %TD*% %TA.AperFunction,Conductor*% -%ADD27C,0.250000*% +%ADD27C,0.200000*% %TD*% %TA.AperFunction,Conductor*% %ADD28C,0.500000*% @@ -91,6 +91,19 @@ G04 Aperture macros list end* %TD*% G04 APERTURE END LIST* D10* +%TO.P,R12,1*% +%TO.N,+3V3*% +X81026000Y-82597000D03* +%TO.P,R12,2*% +%TO.N,/SPI_MISO*% +X81026000Y-80772000D03* +%TD*% +D11* +%TO.P,J6,1,Pin_1*% +%TO.N,Net-(J6-Pad1)*% +X103980000Y-64570000D03* +%TD*% +D12* %TO.P,U5,1,OUT*% %TO.N,/Vlens*% X115620800Y-58049200D03* @@ -108,10 +121,6 @@ X112920800Y-56149200D03* X112920800Y-58049200D03* %TD*% D11* -%TO.P,J6,1,Pin_1*% -%TO.N,Net-(J6-Pad1)*% -X103980000Y-64570000D03* -%TD*% %TO.P,J3,1,Pin_1*% %TO.N,Net-(J3-Pad1)*% X111930000Y-65330000D03* @@ -124,7 +133,7 @@ X109640000Y-64820000D03* %TO.N,Net-(J8-Pad1)*% X99500000Y-65500000D03* %TD*% -D12* +D13* %TO.P,D1,1,K*% %TO.N,/SPI_SCK*% X77673200Y-83769200D03* @@ -141,7 +150,7 @@ X75773200Y-86044200D03* %TO.N,/SPI_MISO*% X77673200Y-86044200D03* %TD*% -D13* +D14* %TO.P,U4,1,TXD*% %TO.N,/CANTX*% X92481400Y-60133000D03* @@ -172,7 +181,7 @@ D11* %TO.N,GND*% X97310000Y-66260000D03* %TD*% -D14* +D10* %TO.P,R3,1*% %TO.N,/SPI_MOSI*% X75776666Y-78890500D03* @@ -249,7 +258,7 @@ X114040000Y-66090000D03* %TO.N,Net-(J7-Pad1)*% X101700000Y-64910000D03* %TD*% -D14* +D10* %TO.P,R4,1*% %TO.N,/SPI_MISO*% X77334532Y-78890500D03* @@ -267,7 +276,7 @@ D19* %TO.N,GND*% X138633200Y-89560400D03* %TD*% -D14* +D10* %TO.P,R2,1*% %TO.N,/L_DETECT*% X74218800Y-78890500D03* @@ -329,47 +338,39 @@ D19* X133350000Y-89560400D03* %TD*% D23* -%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* -D24* -X109321600Y-58674000D03* X107619800Y-115290600D03* -D25* -X76708000Y-84342100D03* D24* -X99060000Y-56184800D03* +X76708000Y-84342100D03* D23* +X99060000Y-56184800D03* +D25* +X112826800Y-63500000D03* X72059800Y-81965800D03* X138658600Y-84658200D03* X77343000Y-92938600D03* X82677000Y-80797400D03* X101057965Y-59820647D03* X131227800Y-72135600D03* +X117348000Y-57099200D03* X74904600Y-99949000D03* +D23* +X109321600Y-58674000D03* +D25* +X107035600Y-61417200D03* X72085200Y-79349600D03* -D24* +%TO.N,/VBUS*% +X95021400Y-60133000D03* +D23* %TO.N,+3V3*% X131064000Y-84886800D03* X80162400Y-86842600D03* -D23* +D25* X82677000Y-82522400D03* %TO.N,/L_DETECT*% X74218800Y-78892400D03* X76657200Y-80822800D03* -D25* +D24* %TO.N,/SPI_SCK*% X78587600Y-84429600D03* %TO.N,/SPI_MISO*% @@ -380,7 +381,7 @@ X75773200Y-86044200D03* X80822800Y-84277200D03* %TO.N,/SWDIO*% X80822800Y-85344000D03* -D23* +D25* %TO.N,/BOOT0*% X80445588Y-88464412D03* %TO.N,/NRST*% @@ -396,6 +397,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*% @@ -403,160 +408,88 @@ X102721437Y-53082163D03* X106900000Y-53212500D03* %TO.N,/CANH*% X104343200Y-53238400D03* +%TO.N,/Ven*% +X112928400Y-56134000D03* +%TO.N,/~{OC}*% +X115620800Y-56134000D03* %TD*% D26* -%TO.N,GND*% -X107619800Y-115290600D02* -X86029800Y-115290600D01* -X86029800Y-115290600D02* -X84074000Y-113334800D01* -X81661000Y-109448600D02* -X81661000Y-100203000D01* -X84074000Y-113334800D02* -X84074000Y-111861600D01* -X84074000Y-111861600D02* -X81661000Y-109448600D01* +%TO.N,/SPI_MISO*% +X79349600Y-84886800D02* +X79349600Y-80772000D01* +X79349600Y-80772000D02* +X79349600Y-80264000D01* +X81026000Y-80772000D02* +X79349600Y-80772000D01* +%TO.N,+3V3*% +X82677000Y-82522400D02* +X81100600Y-82522400D01* +X81100600Y-82522400D02* +X81026000Y-82597000D01* D27* -%TO.N,/Ven*% -X112920800Y-56141600D02* -X112928400Y-56134000D01* -X112920800Y-56149200D02* -X112920800Y-56141600D01* -%TO.N,/~{OC}*% -X115620800Y-56149200D02* -X115620800Y-56134000D01* -D28* -%TO.N,GND*% -X108860000Y-55515000D02* -X108860000Y-58212400D01* -X108860000Y-58212400D02* -X109321600Y-58674000D01* -D27* -%TO.N,/CANRX*% -X96291400Y-60133000D02* -X96291400Y-61544200D01* -X96291400Y-61544200D02* -X96164400Y-61671200D01* -%TO.N,/CANTX*% -X92481400Y-60133000D02* -X92481400Y-61899800D01* -X92481400Y-61899800D02* -X93116400Y-62534800D01* -%TO.N,GND*% -X115620800Y-57099200D02* -X117348000Y-57099200D01* -D29* -%TO.N,/VBUS*% -X108060000Y-60342000D02* -X112784400Y-60342000D01* -X112784400Y-60342000D02* -X115714000Y-60342000D01* -X112920800Y-58049200D02* -X112920800Y-60205600D01* -X112920800Y-60205600D02* -X112784400Y-60342000D01* -D28* -%TO.N,/Vlens*% -X115585200Y-58049200D02* -X115570000Y-58064400D01* -X115620800Y-58049200D02* -X115585200Y-58049200D01* -D27* -%TO.N,GND*% -X112826800Y-63500000D02* -X114554000Y-63500000D01* -X114554000Y-63500000D02* -X126492000Y-75438000D01* -X126492000Y-75438000D02* -X126669800Y-75260200D01* -X126669800Y-75260200D02* -X136880600Y-75260200D01* -X138658600Y-77038200D02* -X136880600Y-75260200D01* -X136880600Y-75260200D02* -X133756000Y-72135600D01* -%TO.N,Net-(J3-Pad1)*% -X103073200Y-62636400D02* -X94488000Y-62636400D01* -X107035600Y-63144400D02* -X103581200Y-63144400D01* -X103581200Y-63144400D02* -X103073200Y-62636400D01* -X111930000Y-64330400D02* -X110871000Y-63271400D01* -X110871000Y-63271400D02* -X107162600Y-63271400D01* -X107162600Y-63271400D02* -X107035600Y-63144400D01* -D26* %TO.N,GND*% X107086400Y-61468000D02* X107035600Y-61417200D01* -D27* -X107086400Y-61468000D02* -X102158800Y-61468000D01* -D29* -%TO.N,/VBUS*% -X115714000Y-60342000D02* -X127609600Y-72237600D01* -D28* -%TO.N,+3V3*% -X82677000Y-82522400D02* -X83197476Y-83042876D01* -X83197476Y-83042876D02* -X83197476Y-86842600D01* -D29* -X80162400Y-86842600D02* -X83197476Y-86842600D01* -X83197476Y-86842600D02* -X83355274Y-87000398D01* -X131064000Y-84886800D02* -X128613199Y-84886800D01* -X128613199Y-84886800D02* -X128499999Y-85000000D01* -X83355275Y-87000398D02* -G75* -G03* -X128499998Y-85000000I22613925J62198D01* -G01* -D27* -%TO.N,GND*% +D26* X82677000Y-80797400D02* X85648800Y-77825600D01* -D26* +D27* X72085200Y-79349600D02* X72085200Y-81940400D01* -D27* +D28* +X108860000Y-55515000D02* +X108860000Y-58212400D01* +D26* X102158800Y-61468000D02* X101057965Y-60367165D01* +X136880600Y-75260200D02* +X133756000Y-72135600D01* X93216100Y-57910100D02* X94382600Y-56743600D01* X98501200Y-56743600D02* X99060000Y-56184800D01* -D26* +D27* X72059800Y-79375000D02* X72085200Y-79349600D01* -D27* +D26* X138658600Y-84658200D02* X138658600Y-77038200D01* D28* X101701600Y-56184800D02* X99060000Y-56184800D01* -D27* +D26* X90627200Y-57910100D02* X93216100Y-57910100D01* -D26* +X112826800Y-63500000D02* +X114554000Y-63500000D01* +D27* X72085200Y-81940400D02* X69900800Y-84124800D01* -D27* +D26* X133756000Y-72135600D02* X131227800Y-72135600D01* X78562200Y-90906600D02* X78587600Y-90932000D01* X101057965Y-60367165D02* X101057965Y-59820647D01* +X107086400Y-61468000D02* +X102158800Y-61468000D01* X93216100Y-57910100D02* X93751400Y-58445400D01* +X138658600Y-77038200D02* +X136880600Y-75260200D01* +X114554000Y-63500000D02* +X126492000Y-75438000D01* +D27* +X84074000Y-111861600D02* +X81661000Y-109448600D01* +X86029800Y-115290600D02* +X84074000Y-113334800D01* +X84074000Y-113334800D02* +X84074000Y-111861600D01* +D26* +X126669800Y-75260200D02* +X136880600Y-75260200D01* X73177400Y-98221800D02* X73177400Y-96610000D01* X85648800Y-77825600D02* @@ -565,83 +498,114 @@ X78562200Y-90906600D02* X77343000Y-92125800D01* X93751400Y-58445400D02* X93751400Y-60133000D01* -D26* +D27* X72059800Y-81965800D02* X72059800Y-79375000D01* -D27* +D26* X75158600Y-100203000D02* X74904600Y-99949000D01* X81661000Y-100203000D02* X75158600Y-100203000D01* -D26* +D27* X69900800Y-92049600D02* X72269900Y-94418700D01* X72269900Y-94418700D02* X75368700Y-94418700D01* -D27* +D26* X75368700Y-94418700D02* X76848800Y-92938600D01* -D26* +D27* X76723200Y-84326900D02* X76708000Y-84342100D01* -D27* +D26* X94382600Y-56743600D02* X98501200Y-56743600D01* +X115620800Y-57099200D02* +X117348000Y-57099200D01* +D27* +X107619800Y-115290600D02* +X86029800Y-115290600D01* D28* X102360000Y-55515000D02* X102360000Y-55526400D01* -D27* +D26* X77343000Y-92125800D02* X77343000Y-92938600D01* X73177400Y-96610000D02* X75368700Y-94418700D01* X94826800Y-66260000D02* X85648800Y-75438000D01* -D26* +D27* X76723200Y-83769200D02* X76723200Y-84326900D01* -D27* +X81661000Y-109448600D02* +X81661000Y-100203000D01* +D26* X97310000Y-66260000D02* X94826800Y-66260000D01* X76848800Y-92938600D02* X77343000Y-92938600D01* -D26* +D27* X69900800Y-84124800D02* X69900800Y-92049600D01* D28* +X108860000Y-58212400D02* +X109321600Y-58674000D01* X102360000Y-55526400D02* X101701600Y-56184800D01* -D27* +D26* X74904600Y-99949000D02* X73177400Y-98221800D01* +X126492000Y-75438000D02* +X126669800Y-75260200D01* %TO.N,/VBUS*% X96215200Y-57353200D02* X95021400Y-58547000D01* +D29* +X112920800Y-58049200D02* +X112920800Y-60205600D01* +X115714000Y-60342000D02* +X127609600Y-72237600D01* D28* X108060000Y-55515000D02* X108060000Y-60342000D01* -D27* +D26* X102514400Y-57353200D02* X101803200Y-57353200D01* X103160000Y-56707600D02* X102514400Y-57353200D01* X101803200Y-57353200D02* X96215200Y-57353200D01* +D29* +X112920800Y-60205600D02* +X112784400Y-60342000D01* D28* X101803200Y-57353200D02* X104800400Y-60350400D01* -D27* +D26* X103160000Y-55515000D02* X103160000Y-56707600D01* +D29* +X108060000Y-60342000D02* +X112784400Y-60342000D01* D28* X108051600Y-60350400D02* X108060000Y-60342000D01* X104800400Y-60350400D02* X108051600Y-60350400D01* -D27* +D29* +X112784400Y-60342000D02* +X115714000Y-60342000D01* +D26* X95021400Y-58547000D02* X95021400Y-60133000D01* +D29* %TO.N,+3V3*% +X131064000Y-84886800D02* +X128613199Y-84886800D01* +X128613199Y-84886800D02* +X128499999Y-85000000D01* +D26* X80162400Y-87223600D02* X80162400Y-86842600D01* D29* @@ -650,15 +614,35 @@ X131064000Y-84936000D01* D28* X82651600Y-82547800D02* X82677000Y-82522400D01* -D27* +D29* +X83197476Y-86842600D02* +X83355274Y-87000398D01* +D28* +X83197476Y-83042876D02* +X83197476Y-86842600D01* +D26* X76860400Y-88849200D02* X77368400Y-88341200D01* +D28* +X82677000Y-82522400D02* +X83197476Y-83042876D01* +D29* +X80162400Y-86842600D02* +X83197476Y-86842600D01* +D26* X77368400Y-88341200D02* X79044800Y-88341200D01* X70764400Y-88849200D02* X76860400Y-88849200D01* X79044800Y-88341200D02* X80162400Y-87223600D01* +D29* +X83355275Y-87000398D02* +G75* +G03* +X128499998Y-85000000I22613925J62198D01* +G01* +D26* %TO.N,/L_DETECT*% X75773200Y-83769200D02* X75773200Y-81706800D01* @@ -688,8 +672,6 @@ X78196232Y-78028800D02* X77334532Y-78890500D01* X79349600Y-80264000D02* X80060800Y-79552800D01* -X79349600Y-84886800D02* -X79349600Y-80264000D01* X80060800Y-79552800D02* X80060800Y-78282800D01* %TO.N,/SPI_MOSI*% @@ -764,21 +746,33 @@ X70764400Y-91389200D01* X77825600Y-89560400D02* X75996800Y-91389200D01* %TO.N,Net-(J3-Pad1)*% +X107035600Y-63144400D02* +X103581200Y-63144400D01* X74218800Y-76809600D02* X75184000Y-75844400D01* X74218800Y-77065500D02* X74218800Y-76809600D01* +X103073200Y-62636400D02* +X94488000Y-62636400D01* X87934800Y-69189600D02* X82397600Y-69189600D01* X111930000Y-65330000D02* X111930000Y-64330400D01* X94488000Y-62636400D02* X87934800Y-69189600D01* +X103581200Y-63144400D02* +X103073200Y-62636400D01* X75742800Y-75844400D02* X75184000Y-75844400D01* X82397600Y-69189600D02* X75742800Y-75844400D01* -D26* +X110871000Y-63271400D02* +X107162600Y-63271400D01* +X107162600Y-63271400D02* +X107035600Y-63144400D01* +X111930000Y-64330400D02* +X110871000Y-63271400D01* +D27* %TO.N,/DP*% X104190800Y-57649635D02* X104190800Y-58166000D01* @@ -819,7 +813,7 @@ X105360000Y-55515000D02* X105360000Y-57070841D01* X104927400Y-57478041D02* X104927400Y-58470800D01* -D27* +D26* %TO.N,/USBDM*% X83007200Y-74828400D02* X83007200Y-72390000D01* @@ -840,6 +834,13 @@ X82550000Y-78079600D02* X82550000Y-76149200D01* X83820000Y-74879200D02* X83820000Y-72745600D01* +D28* +%TO.N,/Vlens*% +X115585200Y-58049200D02* +X115570000Y-58064400D01* +X115620800Y-58049200D02* +X115585200Y-58049200D01* +D26* %TO.N,Net-(J6-Pad1)*% X82702400Y-69748400D02* X75776666Y-76674134D01* @@ -879,6 +880,16 @@ X78892400Y-77065500D02* X78892400Y-75133200D01* X98516000Y-64516000D02* X99500000Y-65500000D01* +%TO.N,/CANRX*% +X96291400Y-61544200D02* +X96164400Y-61671200D01* +X96291400Y-60133000D02* +X96291400Y-61544200D01* +%TO.N,/CANTX*% +X92481400Y-60133000D02* +X92481400Y-61899800D01* +X92481400Y-61899800D02* +X93116400Y-62534800D01* %TO.N,/CANL*% X97078800Y-52425600D02* X101650800Y-52425600D01* @@ -886,14 +897,14 @@ X101650800Y-52425600D02* X102064873Y-52425600D01* X103632000Y-54000400D02* X103276400Y-53644800D01* -D26* +D27* X106860000Y-55515000D02* X106860000Y-53252500D01* X103860000Y-55515000D02* X103860000Y-54228400D01* X106860000Y-53252500D02* X106900000Y-53212500D01* -D27* +D26* X95021400Y-55183000D02* X95021400Y-54483000D01* X102064873Y-52425600D02* @@ -902,13 +913,13 @@ X95021400Y-54483000D02* X97078800Y-52425600D01* X102721437Y-53082163D02* X103280237Y-53640964D01* -D26* +D27* X103860000Y-54228400D02* X103632000Y-54000400D01* %TO.N,/CANH*% X104360000Y-55515000D02* X104360000Y-53255200D01* -D27* +D26* X96367600Y-51917600D02* X103022400Y-51917600D01* X107696000Y-53644800D02* @@ -923,12 +934,12 @@ X104343200Y-53238400D02* X103530400Y-52425600D01* X103530400Y-52425600D02* X103022400Y-51917600D01* -D26* +D27* X104360000Y-53255200D02* X104343200Y-53238400D01* X107360000Y-55515000D02* X107360000Y-53980800D01* -D27* +D26* X103530400Y-52425600D02* X107289600Y-52425600D01* X107696000Y-52832000D02* @@ -938,6 +949,14 @@ X91579300Y-56085100D02* X92481400Y-55183000D01* X90627200Y-56085100D02* X91579300Y-56085100D01* +%TO.N,/Ven*% +X112920800Y-56149200D02* +X112920800Y-56141600D01* +X112920800Y-56141600D02* +X112928400Y-56134000D01* +%TO.N,/~{OC}*% +X115620800Y-56149200D02* +X115620800Y-56134000D01* %TD*% %TA.AperFunction,Conductor*% %TO.N,GND*% @@ -2347,12 +2366,12 @@ X127039972Y-82609002D01* X127012811Y-82466616D01* X127012809Y-82466607D01* X127012559Y-82465296D01* -X126881541Y-81906700D01* +X126868913Y-81852860D01* X126807099Y-81589314D01* X126807095Y-81589300D01* X126806794Y-81588015D01* X126564474Y-80720120D01* -X126348837Y-80056457D01* +X126340787Y-80031682D01* X126286430Y-79864389D01* X126286427Y-79864379D01* X126286022Y-79863134D01* @@ -4248,7 +4267,7 @@ X73510621Y-79724762D01* X73515797Y-79729929D01* X73522027Y-79733769D01* X73522028Y-79733770D01* -X73599271Y-79781383D01* +X73606477Y-79785825D01* X73663880Y-79821209D01* X73828991Y-79875974D01* X73835827Y-79876674D01* @@ -4354,7 +4373,7 @@ X69845553Y-83960038D01* X69974744Y-82600633D01* X70039808Y-81916000D01* X70041043Y-81906700D01* -X70050999Y-81848445D01* +X70044085Y-81888900D01* X70623110Y-78500935D01* X70626615Y-78485981D01* X70637056Y-78451156D01* @@ -4793,12 +4812,12 @@ X85700488Y-79733770D01* X85652378Y-79863134D01* X85651973Y-79864379D01* X85651970Y-79864389D01* -X85589563Y-80056457D01* +X85597613Y-80031682D01* X85373926Y-80720120D01* X85131606Y-81588015D01* X85131305Y-81589300D01* X85131301Y-81589314D01* -X85056859Y-81906700D01* +X85069487Y-81852860D01* X84925841Y-82465296D01* X84925591Y-82466607D01* X84925589Y-82466616D01* @@ -4880,6 +4899,9 @@ X83566387Y-82319685D01* X83513569Y-82157129D01* X83511527Y-82150844D01* X83416040Y-81985456D01* +X83321510Y-81880469D01* +X83292675Y-81848445D01* +X83292674Y-81848444D01* X83288253Y-81843534D01* X83133752Y-81731282D01* X83127724Y-81728598D01* @@ -4901,136 +4923,59 @@ X82388681Y-81656291D01* X82226278Y-81728597D01* X82226276Y-81728598D01* X82220248Y-81731282D01* +X82214907Y-81735162D01* +X82214906Y-81735163D01* +X82169428Y-81768205D01* X82065747Y-81843534D01* -X81937960Y-81985456D01* -X81842473Y-82150844D01* -X81783458Y-82332472D01* -X81763496Y-82522400D01* -X81764186Y-82528965D01* -X81781618Y-82694818D01* -X81783458Y-82712328D01* -X81842473Y-82893956D01* -X81845776Y-82899678D01* -X81845777Y-82899679D01* -X81855198Y-82915997D01* -X81937960Y-83059344D01* -X81942378Y-83064251D01* -X81942379Y-83064252D01* -X81966458Y-83090994D01* -X82065747Y-83201266D01* -X82220248Y-83313518D01* -X82226274Y-83316201D01* -X82226281Y-83316205D01* -X82364224Y-83377620D01* -X82418320Y-83423600D01* -X82438976Y-83492727D01* -X82438976Y-85708100D01* -X82418974Y-85776221D01* -X82365318Y-85822714D01* -X82312976Y-85834100D01* -X81739661Y-85834100D01* -X81671540Y-85814098D01* -X81625047Y-85760442D01* -X81614943Y-85690168D01* -X81619828Y-85669164D01* -X81665125Y-85529754D01* -X81665125Y-85529753D01* -X81667165Y-85523475D01* -X81686029Y-85344000D01* -X81680835Y-85294583D01* -X81667855Y-85171089D01* -X81667855Y-85171088D01* -X81667165Y-85164525D01* -X81656507Y-85131721D01* -X81625725Y-85036983D01* -X81611399Y-84992893D01* -X81603181Y-84978658D01* -X81542525Y-84873600D01* -X81525787Y-84804605D01* -X81542525Y-84747600D01* -X81608095Y-84634030D01* -X81608096Y-84634029D01* -X81611399Y-84628307D01* -X81652683Y-84501246D01* -X81665125Y-84462954D01* -X81665125Y-84462953D01* -X81667165Y-84456675D01* -X81673994Y-84391708D01* -X81685339Y-84283765D01* -X81686029Y-84277200D01* -X81678236Y-84203059D01* -X81667855Y-84104289D01* -X81667855Y-84104288D01* -X81667165Y-84097725D01* -X81648631Y-84040681D01* -X81618011Y-83946444D01* -X81611399Y-83926093D01* -X81607839Y-83919926D01* -X81549146Y-83818268D01* -X81521167Y-83769807D01* -X81400413Y-83635696D01* -X81254415Y-83529622D01* -X81248387Y-83526938D01* -X81248385Y-83526937D01* -X81095583Y-83458905D01* -X81095581Y-83458905D01* -X81089552Y-83456220D01* -X81001292Y-83437460D01* -X80919489Y-83420072D01* -X80919485Y-83420072D01* -X80913032Y-83418700D01* -X80732568Y-83418700D01* -X80726115Y-83420072D01* -X80726111Y-83420072D01* -X80644308Y-83437460D01* -X80556048Y-83456220D01* -X80550019Y-83458904D01* -X80550017Y-83458905D01* -X80397216Y-83526937D01* -X80397214Y-83526938D01* -X80391186Y-83529622D01* -X80385845Y-83533502D01* -X80385844Y-83533503D01* -X80250531Y-83631813D01* -X80250529Y-83631815D01* -X80245187Y-83635696D01* -X80202734Y-83682845D01* -X80142291Y-83720083D01* -X80071307Y-83718732D01* -X80012322Y-83679218D01* -X79984064Y-83614087D01* -X79983100Y-83598533D01* -X79983100Y-80578594D01* -X80003102Y-80510473D01* -X80020005Y-80489499D01* -X80453047Y-80056457D01* -X80461337Y-80048913D01* -X80467818Y-80044800D01* -X80514459Y-79995132D01* -X80517213Y-79992291D01* -X80536935Y-79972569D01* -X80539419Y-79969367D01* -X80547117Y-79960355D01* -X80571961Y-79933898D01* -X80577386Y-79928121D01* -X80587147Y-79910366D01* -X80597998Y-79893847D01* -X80610414Y-79877841D01* -X80620375Y-79854823D01* -X80627974Y-79837263D01* -X80633191Y-79826613D01* -X80654495Y-79787860D01* -X80659533Y-79768237D01* -X80665937Y-79749534D01* -X80670833Y-79738220D01* -X80670833Y-79738219D01* -X80673981Y-79730945D01* -X80675220Y-79723122D01* -X80675223Y-79723112D01* -X80680899Y-79687276D01* -X80683305Y-79675656D01* -X80692328Y-79640511D01* -X80692328Y-79640510D01* +X82061332Y-81848437D01* +X82056420Y-81852860D01* +X82055295Y-81851611D01* +X82001986Y-81884451D01* +X81968800Y-81888900D01* +X81912688Y-81888900D01* +X81844567Y-81868898D01* +X81823670Y-81852073D01* +X81823208Y-81851611D01* +X81788589Y-81817053D01* +X81745214Y-81773753D01* +X81711135Y-81711470D01* +X81716138Y-81640650D01* +X81745059Y-81595563D01* +X81847754Y-81492688D01* +X81847758Y-81492683D01* +X81852929Y-81487503D01* +X81861875Y-81472990D01* +X81940369Y-81345650D01* +X81940370Y-81345648D01* +X81944209Y-81339420D01* +X81998974Y-81174309D01* +X82009500Y-81071572D01* +X82009500Y-80472428D01* +X82007302Y-80451244D01* +X81999419Y-80375265D01* +X81999418Y-80375261D01* +X81998707Y-80368407D01* +X81973074Y-80291574D01* +X81945972Y-80210341D01* +X81943654Y-80203393D01* +X81852116Y-80055469D01* +X81837180Y-80040559D01* +X81734184Y-79937742D01* +X81734179Y-79937738D01* +X81729003Y-79932571D01* +X81722772Y-79928730D01* +X81587150Y-79845131D01* +X81587148Y-79845130D01* +X81580920Y-79841291D01* +X81415809Y-79786526D01* +X81408973Y-79785826D01* +X81408970Y-79785825D01* +X81357474Y-79780549D01* +X81313072Y-79776000D01* +X80818131Y-79776000D01* +X80750010Y-79755998D01* +X80703517Y-79702342D01* +X80693430Y-79636217D01* X80694300Y-79632830D01* X80694300Y-79612576D01* X80695851Y-79592865D01* @@ -5251,6 +5196,9 @@ X76911844Y-83000710D01* X76911843Y-83000712D01* X76910120Y-83006643D01* X76867638Y-83152869D01* +X76867134Y-83159274D01* +X76867133Y-83159279D01* +X76864893Y-83187742D01* X76864700Y-83190198D01* X76864700Y-84348202D01* X76867638Y-84385531D01* @@ -5305,6 +5253,9 @@ X76532345Y-84545301D01* X76578762Y-84385531D01* X76581700Y-84348202D01* X76581700Y-83190198D01* +X76581507Y-83187742D01* +X76579267Y-83159279D01* +X76579266Y-83159274D01* X76578762Y-83152869D01* X76536280Y-83006643D01* X76534557Y-83000712D01* @@ -5332,10 +5283,10 @@ X76945519Y-81688909D01* X77107922Y-81616603D01* X77107924Y-81616602D01* X77113952Y-81613918D01* -X77147766Y-81589351D01* +X77139216Y-81595563D01* X77169357Y-81573664D01* X77268453Y-81501666D01* -X77346822Y-81414628D01* +X77276537Y-81492688D01* X77391821Y-81364652D01* X77391822Y-81364651D01* X77396240Y-81359744D01* @@ -6923,12 +6874,12 @@ X127039972Y-82609002D01* X127012811Y-82466616D01* X127012809Y-82466607D01* X127012559Y-82465296D01* -X126881541Y-81906700D01* +X126868913Y-81852860D01* X126807099Y-81589314D01* X126807095Y-81589300D01* X126806794Y-81588015D01* X126564474Y-80720120D01* -X126348837Y-80056457D01* +X126340787Y-80031682D01* X126286430Y-79864389D01* X126286427Y-79864379D01* X126286022Y-79863134D01* @@ -8824,7 +8775,7 @@ X73510621Y-79724762D01* X73515797Y-79729929D01* X73522027Y-79733769D01* X73522028Y-79733770D01* -X73599271Y-79781383D01* +X73606477Y-79785825D01* X73663880Y-79821209D01* X73828991Y-79875974D01* X73835827Y-79876674D01* @@ -8930,7 +8881,7 @@ X69845553Y-83960038D01* X69974744Y-82600633D01* X70039808Y-81916000D01* X70041043Y-81906700D01* -X70050999Y-81848445D01* +X70044085Y-81888900D01* X70623110Y-78500935D01* X70626615Y-78485981D01* X70637056Y-78451156D01* @@ -9369,12 +9320,12 @@ X85700488Y-79733770D01* X85652378Y-79863134D01* X85651973Y-79864379D01* X85651970Y-79864389D01* -X85589563Y-80056457D01* +X85597613Y-80031682D01* X85373926Y-80720120D01* X85131606Y-81588015D01* X85131305Y-81589300D01* X85131301Y-81589314D01* -X85056859Y-81906700D01* +X85069487Y-81852860D01* X84925841Y-82465296D01* X84925591Y-82466607D01* X84925589Y-82466616D01* @@ -9456,6 +9407,9 @@ X83566387Y-82319685D01* X83513569Y-82157129D01* X83511527Y-82150844D01* X83416040Y-81985456D01* +X83321510Y-81880469D01* +X83292675Y-81848445D01* +X83292674Y-81848444D01* X83288253Y-81843534D01* X83133752Y-81731282D01* X83127724Y-81728598D01* @@ -9477,136 +9431,59 @@ X82388681Y-81656291D01* X82226278Y-81728597D01* X82226276Y-81728598D01* X82220248Y-81731282D01* +X82214907Y-81735162D01* +X82214906Y-81735163D01* +X82169428Y-81768205D01* X82065747Y-81843534D01* -X81937960Y-81985456D01* -X81842473Y-82150844D01* -X81783458Y-82332472D01* -X81763496Y-82522400D01* -X81764186Y-82528965D01* -X81781618Y-82694818D01* -X81783458Y-82712328D01* -X81842473Y-82893956D01* -X81845776Y-82899678D01* -X81845777Y-82899679D01* -X81855198Y-82915997D01* -X81937960Y-83059344D01* -X81942378Y-83064251D01* -X81942379Y-83064252D01* -X81966458Y-83090994D01* -X82065747Y-83201266D01* -X82220248Y-83313518D01* -X82226274Y-83316201D01* -X82226281Y-83316205D01* -X82364224Y-83377620D01* -X82418320Y-83423600D01* -X82438976Y-83492727D01* -X82438976Y-85708100D01* -X82418974Y-85776221D01* -X82365318Y-85822714D01* -X82312976Y-85834100D01* -X81739661Y-85834100D01* -X81671540Y-85814098D01* -X81625047Y-85760442D01* -X81614943Y-85690168D01* -X81619828Y-85669164D01* -X81665125Y-85529754D01* -X81665125Y-85529753D01* -X81667165Y-85523475D01* -X81686029Y-85344000D01* -X81680835Y-85294583D01* -X81667855Y-85171089D01* -X81667855Y-85171088D01* -X81667165Y-85164525D01* -X81656507Y-85131721D01* -X81625725Y-85036983D01* -X81611399Y-84992893D01* -X81603181Y-84978658D01* -X81542525Y-84873600D01* -X81525787Y-84804605D01* -X81542525Y-84747600D01* -X81608095Y-84634030D01* -X81608096Y-84634029D01* -X81611399Y-84628307D01* -X81652683Y-84501246D01* -X81665125Y-84462954D01* -X81665125Y-84462953D01* -X81667165Y-84456675D01* -X81673994Y-84391708D01* -X81685339Y-84283765D01* -X81686029Y-84277200D01* -X81678236Y-84203059D01* -X81667855Y-84104289D01* -X81667855Y-84104288D01* -X81667165Y-84097725D01* -X81648631Y-84040681D01* -X81618011Y-83946444D01* -X81611399Y-83926093D01* -X81607839Y-83919926D01* -X81549146Y-83818268D01* -X81521167Y-83769807D01* -X81400413Y-83635696D01* -X81254415Y-83529622D01* -X81248387Y-83526938D01* -X81248385Y-83526937D01* -X81095583Y-83458905D01* -X81095581Y-83458905D01* -X81089552Y-83456220D01* -X81001292Y-83437460D01* -X80919489Y-83420072D01* -X80919485Y-83420072D01* -X80913032Y-83418700D01* -X80732568Y-83418700D01* -X80726115Y-83420072D01* -X80726111Y-83420072D01* -X80644308Y-83437460D01* -X80556048Y-83456220D01* -X80550019Y-83458904D01* -X80550017Y-83458905D01* -X80397216Y-83526937D01* -X80397214Y-83526938D01* -X80391186Y-83529622D01* -X80385845Y-83533502D01* -X80385844Y-83533503D01* -X80250531Y-83631813D01* -X80250529Y-83631815D01* -X80245187Y-83635696D01* -X80202734Y-83682845D01* -X80142291Y-83720083D01* -X80071307Y-83718732D01* -X80012322Y-83679218D01* -X79984064Y-83614087D01* -X79983100Y-83598533D01* -X79983100Y-80578594D01* -X80003102Y-80510473D01* -X80020005Y-80489499D01* -X80453047Y-80056457D01* -X80461337Y-80048913D01* -X80467818Y-80044800D01* -X80514459Y-79995132D01* -X80517213Y-79992291D01* -X80536935Y-79972569D01* -X80539419Y-79969367D01* -X80547117Y-79960355D01* -X80571961Y-79933898D01* -X80577386Y-79928121D01* -X80587147Y-79910366D01* -X80597998Y-79893847D01* -X80610414Y-79877841D01* -X80620375Y-79854823D01* -X80627974Y-79837263D01* -X80633191Y-79826613D01* -X80654495Y-79787860D01* -X80659533Y-79768237D01* -X80665937Y-79749534D01* -X80670833Y-79738220D01* -X80670833Y-79738219D01* -X80673981Y-79730945D01* -X80675220Y-79723122D01* -X80675223Y-79723112D01* -X80680899Y-79687276D01* -X80683305Y-79675656D01* -X80692328Y-79640511D01* -X80692328Y-79640510D01* +X82061332Y-81848437D01* +X82056420Y-81852860D01* +X82055295Y-81851611D01* +X82001986Y-81884451D01* +X81968800Y-81888900D01* +X81912688Y-81888900D01* +X81844567Y-81868898D01* +X81823670Y-81852073D01* +X81823208Y-81851611D01* +X81788589Y-81817053D01* +X81745214Y-81773753D01* +X81711135Y-81711470D01* +X81716138Y-81640650D01* +X81745059Y-81595563D01* +X81847754Y-81492688D01* +X81847758Y-81492683D01* +X81852929Y-81487503D01* +X81861875Y-81472990D01* +X81940369Y-81345650D01* +X81940370Y-81345648D01* +X81944209Y-81339420D01* +X81998974Y-81174309D01* +X82009500Y-81071572D01* +X82009500Y-80472428D01* +X82007302Y-80451244D01* +X81999419Y-80375265D01* +X81999418Y-80375261D01* +X81998707Y-80368407D01* +X81973074Y-80291574D01* +X81945972Y-80210341D01* +X81943654Y-80203393D01* +X81852116Y-80055469D01* +X81837180Y-80040559D01* +X81734184Y-79937742D01* +X81734179Y-79937738D01* +X81729003Y-79932571D01* +X81722772Y-79928730D01* +X81587150Y-79845131D01* +X81587148Y-79845130D01* +X81580920Y-79841291D01* +X81415809Y-79786526D01* +X81408973Y-79785826D01* +X81408970Y-79785825D01* +X81357474Y-79780549D01* +X81313072Y-79776000D01* +X80818131Y-79776000D01* +X80750010Y-79755998D01* +X80703517Y-79702342D01* +X80693430Y-79636217D01* X80694300Y-79632830D01* X80694300Y-79612576D01* X80695851Y-79592865D01* @@ -9827,6 +9704,9 @@ X76911844Y-83000710D01* X76911843Y-83000712D01* X76910120Y-83006643D01* X76867638Y-83152869D01* +X76867134Y-83159274D01* +X76867133Y-83159279D01* +X76864893Y-83187742D01* X76864700Y-83190198D01* X76864700Y-84348202D01* X76867638Y-84385531D01* @@ -9881,6 +9761,9 @@ X76532345Y-84545301D01* X76578762Y-84385531D01* X76581700Y-84348202D01* X76581700Y-83190198D01* +X76581507Y-83187742D01* +X76579267Y-83159279D01* +X76579266Y-83159274D01* X76578762Y-83152869D01* X76536280Y-83006643D01* X76534557Y-83000712D01* @@ -9908,10 +9791,10 @@ X76945519Y-81688909D01* X77107922Y-81616603D01* X77107924Y-81616602D01* X77113952Y-81613918D01* -X77147766Y-81589351D01* +X77139216Y-81595563D01* X77169357Y-81573664D01* X77268453Y-81501666D01* -X77346822Y-81414628D01* +X77276537Y-81492688D01* X77391821Y-81364652D01* X77391822Y-81364651D01* X77396240Y-81359744D01* diff --git a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-F_Mask.gbr b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-F_Mask.gbr index cf5a870..66a35d2 100644 --- a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-F_Mask.gbr +++ b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-F_Mask.gbr @@ -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* diff --git a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-F_Paste.gbr b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-F_Paste.gbr index 0420ebf..0ec702b 100644 --- a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-F_Paste.gbr +++ b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-F_Paste.gbr @@ -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* diff --git a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-F_Silkscreen.gbr b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-F_Silkscreen.gbr index 6c71c65..0e9e04d 100644 --- a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-F_Silkscreen.gbr +++ b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-F_Silkscreen.gbr @@ -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* diff --git a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-drl.rpt b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-drl.rpt index 8328258..0912645 100644 --- a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-drl.rpt +++ b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-drl.rpt @@ -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: ============================================================= diff --git a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-drl_map.gbr b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-drl_map.gbr index 7eca053..026f56c 100644 --- a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-drl_map.gbr +++ b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-drl_map.gbr @@ -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* diff --git a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-job.gbrjob b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-job.gbrjob index 5ce4bb3..3f9643f 100644 --- a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-job.gbrjob +++ b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage-job.gbrjob @@ -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": { diff --git a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage.drl b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage.drl index d46f48f..da4fd5b 100644 --- a/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage.drl +++ b/F1:F103/Canon_managing_device/kicad/Canon_manage/gerbers/Canon_manage.drl @@ -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 diff --git a/F1:F103/Canon_managing_device/main.c b/F1:F103/Canon_managing_device/main.c index 96c6cc0..6792667 100644 --- a/F1:F103/Canon_managing_device/main.c +++ b/F1:F103/Canon_managing_device/main.c @@ -16,7 +16,9 @@ * along with this program. If not, see . */ +#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(); } diff --git a/F1:F103/Canon_managing_device/openocd.cfg b/F1:F103/Canon_managing_device/openocd.cfg new file mode 100644 index 0000000..12c494b --- /dev/null +++ b/F1:F103/Canon_managing_device/openocd.cfg @@ -0,0 +1,6 @@ +# STM32F103C8 "Blue Pill" + +set FLASH_SIZE 0x20000 + +source [find interface/stlink-v2-1.cfg] +source [find target/stm32f1x.cfg] diff --git a/F1:F103/Canon_managing_device/proto.c b/F1:F103/Canon_managing_device/proto.c index 13a3ed5..c05ced3 100644 --- a/F1:F103/Canon_managing_device/proto.c +++ b/F1:F103/Canon_managing_device/proto.c @@ -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: diff --git a/F1:F103/Canon_managing_device/proto.h b/F1:F103/Canon_managing_device/proto.h index 42ebdff..9991b63 100644 --- a/F1:F103/Canon_managing_device/proto.h +++ b/F1:F103/Canon_managing_device/proto.h @@ -22,6 +22,15 @@ #include +#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); diff --git a/F1:F103/Canon_managing_device/spi.c b/F1:F103/Canon_managing_device/spi.c index 969da9e..c6a8ef5 100644 --- a/F1:F103/Canon_managing_device/spi.c +++ b/F1:F103/Canon_managing_device/spi.c @@ -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; -} - diff --git a/F1:F103/Canon_managing_device/spi.h b/F1:F103/Canon_managing_device/spi.h index 55c5ccc..b3e7750 100644 --- a/F1:F103/Canon_managing_device/spi.h +++ b/F1:F103/Canon_managing_device/spi.h @@ -20,7 +20,7 @@ #ifndef SPI_H__ #define SPI_H__ -#include "stm32f1.h" +#include 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__ diff --git a/F1:F103/Canon_managing_device/usb.c b/F1:F103/Canon_managing_device/usb.c index f39a217..d474a84 100644 --- a/F1:F103/Canon_managing_device/usb.c +++ b/F1:F103/Canon_managing_device/usb.c @@ -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 diff --git a/F1:F103/Canon_managing_device/version.inc b/F1:F103/Canon_managing_device/version.inc index a6f1a3c..b43005f 100644 --- a/F1:F103/Canon_managing_device/version.inc +++ b/F1:F103/Canon_managing_device/version.inc @@ -1,2 +1,2 @@ -#define BUILD_NUMBER "50" -#define BUILD_DATE "2022-09-10" +#define BUILD_NUMBER "93" +#define BUILD_DATE "2023-03-15" diff --git a/F3:F303/NitrogenFlooding/kicad/nitrogen/nitrogen.kicad_prl b/F3:F303/NitrogenFlooding/kicad/nitrogen/nitrogen.kicad_prl index d0506b6..1e9adda 100644 --- a/F3:F303/NitrogenFlooding/kicad/nitrogen/nitrogen.kicad_prl +++ b/F3:F303/NitrogenFlooding/kicad/nitrogen/nitrogen.kicad_prl @@ -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": {