Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

STM32 i połączenie USB OTG ze smartfonem

rezontor 16 Kwi 2015 15:17 1548 10
  • #1 16 Kwi 2015 15:17
    rezontor
    Poziom 15  

    Witam.

    Chciałbym połączyć mikrokontroler STM32F429 z smartfonem, działającym pod kontrolą androida. Celem tego połączenia ma być przesyłanie danych (a dokładnie obrazków jpeg) między mikrokontrolerem, a smartfonem.

    Mikrokontroler będzie obrazki generował i zapisywał w zewnętrznej pamięci RAM. Jeden obrazek będzie miał ok. 400kB. Trzeba będzie przesyłać 2 takie obrazki do telefonu w ciągu sekundy, co daje transfer ok. 1MB/s.

    Chciałbym do tego celu wykorzystać USB OTG. Mikrokontroler posiada sprzętową obsługę tego standardu. Pracowałby jako układ SLAVE - HOSTEM byłby telefon.

    Zastanawiam się teraz, w jaki sposób mógłbym zrealizować taka komunikację. Do głowy przyszedł mi USB Virtual COM Port (VCP), do którego biblioteki na STMa znalazłem tutaj:

    http://stm32f4-discovery.com/2014/08/library-24-virtual-com-port-vcp-stm32f4xx/

    Nie wiem tylko, czy przy pomocy takiej metody jestem w stanie skutecznie osiągnąć 8Mb/s transferu do smartfona... Podobno są problemy z profilem VCP w Androidzie.

    Może są jakieś lepsze rowiązania?

    0 10
  • Pomocny post
    #2 16 Kwi 2015 16:12
    BlueDraco
    Specjalista - Mikrokontrolery

    Telefon jest typowo urządzeniem (device) USB, a nie hostem. Szukaj w sieci hasła "Android accessory".

    1
  • #3 16 Kwi 2015 16:44
    rezontor
    Poziom 15  

    BlueDraco napisał:
    Telefon jest typowo urządzeniem (device) USB, a nie hostem.

    A czy nie jest tak, że najnowsze modele telefonów i wersje Androida obsługują tryb hosta (przeważnie można podłączyć do telefonu urządzenia HID lub pamięci masowe)?

    0
  • Pomocny post
    #5 18 Kwi 2015 11:15
    gaskoin
    Poziom 38  

    BlueDraco napisał:
    Telefon jest typowo urządzeniem (device) USB, a nie hostem. Szukaj w sieci hasła "Android accessory".


    Od wersji 3.1 może być także hostem. Android obsługuje przecież pendrivy, modemy, gpsy, klawiatury, myszki itd. Od wersji 2.3.4 jest wspierane accesory, więc to zależy jakie wersje chcesz wspierać :) Wszelakie info masz tutaj https://developer.android.com/guide/topics/connectivity/usb/index.html

    rezontor napisał:
    Czyli taka biblioteka załatwi sprawę na stm429 https://github.com/YuuichiAkagawa/STM32F4_ADK ? Jaką szybkosc transmisji mogę osiągnąć?


    Potestuj :)

    0
  • #6 18 Kwi 2015 13:20
    rezontor
    Poziom 15  

    Android będzie w wersji > 4.0, więc powinien miec zaimplementowaną funkcję hosta. Ogólnie to lepiej jest, aby rozwiązać problem przy pomocy http://stm32f4-discovery.com/2014/08/library-24-virtual-com-port-vcp-stm32f4xx/ (VIRTUAL PORT COM; telefon z androidem to host), czy

    https://github.com/YuuichiAkagawa/STM32F4_ADK (Android Open Accessory(ADK) firmware for STM32F4-Discovery - stm32f429 to host )? Chodzi mi głównie o to, że mikrokontroler będzie obrazki generował i zapisywał w zewnętrznej pamięci RAM. Jeden obrazek będzie miał ok. 400kB. Trzeba będzie przesyłać 2 takie obrazki do telefonu w ciągu sekundy, co daje transfer ok. 1MB/s.

    Chciałbym do tego celu wykorzystać USB OTG.

    0
  • Pomocny post
    #7 18 Kwi 2015 13:50
    gaskoin
    Poziom 38  

    Android w trybie accesory dziala jako device więc stm musi być hostem. Nie możesz użyć wirtualnego portu szeregowego bo to nie jest żaden standardowy protoków a po stronie Androida nie masz sterowników do obsługi VCP napisanego przez STM :) Z tego co kojarzę, to standardowo da się obsłużyć VCP z układu FTDI, ale wymaga to od Ciebie zakupienia dodatkowego układu.

    Jeśli chcesz się komunikować z Androidem jako Accessory to musisz użyć tego http://source.android.com/accessories/ protokołu i nie ma zmiłuj :)

    1
  • #8 18 Kwi 2015 16:39
    rezontor
    Poziom 15  

    Rozumiem, dziękuję za pomoc. Mam jeszcze pytanie odnośnie późniejszej współpracy mikrokontrolera stm32f429, pracującego w trybie Android Open Accessory(ADK), z innymi urządzeniami - np. smartfonami nie z Androidem, a np. Windows Phone. Czy taka współpraca będzie możliwa?

    0
  • #9 21 Kwi 2015 04:23
    rezontor
    Poziom 15  

    gaskoin napisał:
    Czyli taka biblioteka załatwi sprawę na stm429 https://github.com/YuuichiAkagawa/STM32F4_ADK ? Jaką szybkosc transmisji mogę osiągnąć?


    Potestuj :)


    Okazuje się, że biblioteka jest błędna i nie działa. Czy może są jakieś inne źródła, gdzie mógłbym znaleźć prawidłową bibliotekę?

    0
  • Pomocny post
    #10 21 Kwi 2015 09:00
    tantalos1
    Poziom 15  

    rezontor napisał:

    Chodzi mi głównie o to, że mikrokontroler będzie obrazki generował i zapisywał w zewnętrznej pamięci RAM. Jeden obrazek będzie miał ok. 400kB. Trzeba będzie przesyłać 2 takie obrazki do telefonu w ciągu sekundy, co daje transfer ok. 1MB/s.

    Chciałbym do tego celu wykorzystać USB OTG.


    Możesz wykorzystać do tego celu klasę USB Mass storage, każdy smartfon to obsługuje bez dodatkowych kombinacji.

    0
  • #11 21 Kwi 2015 12:42
    rezontor
    Poziom 15  

    tantalos1 napisał:
    Możesz wykorzystać do tego celu klasę USB Mass storage, każdy smartfon to obsługuje bez dodatkowych kombinacji.

    W związku z tą klasą znalazłem cos takiego: http://www.keil.com/download/docs/362.asp

    Tylko pytanie, w jaki sposób będę mógł obsługiwać taką klasę od strony Androida? Czy będę mógł komunikować się w prosty sposób między STM32 a telefonem?

    Dodano po 30 [minuty]:

    Bo znalazłem jeszcz etakie chipy FTDI - http://www.tme.eu/pl/Document/8663d82e8b04588abbeaf6c5e3add23f/DS_FT221X.pdf . Może to jest lepsze i bardziej uniwersalne rozwiązanie? Wtedy urządzenie będzie mogło pracować z komuterem, dowolnym smartfonem itd...

    0