Rpi Pico Usb device mode

Arco

Special Member

Zijn de USB descriptors ook goed ingevuld? (anders krijg je ook problemen)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Arco, met bovenstaand programma heb je "alles", de rest zit in de library die in de SDK zit.

Je zou het niet geloven maar ....

Klopt. Ik geloof het niet.

Je test verkeerd. Misschien ligt het aan je host computer, maar in ieder geval niet aan de pico.

Hoe compileer je ? Ik gebruik geen Visual studio maar de commandline.

Right. Ik ook

Bij de installatie op de pc heb de Getting Started gevolgd.

Ik ook

Ik overweeg alle bestanden te verwijderen en opnieuw te installeren.

Dat is een windows-oplossing: retry, reboot, reinstall. Ik doe daar niet aan mee.

Edit: Dat je compiler stuk is en werkende-maar-langzaam code genereert gaat er bij mij ook niet in. Bijgevoegd m'n binary.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Eduard2

Golden Member

Dag rew,

Eerst het goede nieuws. De pc en de pico zijn niet defect. Uw binary is 30 keer sneller dan mijn code. In minder dan 33 seconden werd 10 MByte verzonden. Dat is meer dan schitterend.

Intussen heb ik alle oude bestanden van de pc verwijderd en opnieuw geïnstalleerd. Mijn nieuwste binary blijft even traag. Behalve de CMakeLists.txt file hebben we nu ongeveer alles uitgesloten. De kans is groot dat de fout daar zit. Dit is de verdachte file:

