Test performance USB + SD

This commit is contained in:
Samuel 2025-07-19 12:56:07 +02:00
parent ea82637e99
commit 22fe6de668
3 changed files with 34 additions and 17 deletions

View File

@ -36,7 +36,7 @@ specific language governing permissions and limitations under the License.
DSTATUS SDIO_disk_status(BYTE pdrv /* Physical drive number to identify the drive */
) {
TRACE_PRINTF(">>> %s\n", __FUNCTION__);
// TRACE_PRINTF(">>> %s\n", __FUNCTION__);
sd_card_t *sd_card_p = sd_get_by_num(pdrv);
if (!sd_card_p) return RES_PARERR;
sd_card_detect(sd_card_p); // Fast: just a GPIO read
@ -50,7 +50,7 @@ DSTATUS SDIO_disk_status(BYTE pdrv /* Physical drive number to identify the driv
DSTATUS SDIO_disk_initialize(
BYTE pdrv /* Physical drive number to identify the drive */
) {
TRACE_PRINTF(">>> %s\n", __FUNCTION__);
// TRACE_PRINTF(">>> %s\n", __FUNCTION__);
bool ok = sd_init_driver();
if (!ok) return RES_NOTRDY;
@ -96,7 +96,7 @@ DRESULT SDIO_disk_read(BYTE pdrv, /* Physical drive number to identify the driv
LBA_t sector, /* Start sector in LBA */
UINT count /* Number of sectors to read */
) {
TRACE_PRINTF(">>> %s\n", __FUNCTION__);
// TRACE_PRINTF(">>> %s\n", __FUNCTION__);
sd_card_t *sd_card_p = sd_get_by_num(pdrv);
if (!sd_card_p) {
TRACE_PRINTF("Error: !sd_card_p, pdrv: %d\n", pdrv);
@ -117,7 +117,7 @@ DRESULT SDIO_disk_write(BYTE pdrv, /* Physical drive number to identify the driv
LBA_t sector, /* Start sector in LBA */
UINT count /* Number of sectors to write */
) {
TRACE_PRINTF(">>> %s\n", __FUNCTION__);
// TRACE_PRINTF(">>> %s\n", __FUNCTION__);
sd_card_t *sd_card_p = sd_get_by_num(pdrv);
if (!sd_card_p) return RES_PARERR;
int rc = sd_card_p->write_blocks(sd_card_p, buff, sector, count);
@ -134,7 +134,7 @@ DRESULT SDIO_disk_ioctl(BYTE pdrv, /* Physical drive number (0..) */
BYTE cmd, /* Control code */
void *buff /* Buffer to send/receive control data */
) {
TRACE_PRINTF(">>> %s\n", __FUNCTION__);
// TRACE_PRINTF(">>> %s\n", __FUNCTION__);
sd_card_t *sd_card_p = sd_get_by_num(pdrv);
if (!sd_card_p) return RES_PARERR;
switch (cmd) {

24
main.c
View File

@ -46,6 +46,9 @@ extern uint8_t tuh_max3421_reg_read(uint8_t rhport, uint8_t reg, bool in_isr);
extern bool tuh_max3421_reg_write(uint8_t rhport, uint8_t reg, uint8_t data, bool in_isr);
#endif
// USB Log
void log_to_usb(const char * message);
//--------------------------------------------------------------------+
// SD CARD
//--------------------------------------------------------------------+
@ -103,7 +106,7 @@ sd_card_t* sd_get_by_num(size_t num) {
int main(void) {
board_init();
printf("TinyUSB Host CDC MSC HID Example\r\n");
printf("TinyUSB Host CDC MSC HID Example - test comparatif\r\n");
// init host stack on configured roothub port
tuh_init(BOARD_TUH_RHPORT);
@ -139,6 +142,18 @@ int main(void) {
}
const char buffer[]= "Ceci est le test de Poivron Robotique\n";
char big_big_buffer[0x10000]; // 16 ko
int size = 0;
big_big_buffer[0]= '\0';
while(size + strlen(buffer) < 0x10000){
strcat(big_big_buffer, buffer);
size += strlen(buffer);
}
while (1) {
// tinyusb host task
tuh_task();
@ -146,6 +161,9 @@ int main(void) {
led_blinking_task();
cdc_app_task();
hid_app_task();
log_to_sd(big_big_buffer);
log_to_usb(big_big_buffer); // à commenter pour obtenir un test juste sur la carte SD.(ou simplement ne pas brancher de clé USB)
}
}
@ -174,7 +192,7 @@ void tuh_umount_cb(uint8_t dev_addr) {
// Blinking Task
//--------------------------------------------------------------------+
void led_blinking_task(void) {
const uint32_t interval_ms = 1000;
const uint32_t interval_ms = 500;
static uint32_t start_ms = 0;
static bool led_state = false;
@ -202,5 +220,5 @@ void log_to_sd(const char * chaine){
f_sync(&fil_sdcard);
current_time = get_absolute_time();
printf("Ecrit: %d octets en %llu us\n", nb_char_written, current_time - start_time);
printf(">vitesse(Mo/s):%d:%.1f\n", i++, (float)(nb_char_written) / (float)(current_time - start_time));
printf(">sd(Mo/s):%d:%.3f\n", (int)(current_time/1000), (float)(nb_char_written) / (float)(current_time - start_time));
}

View File

@ -83,7 +83,6 @@ bool inquiry_complete_cb(uint8_t dev_addr, tuh_msc_complete_data_t const * cb_da
char big_buffer[0x1000]; // 4 ko
char big_big_buffer[0x10000]; // 16 ko
int nb_byte_written;
absolute_time_t current_time, start_time;
char filepath[50];
filepath[0] = drive_path[0];
filepath[1] = ':';
@ -113,14 +112,11 @@ bool inquiry_complete_cb(uint8_t dev_addr, tuh_msc_complete_data_t const * cb_da
size = 0;
big_big_buffer[0]= '\0';
while(size + strlen(buffer) < 0x10000){
strcat(big_buffer, buffer);
strcat(big_big_buffer, buffer);
size += strlen(buffer);
}
log_to_usb(big_big_buffer);
f_close(&fp);
printf("Fichier Poivron.txt cree avec succes\n");
return true;
@ -128,8 +124,9 @@ bool inquiry_complete_cb(uint8_t dev_addr, tuh_msc_complete_data_t const * cb_da
void log_to_usb(const char * message){
int nb_byte_written;
absolute_time_t current_time, start_time;
start_time = get_absolute_time();
static int i=0;
absolute_time_t current_time_us, start_time_us;
start_time_us = get_absolute_time();
FRESULT error;
if(file_accessible){
error = f_write(&fp, message, strlen(message), &nb_byte_written);
@ -138,8 +135,9 @@ void log_to_usb(const char * message){
return;
}
f_sync(&fp);
current_time = get_absolute_time();
printf("Ecrit: %d octets en %llu us\n", nb_byte_written, current_time - start_time);
current_time_us = get_absolute_time();
printf("Ecrit: %d octets en %llu us\n", nb_byte_written, current_time_us - start_time_us);
printf(">usb(Mo/s):%d:%f\n", (int) (current_time_us/1000), (float)(nb_byte_written) / (float)(current_time_us - start_time_us));
}
}
@ -155,6 +153,7 @@ void tuh_msc_mount_cb(uint8_t dev_addr)
void tuh_msc_umount_cb(uint8_t dev_addr)
{
file_accessible = false;
f_close(&fp);
(void) dev_addr;
printf("A MassStorage device is unmounted\r\n");
}