From 72ef5c9cc628b016a327cdb8c003f55e1d524bc7 Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Sat, 29 Apr 2023 18:43:38 +0300 Subject: [PATCH] All OK, now I need to make proper protocol --- F3:F303/Seven_CDCs/main.c | 1 + F3:F303/Seven_CDCs/sevenCDCs.bin | Bin 8416 -> 8396 bytes F3:F303/Seven_CDCs/usart.c | 6 +-- F3:F303/Seven_CDCs/usb.c | 34 +++++++-------- F3:F303/Seven_CDCs/usb.h | 5 +-- F3:F303/Seven_CDCs/usb_lib.c | 70 +++++++++++++++---------------- F3:F303/Seven_CDCs/usbhw.h | 7 ++-- F3:F303/Seven_CDCs/version.inc | 2 +- 8 files changed, 60 insertions(+), 65 deletions(-) diff --git a/F3:F303/Seven_CDCs/main.c b/F3:F303/Seven_CDCs/main.c index b09f5d4..3871534 100644 --- a/F3:F303/Seven_CDCs/main.c +++ b/F3:F303/Seven_CDCs/main.c @@ -53,6 +53,7 @@ int main(void){ if(Tms - ctr > 499){ ctr = Tms; pin_toggle(GPIOB, 1 << 1 | 1 << 0); // toggle LED @ PB0 + USB_sendstr(CMD_IDX, "1"); //DBGmesg(u2str(Tms)); //DBGnl(); } diff --git a/F3:F303/Seven_CDCs/sevenCDCs.bin b/F3:F303/Seven_CDCs/sevenCDCs.bin index a66c56dd49fae6b66fb3f5b9bcac5ed36c9a3bc2..9329eaa643c0dacef322bdebd0152a518adf7149 100755 GIT binary patch delta 2570 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 & USART_ISR_RXNE){ // RX not emty - receive next char - DBG("got\n"); + //DBG("got\n"); // read RDR clears flag uint8_t rb = USART1->RDR; USB_putbyte(USART1_IDX, rb); @@ -96,7 +96,7 @@ void usart1_exti25_isr(){ void usart2_exti26_isr(){ if(USART2->ISR & USART_ISR_RXNE){ - DBG("got\n"); + //DBG("got\n"); uint8_t rb = USART2->RDR; USB_putbyte(USART2_IDX, rb); } @@ -104,7 +104,7 @@ void usart2_exti26_isr(){ void usart3_exti28_isr(){ if(USART3->ISR & USART_ISR_RXNE){ - DBG("got\n"); + //DBG("got\n"); uint8_t rb = USART3->RDR; USB_putbyte(USART3_IDX, rb); } diff --git a/F3:F303/Seven_CDCs/usb.c b/F3:F303/Seven_CDCs/usb.c index de17081..9129679 100644 --- a/F3:F303/Seven_CDCs/usb.c +++ b/F3:F303/Seven_CDCs/usb.c @@ -22,24 +22,24 @@ #include "usb.h" #include "usb_lib.h" -static volatile uint8_t usbbuff[USB_TRBUFSZ]; // temporary buffer for sending data +static volatile uint8_t usbbuff[USB_TXBUFSZ]; // temporary buffer for sending data // ring buffers for incoming and outgoing data -static uint8_t obuf[WORK_EPs][RBOUTSZ], ibuf[WORK_EPs][RBINSZ]; +static uint8_t obuf[MAX_IDX][RBOUTSZ], ibuf[MAX_IDX][RBINSZ]; #define OBUF(N) {.data = obuf[N], .length = RBOUTSZ, .head = 0, .tail = 0} -volatile ringbuffer rbout[WORK_EPs] = {OBUF(0), OBUF(1), OBUF(2), OBUF(3), OBUF(4), OBUF(5), OBUF(6)}; +volatile ringbuffer rbout[MAX_IDX] = {OBUF(0), OBUF(1), OBUF(2), OBUF(3), OBUF(4), OBUF(5), OBUF(6)}; #define IBUF(N) {.data = ibuf[N], .length = RBINSZ, .head = 0, .tail = 0} -volatile ringbuffer rbin[WORK_EPs] = {IBUF(0), IBUF(1), IBUF(2), IBUF(3), IBUF(4), IBUF(5), IBUF(6)}; +volatile ringbuffer rbin[MAX_IDX] = {IBUF(0), IBUF(1), IBUF(2), IBUF(3), IBUF(4), IBUF(5), IBUF(6)}; // transmission is succesfull -volatile uint8_t bufisempty[WORK_EPs] = {1,1,1,1,1,1,1}; -volatile uint8_t bufovrfl[WORK_EPs] = {0}; +volatile uint8_t bufisempty[MAX_IDX] = {1,1,1,1,1,1,1}; +volatile uint8_t bufovrfl[MAX_IDX] = {0}; // here and later: ifNo is index of buffers, i.e. ifNo = epno-1 !!! void send_next(int ifNo){ if(bufisempty[ifNo]) return; - static uint8_t lastdsz[WORK_EPs] = {0}; - int buflen = RB_read((ringbuffer*)&rbout[ifNo], (uint8_t*)usbbuff, USB_TRBUFSZ); + static uint8_t lastdsz[MAX_EPNO] = {0}; + int buflen = RB_read((ringbuffer*)&rbout[ifNo], (uint8_t*)usbbuff, USB_TXBUFSZ); if(!buflen){ - if(lastdsz[ifNo] == USB_TRBUFSZ) EP_Write(ifNo+1, NULL, 0); // send ZLP after 64 bits packet when nothing more to send + if(lastdsz[ifNo] == USB_TXBUFSZ) EP_Write(ifNo+1, NULL, 0); // send ZLP after 64 bits packet when nothing more to send lastdsz[ifNo] = 0; bufisempty[ifNo] = 1; return; @@ -104,13 +104,12 @@ int USB_sendstr(int ifNo, const char *string){ * @return amount of received bytes (negative, if overfull happened) */ int USB_receive(int ifNo, uint8_t *buf, int len){ - int sz = RB_read((ringbuffer*)&rbin[ifNo], buf, len); if(bufovrfl[ifNo]){ RB_clearbuf((ringbuffer*)&rbin[ifNo]); - if(!sz) sz = -1; - else sz = -sz; bufovrfl[ifNo] = 0; + return -1; } + int sz = RB_read((ringbuffer*)&rbin[ifNo], buf, len); return sz; } @@ -121,14 +120,13 @@ int USB_receive(int ifNo, uint8_t *buf, int len){ * @return strlen or negative value indicating overflow (if so, string won't be ends with 0 and buffer should be cleared) */ int USB_receivestr(int ifNo, char *buf, int len){ - int l = RB_readto((ringbuffer*)&rbin[ifNo], '\n', (uint8_t*)buf, len); - if(l == 0) return 0; - if(--l < 0 || bufovrfl[ifNo]) RB_clearbuf((ringbuffer*)&rbin[ifNo]); - else buf[l] = 0; // replace '\n' with strend if(bufovrfl[ifNo]){ - if(l > 0) l = -l; - else l = -1; + RB_clearbuf((ringbuffer*)&rbin[ifNo]); bufovrfl[ifNo] = 0; + return -1; } + int l = RB_readto((ringbuffer*)&rbin[ifNo], '\n', (uint8_t*)buf, len); + if(l < 1) return 0; + buf[--l] = 0; // replace '\n' with strend return l; } diff --git a/F3:F303/Seven_CDCs/usb.h b/F3:F303/Seven_CDCs/usb.h index 01c0d28..f79fe1b 100644 --- a/F3:F303/Seven_CDCs/usb.h +++ b/F3:F303/Seven_CDCs/usb.h @@ -31,8 +31,6 @@ #define STR_HELPER(s) #s #define STR(s) STR_HELPER(s) -// total amount of working EPs -#define WORK_EPs 7 // functional EPs #define CMD_EPNO 1 #define DBG_EPNO 2 @@ -41,6 +39,7 @@ #define USART3_EPNO 5 #define USART4_EPNO 6 #define CAN_EPNO 7 +// total amount of working EPs #define MAX_EPNO 7 #define USARTMAX_EPNO USART3_EPNO @@ -52,7 +51,7 @@ #define USART2_IDX (USART2_EPNO-1) #define USART3_IDX (USART3_EPNO-1) #define USART4_IDX (USART4_EPNO-1) -#define MAX_IDX 7 +#define MAX_IDX (MAX_EPNO) extern volatile ringbuffer rbout[], rbin[]; extern volatile uint8_t bufisempty[], bufovrfl[]; diff --git a/F3:F303/Seven_CDCs/usb_lib.c b/F3:F303/Seven_CDCs/usb_lib.c index 5bedf72..3b8067d 100644 --- a/F3:F303/Seven_CDCs/usb_lib.c +++ b/F3:F303/Seven_CDCs/usb_lib.c @@ -153,16 +153,16 @@ static const uint8_t USB_ConfigDescriptor[] = { 0x05, /* bDescriptorType: Endpoint */ 0x81, /* bEndpointAddress IN1 */ 0x02, /* bmAttributes: Bulk */ - (USB_TRBUFSZ & 0xff), /* wMaxPacketSize: 64 */ - (USB_TRBUFSZ >> 8), + (USB_TXBUFSZ & 0xff), /* wMaxPacketSize: 64 */ + (USB_TXBUFSZ >> 8), 0x00, /* bInterval: ignore for Bulk transfer */ /*Endpoint OUT Descriptor*/ 0x07, /* bLength: Endpoint Descriptor size */ 0x05, /* bDescriptorType: Endpoint */ 0x01, /* bEndpointAddress OUT1 */ 0x02, /* bmAttributes: Bulk */ - (USB_TRBUFSZ & 0xff), /* wMaxPacketSize: 64 */ - (USB_TRBUFSZ >> 8), + (USB_RXBUFSZ & 0xff), /* wMaxPacketSize: 64 */ + (USB_RXBUFSZ >> 8), 0x00, /* bInterval: ignore for Bulk transfer */ /*---------------------------------------------------------------------------*/ @@ -234,16 +234,16 @@ static const uint8_t USB_ConfigDescriptor[] = { 0x05, /* bDescriptorType: Endpoint */ /**/0x82, /* bEndpointAddress IN2 */ 0x02, /* bmAttributes: Bulk */ - (USB_TRBUFSZ & 0xff), /* wMaxPacketSize: 64 */ - (USB_TRBUFSZ >> 8), + (USB_TXBUFSZ & 0xff), /* wMaxPacketSize: 64 */ + (USB_TXBUFSZ >> 8), 0x00, /* bInterval: ignore for Bulk transfer */ /*Endpoint OUT Descriptor */ 0x07, /* bLength: Endpoint Descriptor size */ 0x05, /* bDescriptorType: Endpoint */ /**/0x02, /* bEndpointAddress OUT2 */ 0x02, /* bmAttributes: Bulk */ - (USB_TRBUFSZ & 0xff), /* wMaxPacketSize: 64 */ - (USB_TRBUFSZ >> 8), + (USB_RXBUFSZ & 0xff), /* wMaxPacketSize: 64 */ + (USB_RXBUFSZ >> 8), 0x00, /* bInterval: ignore for Bulk transfer */ /*---------------------------------------------------------------------------*/ @@ -315,16 +315,16 @@ static const uint8_t USB_ConfigDescriptor[] = { 0x05, /* bDescriptorType: Endpoint */ /**/0x83, /* bEndpointAddress IN3 */ 0x02, /* bmAttributes: Bulk */ - (USB_TRBUFSZ & 0xff), /* wMaxPacketSize: 64 */ - (USB_TRBUFSZ >> 8), + (USB_TXBUFSZ & 0xff), /* wMaxPacketSize: 64 */ + (USB_TXBUFSZ >> 8), 0x00, /* bInterval: ignore for Bulk transfer */ /*Endpoint OUT Descriptor */ 0x07, /* bLength: Endpoint Descriptor size */ 0x05, /* bDescriptorType: Endpoint */ /**/0x03, /* bEndpointAddress OUT3 */ 0x02, /* bmAttributes: Bulk */ - (USB_TRBUFSZ & 0xff), /* wMaxPacketSize: 64 */ - (USB_TRBUFSZ >> 8), + (USB_RXBUFSZ & 0xff), /* wMaxPacketSize: 64 */ + (USB_RXBUFSZ >> 8), 0x00, /* bInterval: ignore for Bulk transfer */ /*---------------------------------------------------------------------------*/ @@ -396,16 +396,16 @@ static const uint8_t USB_ConfigDescriptor[] = { 0x05, /* bDescriptorType: Endpoint */ /**/0x84, /* bEndpointAddress IN4 */ 0x02, /* bmAttributes: Bulk */ - (USB_TRBUFSZ & 0xff), /* wMaxPacketSize: 64 */ - (USB_TRBUFSZ >> 8), + (USB_TXBUFSZ & 0xff), /* wMaxPacketSize: 64 */ + (USB_TXBUFSZ >> 8), 0x00, /* bInterval: ignore for Bulk transfer */ /*Endpoint OUT Descriptor */ 0x07, /* bLength: Endpoint Descriptor size */ 0x05, /* bDescriptorType: Endpoint */ /**/0x04, /* bEndpointAddress OUT4 */ 0x02, /* bmAttributes: Bulk */ - (USB_TRBUFSZ & 0xff), /* wMaxPacketSize: 64 */ - (USB_TRBUFSZ >> 8), + (USB_RXBUFSZ & 0xff), /* wMaxPacketSize: 64 */ + (USB_RXBUFSZ >> 8), 0x00, /* bInterval: ignore for Bulk transfer */ /*---------------------------------------------------------------------------*/ @@ -477,16 +477,16 @@ static const uint8_t USB_ConfigDescriptor[] = { 0x05, /* bDescriptorType: Endpoint */ /**/0x85, /* bEndpointAddress IN5 */ 0x02, /* bmAttributes: Bulk */ - (USB_TRBUFSZ & 0xff), /* wMaxPacketSize: 64 */ - (USB_TRBUFSZ >> 8), + (USB_TXBUFSZ & 0xff), /* wMaxPacketSize: 64 */ + (USB_TXBUFSZ >> 8), 0x00, /* bInterval: ignore for Bulk transfer */ /*Endpoint OUT Descriptor */ 0x07, /* bLength: Endpoint Descriptor size */ 0x05, /* bDescriptorType: Endpoint */ /**/0x05, /* bEndpointAddress OUT5 */ 0x02, /* bmAttributes: Bulk */ - (USB_TRBUFSZ & 0xff), /* wMaxPacketSize: 64 */ - (USB_TRBUFSZ >> 8), + (USB_RXBUFSZ & 0xff), /* wMaxPacketSize: 64 */ + (USB_RXBUFSZ >> 8), 0x00, /* bInterval: ignore for Bulk transfer */ /*---------------------------------------------------------------------------*/ @@ -558,16 +558,16 @@ static const uint8_t USB_ConfigDescriptor[] = { 0x05, /* bDescriptorType: Endpoint */ /**/0x86, /* bEndpointAddress IN6 */ 0x02, /* bmAttributes: Bulk */ - (USB_TRBUFSZ & 0xff), /* wMaxPacketSize: 64 */ - (USB_TRBUFSZ >> 8), + (USB_TXBUFSZ & 0xff), /* wMaxPacketSize: 64 */ + (USB_TXBUFSZ >> 8), 0x00, /* bInterval: ignore for Bulk transfer */ /*Endpoint OUT Descriptor */ 0x07, /* bLength: Endpoint Descriptor size */ 0x05, /* bDescriptorType: Endpoint */ /**/0x06, /* bEndpointAddress OUT6 */ 0x02, /* bmAttributes: Bulk */ - (USB_TRBUFSZ & 0xff), /* wMaxPacketSize: 64 */ - (USB_TRBUFSZ >> 8), + (USB_RXBUFSZ & 0xff), /* wMaxPacketSize: 64 */ + (USB_RXBUFSZ >> 8), 0x00, /* bInterval: ignore for Bulk transfer */ /*---------------------------------------------------------------------------*/ @@ -639,16 +639,16 @@ static const uint8_t USB_ConfigDescriptor[] = { 0x05, /* bDescriptorType: Endpoint */ /**/0x87, /* bEndpointAddress IN7 */ 0x02, /* bmAttributes: Bulk */ - (USB_TRBUFSZ & 0xff), /* wMaxPacketSize: 64 */ - (USB_TRBUFSZ >> 8), + (USB_TXBUFSZ & 0xff), /* wMaxPacketSize: 64 */ + (USB_TXBUFSZ >> 8), 0x00, /* bInterval: ignore for Bulk transfer */ /*Endpoint OUT Descriptor */ 0x07, /* bLength: Endpoint Descriptor size */ 0x05, /* bDescriptorType: Endpoint */ /**/0x07, /* bEndpointAddress OUT7 */ 0x02, /* bmAttributes: Bulk */ - (USB_TRBUFSZ & 0xff), /* wMaxPacketSize: 64 */ - (USB_TRBUFSZ >> 8), + (USB_RXBUFSZ & 0xff), /* wMaxPacketSize: 64 */ + (USB_RXBUFSZ >> 8), 0x00, /* bInterval: ignore for Bulk transfer */ /*---------------------------------------------------------------------------*/ }; @@ -749,18 +749,18 @@ static inline void std_d2h_req(){ // Rx and Tx handlers for EP1..EP7 static void rxtx_Handler(uint8_t epno){ - uint8_t buf[USB_TRBUFSZ]; + uint8_t buf[USB_RXBUFSZ]; int idx = epno - 1; uint16_t epstatus = KEEP_DTOG(USB->EPnR[epno]); - //uint16_t epstatus = USB->EPnR[epno]; if(RX_FLAG(epstatus)){ epstatus = (epstatus & ~(USB_EPnR_STAT_TX|USB_EPnR_CTR_RX)) ^ USB_EPnR_STAT_RX; // keep stat Tx & set valid RX, clear CTR Rx USB->EPnR[epno] = epstatus; - //USB->EPnR[epno] = (KEEP_DTOG(epstatus) & ~USB_EPnR_CTR_RX) ^ USB_EPnR_STAT_RX; uint8_t sz = EP_Read(epno, (uint8_t*)buf); + /* DBG("epno"); DBGmesg(u2str(epno)); DBGmesg(" ("); DBGmesg(u2str(sz)); DBGmesg(") > "); hexdump(DBG_IDX, buf, sz); DBGnl(); + */ if(sz){ switch(epno){ case USART1_EPNO: @@ -779,14 +779,10 @@ static void rxtx_Handler(uint8_t epno){ if(RB_write((ringbuffer*)&rbin[idx], buf, sz) != sz) bufovrfl[idx] = 1; } } - /*if(epno != DBG_EPNO){ - MSG(); - }*/ // set ACK Rx USB->EPnR[epno] = (KEEP_DTOG(USB->EPnR[epno]) & ~(USB_EPnR_STAT_TX)) ^ USB_EPnR_STAT_RX; }else{ USB->EPnR[epno] = (epstatus & ~(USB_EPnR_STAT_TX|USB_EPnR_CTR_TX)) ^ USB_EPnR_STAT_RX; // clear TX ctr - //USB->EPnR[epno] = (KEEP_DTOG_STAT(epstatus) & ~(USB_EPnR_CTR_TX)); // clear TX ctr send_next(idx); } } @@ -800,8 +796,8 @@ static inline void std_h2d_req(){ case SET_CONFIGURATION: // Now device configured configuration = setup_packet->wValue; - for(uint8_t i = 1; i <= WORK_EPs; ++i){ - EP_Init(i, EP_TYPE_BULK, USB_TRBUFSZ, USB_TRBUFSZ, rxtx_Handler); + for(uint8_t i = 1; i <= MAX_EPNO; ++i){ + EP_Init(i, EP_TYPE_BULK, USB_TXBUFSZ, USB_RXBUFSZ, rxtx_Handler); } break; default: diff --git a/F3:F303/Seven_CDCs/usbhw.h b/F3:F303/Seven_CDCs/usbhw.h index 51457ae..cac8ecf 100644 --- a/F3:F303/Seven_CDCs/usbhw.h +++ b/F3:F303/Seven_CDCs/usbhw.h @@ -30,9 +30,10 @@ //#define USB_EP0_BASEADDR 64 // for USB FS EP0 buffers are from 8 to 64 bytes long // For STM32F303CBT6 ACCESSZ=2, so real available buffers size for all EPs = only 192 bytes (128 - EP0) -#define USB_EP0_BUFSZ 64 -// USB transmit/receive buffer size -#define USB_TRBUFSZ 4 +#define USB_EP0_BUFSZ 16 +// USB transmit/receive buffer size; RXBUFSZ>=8 !!! +#define USB_RXBUFSZ 14 +#define USB_TXBUFSZ 8 // EP1 - interrupt - buffer size #define USB_EP1BUFSZ 8 diff --git a/F3:F303/Seven_CDCs/version.inc b/F3:F303/Seven_CDCs/version.inc index 75bf78b..c982bd1 100644 --- a/F3:F303/Seven_CDCs/version.inc +++ b/F3:F303/Seven_CDCs/version.inc @@ -1,2 +1,2 @@ -#define BUILD_NUMBER "102" +#define BUILD_NUMBER "122" #define BUILD_DATE "2023-04-29"