cmake_minimum_required(VERSION 3.13)
include(pico_sdk_import.cmake)
project(test_project C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
pico_sdk_init()
add_executable(test2
test2.c
)

pico_enable_stdio_usb(test2 1)
pico_add_extra_outputs(test2)
target_link_libraries(test2 pico_stdlib)
------------------------------------------

Ik begrijp lang niet alle details van deze file. De file werd aangemaakt naar analogie met de aangeleverde voorbeelden.

Hartelijk dank voor uw hulp.

Vriendelijke groeten,

Eduard

In de hello_world/usb directory vind ik CMakeLists.txt:

code:

if (TARGET tinyusb_device)
    add_executable(hello_usb
            hello_usb.c
            )

    # Pull in our pico_stdlib which aggregates commonly used features
    target_link_libraries(hello_usb pico_stdlib)

    # enable usb output, disable uart output
    pico_enable_stdio_usb(hello_usb 1)
    pico_enable_stdio_uart(hello_usb 0)

    # create map/bin/hex/uf2 file etc.
    pico_add_extra_outputs(hello_usb)

    # add url via pico_set_program_url
    example_auto_set_url(hello_usb)
elseif(PICO_ON_DEVICE)
    message(WARNING "not building hello_usb because TinyUSB submodule is not initialized in the SDK")
endif()

De directory daarboven vind ik:

code:

add_subdirectory(serial)
add_subdirectory(usb)

en daarboven:

code:


cmake_minimum_required(VERSION 3.12)

# Pull in SDK (must be before project)
include(pico_sdk_import.cmake)

project(pico_examples C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

set(PICO_EXAMPLES_PATH ${PROJECT_SOURCE_DIR})

# Initialize the SDK
pico_sdk_init()

include(example_auto_set_url.cmake)
# Add blink example
add_subdirectory(blink)

# Add hello world example
add_subdirectory(hello_world)

add_compile_options(-Wall
        -Wno-format          # int != int32_t as far as the compiler is concerned because gcc has int32_t as long int
        -Wno-unused-function # we have some for the docs that aren't called
        -Wno-maybe-uninitialized
        )

# Hardware-specific examples in subdirectories:
add_subdirectory(adc)
add_subdirectory(clocks)
add_subdirectory(cmake)
add_subdirectory(divider)
add_subdirectory(dma)
add_subdirectory(flash)
add_subdirectory(gpio)
add_subdirectory(i2c)
add_subdirectory(interp)
add_subdirectory(multicore)
add_subdirectory(picoboard)
add_subdirectory(pio)
add_subdirectory(pwm)
add_subdirectory(reset)
add_subdirectory(rtc)
add_subdirectory(spi)
add_subdirectory(system)
add_subdirectory(timer)
add_subdirectory(uart)
add_subdirectory(usb)
add_subdirectory(watchdog)

Dit alles heb ik me nog niet in verdiept. Allemaal chinees voor mij. (alhoewel ik redelijk snel de bedoeling van "add_subdirectory(pwm)" kan bedenken)

Ik heb nergens aangezeten, dit wordt zo in de "pico-examples" gedistribueerd.

Dus bovenstaand bestand kan je vinden:
https://github.com/raspberrypi/pico-examples/blob/master/CMakeLists.tx…
(downloaden met de "raw" link rechtsboven).

Edit: Oh! die "-Wno-maybe-uninitialized" moet er uit wat mij betreft: die vangt zo nu en dan bugs bij mij. Bijvoorbeeld een tak A en B van een IF waarbij in de eerste instantie alleen tak A een variabele gebruikt. Die initializeer je dan netjes op 0 en dan ga je hem gebruiken. Om dingen bij mekaar te houden, doe je dat binnen tak-A. Als je nu later iets toevoegt dat je die variabele ook gebruikt in tak B...

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Eduard2

Golden Member

Dag rew,

We zijn er! 10MByte in circa 30 seconden. Knap werk, bedankt voor uw hulp.

Ten gerieve van eventuele andere lezers vat ik de essentie van het verhaal samen. Ik maakte de fout van bij de eerste kennismaking met "getting started with pico .." te vlug naar hoofdstuk 8 (het schrijven van een eigen C programma) over te stappen. Het lukte wat gpio en pwm te programmeren. Ook simpele berichtjes via USB lezen en schrijven lukte direct.

Zelf maak ik nooit met grote projecten. make en cmake heb ik enkel gebruikt bij installatie van software. Ze werden door anderen geschreven en ik begrijp lang niet alles wat in die files staat. Door direct over te stappen naar het schrijven van een eigen programma mist de compiler informatie die in verschillende (c)make files is verstopt.

Mijn tweede fout was te bouwen op de voorbeelden uit de USB map in pico-examples. Dat was niet nodig. Uw vertrekpunt vanuit "hello_world" is beter.

Moraal van het verhaal: Als pico beginner is het best te vertrekken vanuit de hele structuur van het voorbeeld dat best op de te programmeren code lijkt. Op die manier neem je heel de boom met hulpbestanden mee.

Omdat het forum zo goed heeft geholpen ga ik straks de navigatiebalk aan de linkerkant van het scherm opzoeken, de rubriek boven "Feedback".

Iedereen bedankt voor de gekregen hulp,

Vriendelijke groeten;

Eduard

Maar nu wil ik hiervan leren wat er in jou cmake files verkeerd was om het zo langzaam te krijgen. Mijn theorie dat je te veel aparte write calls genereert is dus kennelijk niet juist. Dan wil ik leren wat ik moet herkennen in de cmakefile als: "dat is de fout die eduard heeft gemaakt waardoor het langzaam wordt".

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Eduard2

Golden Member

Dag rew,

"De opgebouwde ervaring is evenredig met de hoeveelheid afgedankt materiaal" blijft nog steeds van toepassing. In ons geval is het afgedankt materiaal virtueel; een hoop bitjes en tijd.

Niet enkel de (c)make files verschillen maar ook de hierarchie der mappen is anders. De structuur van het Hello_Usb gaat een niveau dieper dan de eenvoudiger Blink. De (c)make files zijn niet enkel anders, er zijn er ook meer.

Als je mijn niet werkend programma wil samenstellen dan volg je de instructies van hoofdstuk 8 uit “Getting started”. De foute CmakeLists.txt staat in een vorige bijdrage. Op die manier kom je tot een langzame usb verbinding. De map waarin ik werkte noemde “test2” en die stond naast “pico-examples” en “pico-sdk”. Als het je helpt dan neem je via mail direct contact en dan stuur ik de zip van de betreffende mappen.

Vriendelijke groeten,

Eduard

Ik heb er werk in gestoken om jou probleem te debuggen. Inderdaad je hebt voldoende informatie gegeven dat ik zou moeten kunnen reproduceren dat ik ook een "langzaam" programma krijg.

Ik had gehoopt dat je mij een plezier zou kunnen doen door uit te zoeken wat er nu precies uitmaakt.

Mijn "compiler-en-programmeer-kennis" vertelt me dat in welke directory je de sources zet niet uit hoort te maken. Dus als ik naast mijn pico-examples directory een "hello-rew" directory aanmaak en daar de cmake stuff inzet die "cmake" tegenkomt als ie de hierarchie doorloopt bij mijn aangepaste voorbeeld, dan zou ik gewoon een identiek snel test-programma moeten krijgen.

Dus volgens mijn aannames kan het niet aan bepaalde dingen liggen. Maar dit soort foutzoeken wordt altijd zeer bemoeilijkt door aannames die fout blijken te zijn.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Eduard2

Golden Member

Beste rew

Met plezier maak ik een "hello-rew" map naast de examples. Ik zal starten met daarin een CMakeLists.txt die alles bevat uit het snel werkend voorbeeld.

Als dat langzaam blijkt te werken dan verneem je dat via deze draad.

Werkt het snel dan ga ik de files uitdunnen tot het moment dat de snelheid zakt.

Ik hou je op de hoogte.

edit 20h40: Na een dagje proberen en herstarten staan 2 zipfiles voor u klaar. Hoe krijg ik die bij u ? De eerste bevat een map rew-examples. Dat is de eenvoudigste snel werkende verbinding. Unzippen en onder pico zetten en het zou moeten werken. Alles wat voor deze toepassing niet nodig was heb ik verwijderd. Mogelijk kan je nog verder uitdunnen.

De andere zip file is de traag werkende versie. Ook te plaatsen direct onder pico.

Verder vereenvoudigen lukt me niet omdat ik de instructies in de cmake en make niet altijd begrijp.

Vriendelijke groeten,

Eduard

[Bericht gewijzigd door Eduard2 op maandag 14 juni 2021 20:53:19 (38%)