Hi Dave, Attached please find the low level driver I used. This is a bit modified driver based on inputs I found over the net.
Try to use it and see if it is better for you. BR, Noam. -----Original Message----- From: lwip-users-bounces+noam=silrd....@nongnu.org [mailto:lwip-users-bounces+noam=silrd....@nongnu.org] On Behalf Of Dave Sandl Sent: Tuesday, January 28, 2014 5:10 AM To: lwip-users@nongnu.org Subject: [lwip-users] lwip with fatfs on a STM32 speed problem Hi, I am having problems getting good speed results on sending files using a stm32 with fatfs files system. I can only get max of around 2.5kBs on a image download. My server and file system seem to work fine, here are the specs STM32F4discovery with the ethernet/sdcard baseboard from element14 I used the ST supplied drivers for both lwip and fatfs to create a raw api basic server. Here is the relevant code sections, any help would be appreciated. If I increase the sd_read_buff to 1024 or higher is does not send the file correctly (not sure what to do here or if it should be bigger?) #define sd_read_buff 512 struct http_state { FIL fileFS; char *file; u32_t left; uint8_t buff[sd_read_buff]; }; static void send_data(struct tcp_pcb *pcb, struct http_state *hs) { err_t err; FRESULT ret; u16_t len; uint br; uint temp1 = tcp_sndbuf(pcb); if(tcp_sndbuf(pcb) < sd_read_buff) len = tcp_sndbuf(pcb); else { if(hs->left < sd_read_buff) len = hs->left; else len = sd_read_buff; } ret = f_read(&hs->fileFS, hs->buff, len, &br); if(ret == FR_OK){ err = tcp_write(pcb, hs->buff, br, 0); if (err == ERR_OK) { if(br < len) hs->left = 0; else hs->left -= br; } } } static err_t http_sent(void *arg, struct tcp_pcb *pcb, u16_t len) { struct http_state *hs; hs = arg; if (hs->left > 0) { send_data(pcb, hs); } else { f_close(&hs->fileFS); close_conn(pcb, hs); } return ERR_OK; } static err_t http_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) { int32_t len=0; char *data; struct http_state *hs; hs = arg; if (err == ERR_OK && p != NULL) { /* Inform TCP that we have taken the data */ tcp_recved(pcb, p->tot_len); if (hs->file == NULL) { data = p->payload; len = p->tot_len; /* process HTTP GET requests*/ if (strncmp(data, "GET /index.htm", 10) == 0) { FIL file; FRESULT ret; hs->fileFS = file; ret = f_open(&hs->fileFS, "index.htm", FA_READ); if(ret == FR_OK) { pbuf_free(p); // Free the receive data hs->left = f_size(&hs->fileFS); send_data(pcb, hs); tcp_sent(pcb, http_sent); } else { tcp_write(pcb, file_error, sizeof(file_error), 0); pbuf_free(p); close_conn(pcb, hs); } } else if (strncmp(data, "GET /pic.jpg", 12) == 0) { FIL file; FRESULT ret; hs->fileFS = file; ret = f_open(&hs->fileFS, "pic.jpg", FA_READ); if(ret == FR_OK) { pbuf_free(p); // Free the receive data hs->left = f_size(&hs->fileFS); send_data(pcb, hs); tcp_sent(pcb, http_sent); } else { tcp_write(pcb, file_error, sizeof(file_error), 0); pbuf_free(p); close_conn(pcb, hs); } } else { tcp_write(pcb, http_index_html, sizeof(http_index_html), 0); pbuf_free(p); close_conn(pcb, hs); } } else { pbuf_free(p); close_conn(pcb,hs); } } if (err == ERR_OK && p == NULL) { close_conn(pcb, hs); } return ERR_OK; } void IAP_httpd_init(void) { struct tcp_pcb *pcb; /*create new pcb*/ pcb = tcp_new(); if (!pcb) { return ; } /* bind HTTP traffic to pcb */ tcp_bind(pcb, IP_ADDR_ANY, 80); /* start listening on port 80 */ pcb = tcp_listen(pcb); /* define callback function for TCP connection setup */ tcp_accept(pcb, http_accept); } _______________________________________________ lwip-users mailing list lwip-users@nongnu.org https://lists.nongnu.org/mailman/listinfo/lwip-users ************************************************************************ ************ This footnote confirms that this email message has been scanned by PineApp Mail-SeCure for the presence of malicious code, vandals & computer viruses. ************************************************************************ ************ ************************************************************************************ This footnote confirms that this email message has been scanned by PineApp Mail-SeCure for the presence of malicious code, vandals & computer viruses. ************************************************************************************
FreeRTOS.rar
Description: FreeRTOS.rar
_______________________________________________ lwip-users mailing list lwip-users@nongnu.org https://lists.nongnu.org/mailman/listinfo/lwip-users