Op 9 juni 2021 11:52:03 schreef deKees:
USB werkt met pakketten data. Max 1 pakket per milliseconde. De max data hangt af van het soort transfer. Een TTY werkt met interrupt transfers, die op USB1.1 full speed (12Mbit) een max payload hebben van 64 byte. Met 1 Packet per milliseconde zit je dan vast aan 64Kb max per seconde.
Dat klopt kennelijk niet, want ik haal 153kb/sec.
code:
getafix:~> time cat test123.dat > /dev/ttyACM1
0.012u 0.000s 0:07.15 0.1% 0+0k 0+0io 0pf+0w
getafix:~> wc test123.dat
10000 20000 1100000 test123.dat
getafix:~> bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1100000/07.15
153846.15384615384615384615
Dit is met een STM32F072 als target, dus het zegt niet dat het met een PICO zo hard kan, maar ik verwacht van wel. De pico CPU is 1 tikje moderner (M0+ ipv M0) en bijna 3x sneller (133 ipv 48MHz).
Eduard,
Je gebruikt nogal slechte methodes om throguhput te testen. Het zou best kunnen dat je systeem vindt dat een fputs naar het device "serial port" direct verstuurd moet worden, dus dat ie regelt dat er direct een "100 byte string" verstuurd wordt. Dat zou dan een 64+36 byte pakket worden, waarbij de rest van het 36-byte-pakket ineens geen mogelijkheid meer voor is om dat te benutten.
Daarnaast je testprogramma bevat een essentiele fout.
Ik snap niet dat je compiler er mee accoord gaat, maar je bedoel waarschijnlijk:
eenstr = '1';
waar nu
eenstr = '1';
staat. Daarnaast moeten die strings afgesloten worden. Op zijn minst:
eenstr[99] = '\0';