STM32F103C8 Keil deneme surumunde calisacak CDC ornek

Başlatan z, 14 Haziran 2021, 11:58:02

z

https://www.silabs.com/documents/public/application-notes/AN758.pdf

2. sayfada aradigim cevabi buldum fakat bu tip bilgilere 3. parti kaynaklardan degil de USB kurulusunun kendi dokumanlarindan ulasabilmek lazim.

0x20 = SET_LINE_CODING
0x21 = GET_LINE_CODING
0x22 = SET_CONTROL_LINE_STATE
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Tagli

Bir ara bu CDC ile seri port meselesini ben de araştırmıştım ama derli toplu güzel bir doküman bulamadım. Bir ihtimal, bu konuda kesin bir standart olmayabilir. Çünkü düşünsene, bilgisayara bağladığın çipin markasına ve modeline göre (FTDI, Prolific, CH340G vs.) ayrı sürücüler yüklenmesi gerekiyor. Eğer hepsi aynı şekilde konuşsaydı sürücü yüklemeye gerek kalmazdı bence.

Bir de ACM diye bir şey var. Tam ne olduğunu çözemedim ama konu ile ilgili bir gözüküyor. Sanki bir çeşit standart sanal seri port protokolü gibi. Eğer bilgisayar tarafından varsayılan olarak destekleniyorsa buna odaklanmak mantıklı olabilir.
Gökçe Tağlıoğlu

z

CDC icin surucu gerekmiyor. Eger cihaz Vendor spesific olursa gerekiyordur.

ACM ile su siralar ugrasiyorum zaten.

Bilgilerim netlesince aciklarim.

Su anda ugrastigim CDC de PID ve VID ST nin kendi orneklerindeki degerleriydi. Bunlari 0 ve 5 yaptim. Boylelikle PC kullandigim cipin ST olup olmadigini artik bilmiyor. Fakat CDC hala sistem tarafindan taniniyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

HOST, Interface desriptoru istediginde interface'in CDC sinifi oldugunu ogrendiginde, SubClass'in da ACM (Abstract Control Model) oldugunu ogrendiginde, protokolun de AT command oldugunu ogrendiginde driver falan istemeden seri iletisim yapabiliyor.

Dolayisi ile hangi cipi kullanirsaniz kullanin, yapiyi bu sekilde kurarsaniz driver ihtiyaci ortadan kalkiyor.

Durum bunu gosteriyor ama kesin bilgi degil bu.

Su anda PC,  baud rate, parity, stopbit vs vs degistirebiliyor, yada tersine set edilmis degerleri okuyabiliyor. Henuz data alma gonderme yok. Su haliye program 3752 Byte yer kapladi. 4 K dan daha az bir kod alaninda bu is bitecek.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Simdiki sorunum biraz ilginc.

CDC cihazim windows tarafindan Com15 olarak gorunuyor.

Echo 12345>Com15 dedigimde HDD'de Com15 adinda bir dosya olusturup icine 12345 yaziyor.

Halbuki 12345 verilerinin Com15 portuna yonlenmesi lazim.

Yorum yapacak var mi?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Tagli

Gökçe Tağlıoğlu

z

Ben de anlamadim. Com reserve edilmis kelimelerden.

echo xxxx>COMn

n=1..9'a kadar kiziyor 10 ve ustune kizmiyor ve dosya olusturuyor.

Benim cihazin com numarasi da 15 olunca terslik oluyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

ST nin CDC ornegini inceleyip kendi yazilimimi olusturmustum.
Simdi bu yazilimi biraz daha basitlestirmeye calisiyorum.

Bir sey dikkatimi cekti.

EP0 In ve Out zaten kontrol transferi icin kullaniliyor.

Descriptor tablolarinda proje icin 3 tane End Point kullanilacagi belirtilmis.

ST bunlara Ep1, Ep2 ve Ep3 demis.

End Pointlerler icin 0x82, 0x81 ve 0x03 kullanmis.

0x01, 0x81 ve 0x82 varken neden boyle yapmis anlamadim.

ST islemcide her bir endpoint numarasi hem in hem out olabiliyor.

Yani 0 nolu endpoint control icin kullanilirken buraya PC den gelen sorgular geliyor ve gene 0 dan cevap verebiliyoruz.
Ayni sekilde EP1 hem in hem out olabiliyor.

8 tane EndPoint registerimiz var. Bu bizim 16 endpointimiz oldugu anlamina gelmiyor mu?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Yuunus

hocam neyin pesindesin bilmiyorum ama eski bir hid uygulamamin usbconf dosyasinda bu sekilde tanimlamis belki isine yarar
/**
  ******************************************************************************
  * @file    usbd_conf.h
  * @author  MCD Application Team
  * @version V1.0.0
  * @date    19-September-2011
  * @brief   USB Device configuration file
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __USBD_CONF__H__
#define __USBD_CONF__H__

/* Includes ------------------------------------------------------------------*/
#include   "stm32f4_discovery.h"

/** @defgroup USB_CONF_Exported_Defines
  * @{
  */ 


#define USBD_CFG_MAX_NUM           1
#define USBD_ITF_MAX_NUM           1

#define USB_MAX_STR_DESC_SIZ       64



#define USBD_DYNAMIC_DESCRIPTOR_CHANGE_ENABLED 

/** @defgroup USB_String_Descriptors
  * @{
  */ 


/** @defgroup USB_HID_Class_Layer_Parameter
  * @{
  */ 
#define HID_IN_EP                    0x81
#define HID_OUT_EP                   0x01

#define HID_IN_PACKET                64
#define HID_OUT_PACKET               64

/**
  * @}
  */ 
/** @defgroup USB_CONF_Exported_Types
  * @{
  */ 
/**
  * @}
  */ 


/** @defgroup USB_CONF_Exported_Macros
  * @{
  */ 
/**
  * @}
  */ 

/** @defgroup USB_CONF_Exported_Variables
  * @{
  */ 
/**
  * @}
  */ 

/** @defgroup USB_CONF_Exported_FunctionsPrototype
  * @{
  */ 
/**
  * @}
  */ 


#endif //__USBD_CONF__H__

/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/

z

USB organizasyonunun tanimladigi End Pointlerle STM32 nin USB End Point registerlerinin numaralandirilmasi arasinda kafa karisikligim var.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Tagli

USB-IF endpoint numarası tanımlamaz. Sadece mesela der ki "Mass storage class'ı için 1 adet Bulk-OUT, bir adet de Bulk-IN gerekiyor". Sen istediğin numaraları kullanırsın. İster EP1-OUT ile EP1-IN kullan, ister EP2-IN ile EP4-OUT kullan, keyfine kalmış. Interface descriptor'ında hangi endpointleri kullandığını listeliyorsun zaten.
Gökçe Tağlıoğlu

z

Evet dedigin gibi mevcut uygulamada gereksiz EP registerleri kaldirip zaten sadece in olanlarin outlari yada tersini yaparak daha az RP Reg kullanarak CDC uygulamami calistirdim.

Henuz denemedim ama Ep1, Ep2 gibi reglere ayrica sen su ep sin gibi tanim yapilabiliyor. Ben Ep1 e sen End Point 1 sin 2 isen End Point 2 sin yaziyordum. Bunlari da mesela Ep1 Regin en dusuk bit alanina 2 yazarsak sen Ep1 regsin ama EndPoint 2 sin diyebiliriz. Bunu da ilk firsatta deneyecegim.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com