<ããŒããšããããã©ã³ä»ãã®ç»å>
ããã«äœãã¬ãã«ïŒavr-vusbïŒïŒ habr.com/ru/post/460815
ã¬ãžã¹ã¿äžã®USBïŒSTM32L1 / STM32F1
ã¬ãžã¹ã¿äžã®USBïŒã¬ãžã¹ã¿äžã®å€§å®¹éã¹ãã¬ãŒãž
USBã® äŸã䜿çšãããã«ã¯ãšã³ããã€ã³ãïŒå²ã蟌ã¿ãšã³ããã€ã³ãHIDã®äŸã«ã€ããŠ
仿¥ã¯ãæåŸã®ã¿ã€ãã®ãšã³ããã€ã³ãã§ããã¢ã€ãœã¯ããã¹ãèŠãŠã¿ãŸããããé ä¿¡æéã«éèŠãªããŒã¿ã転éããããã«èšèšãããŠããŸããããã®æåãä¿èšŒãããã®ã§ã¯ãããŸãããæãå žåçãªäŸã¯ãã¹ããŒã«ãŒããã€ã¯ãªã©ã®ãªãŒãã£ãªããã€ã¹ã§ãã
å¥åŠãªããšã«ããã®ã¿ã€ãã®ãšã³ããã€ã³ãã¯ãæãé ãæ©ãŸãããã®ã§ããããšã倿ããŸããïŒãããŠãããã¯ç§ãstm'kamiã§èŠããã¹ãŠã®åŸã§ãïŒïŒãããã§ãã仿¥ã¯ãªãŒãã£ãªããã€ã¹ãäœæãããšåæã«ãUSBã©ã€ãã©ãªã®ã³ã¢ããããã«å®æãããŸãããã€ãã®ããã«ããœãŒã¹ã³ãŒããå©çšå¯èœã§ãïŒ
github.com/COKPOWEHEU/usb/tree/main/4.Audio_L1
github.com/COKPOWEHEU/usb/tree/main/4.Audio_F1
ã«ãŒãã«ã®æ¹è¯
STMã¯ããã«ãããã¡ãªã³ã°ã®ã¢ã€ãœã¯ããã¹ãã€ã³ãããæãŠãªããããã«ãŒãã«ãæ¹è¯ããå¿ èŠããããŸããã€ãŸãã倧ãŸãã«èšãã°ã0x01ã¢ã€ãœã¯ããã¹ãš0x81å¶åŸ¡ãè¡ãããšã¯äžå¯èœã§ããã€ãŸãããã¡ãããããUSBèšè¿°åã«æžã蟌ãããšã¯å¯èœã§ãããããã«ãã£ãŠã³ã³ãããŒã©ãŒã®å éšã倿Žãããããšã¯ãªãããã€ã³ãã®å®éã®ã¢ãã¬ã¹ã¯å€éšããèŠããã¢ãã¬ã¹ãšã¯ç°ãªãã ãã§ãããã¡ãããããã¯ééãã®ãªã¹ã¯ãé«ããã®ã§ãç§ãã¡ã¯ãã®æ¹åã«åé¯ããããšã¯ãããŸããã
ããã«ãããã¡ãªã³ã°ã¯ãã¢ã€ãœã¯ããã¹ãã€ã³ãã ãã§ãªããã«ã¯ã§ãçºçãããªã³ãšåäœãç°ãªãããšã«æ³šæããŠãã ãããã¢ã€ãœã¯ããã¹ãã€ã³ããèªåçã«ãããã¡ãªã³ã°ãæå¹ã«ããå Žåããã以å€ã®æ¹æ³ã§ã¯ã§ããªããšããçç±ã ãã§ã察å¿ãããã«ã¯èšå®ã«ã¯ãå®éã®ãã€ã³ãã¿ã€ãèšå®ãšäžç·ã«èšå®ããå¿ èŠãããç¹å¥ãªUSB_EP_KINDãããã䜿çšããå¿ èŠããããŸãã
ãããã¡ãªã³ã°ãšã¯ã1ã€ã®ãã€ã³ããéä¿¡çšãšåä¿¡çšã®1ã€ã®ãããã¡ã«å¯Ÿå¿ããåã«ãäž¡æ¹ã®ãããã¡ãéä¿¡ãŸãã¯åä¿¡ã®ããããã§æ©èœãã飿ºããŠã®ã¿æ©èœããããšãæå³ããŸãããã®çµæããããã¡ãªã³ã°ããããã€ã³ãã®èšå®ã¯ã1ã€ã®ãããã¡ã§ã¯ãªãã2ã€ã®ãããã¡ãèšå®ããå¿ èŠããããããéåžžã®èšå®ãšã¯å€§ããç°ãªããŸãããããã£ãŠãäžèŠãªæ¡ä»¶ãéåžžã®åæåã«ã¹ã«ã«ããããã®ã§ã¯ãªããããã«åºã¥ããŠå¥ã®é¢æ°usb_ep_init_doubleïŒïŒãäœæããŸãã
ãã±ããã®éåä¿¡ã«ã¯ããã»ã©éãã¯ãããŸããããæåã«STããžãã¯ã«åŸã£ãŠã©ã®ããã«æ©èœããããçè§£ããæ¬¡ã«ã€ã³ã¿ãŒãããããã®ã¹ãã«ã調æŽããŠæ©èœãããã®ã«ããªãã®æéãããããŸãããåè¿°ã®ããã«ãéåžžã®ãã€ã³ãã®å Žåã2ã€ã®ãããã¡ãŒã¯ç¬ç«ããŠããã亀æã®æ¹åãç°ãªããŸãããããã¡ãŒããããããã¡ãŒã®å Žåããããã¯åãã§ããããªãã»ããã®ã¿ãç°ãªããŸããããã§ã¯ãusb_ep_write颿°ãšusb_ep_read颿°ãå°ã倿ŽããŠããã€ã³ãçªå·ã§ã¯ãªããªãã»ããçªå·ãåãå ¥ããããã«ããŸããã€ãŸãã以åã¯ãããã®é¢æ°ã8ã€ã®ããã«ãã€ã³ãã®ååšãæ³å®ããŠããå ŽåãçŸåšã¯16ã®ã·ã³ã°ã«ãã€ã³ãã§ãããããã£ãŠãæžã蟌ã¿çšã®æ°ãããããŒãã©ã€ã³ãã®æ°ã¯ãéåžžã®æ°ã«2ãæãããã®ã§ãããusb_ep_readã®å Žåã1ã远å ããå¿ èŠããããŸãïŒPMAã®ãããã¡ãŒã®å²ãåœãŠãåç §ïŒãå®ã¯ããã¯ãéåžžã®ãã€ã³ãã®ã€ã³ã©ã€ã³é¢æ°usb_ep_writeããã³usb_ep_readã«ãã£ãŠå®è¡ãããŸãããããããããã¡ãªã³ã°ãããããžãã¯ã詳ããèŠãŠã¿ãŸãããã
ããã¥ã¡ã³ãã«ãããšããã®ãããªãã€ã³ãã®1ã€ã®ãããã¡ãŒã¯ããŒããŠã§ã¢ã«äœ¿çšã§ãã2ã€ç®ã¯ãœãããŠã§ã¢ã«äœ¿çšã§ããŸãããã®åŸããããã¯åãæ¿ãããåã³äºãã«å¹²æžããŸããã OUTãã€ã³ãã®å ŽåãããŒããŠã§ã¢åŽã®ãã©ã°ã¯USB_EP_DTOG_RXãããã§ããããã¯ãæžã蟌ã¿ãå®äºããã°ããã®ãããã¡ãŒãšãœãããŠã§ã¢ãèªã¿åãããšãã§ããå Žæãããããçè§£ããããã«èªã¿åãå¿ èŠããããŸãã圌ããããã¡ãèªã¿åããšããå®éã«ãããã¡ãåãæ¿ããUSB_EP_DTOG_TXãããããžã£ãŒã¯ããå¿ èŠããããŸãããããæå³ãããã®ãã©ããã¯ããããŸããããå°ãªããšãæ©èœããŸãã
察称çãªç¶æ³ã¯ãINãã€ã³ãã§ããå¿ èŠããããŸãããããå®éã«ã¯ãUSB_EP_DTOG_RXããã§ãã¯ããŠãã«ããå¿ èŠãããããšã倿ããŸããããªãTXã§ã¯ãªãã®ããŸã ããããŸãã...ãžã®ãªã³ã¯ãæäŸã㊠ããããŠãŒã¶ãŒkuzulisã«æè¬ããŸã github.com/dmitrystu/libusb_stm32/edit/master/src/usbd_stm32f103_devfs.c
ã€ã³ã©ã€ã³é¢æ°ã®ãããåæåãé€ããŠãç¹å¥ãªãªãŒããŒãããã¯è¿œå ãããŸããã§ããããã ããå¿ èŠã«å¿ããŠããªã³ã«ãã©ã°ã䜿çšããŠç Žæ£ããããšãã§ããŸãããŸãã¯ãç Žæ£ããå¿ èŠã¯ãããŸãããã¹ããŒã¹ãããŸããšãããåæåäžã«ã®ã¿åŒã³åºãããŸããããã¯ã颿°ãéãã ãã§ãªããåžžã«çžäºã«åŒã³åºãHALã§ã¯ãããŸããã
ãã®çµæããšã³ããã€ã³ãã¯ãããã¡ã¢ãŒãã§åäœããããšãåŠç¿ããŸãã...ããªããããããããŸã匷ãåŒåžããªããã°ã
ãŠãŒã¶ãŒã«ãšã£ãŠã¯ãéãã¯ãããã§ããusb_ep_initã®ä»£ããã«usb_ep_init_doubleã䜿çšããusb_ep_writeãšusb_ep_readã®ä»£ããã«ããããusb_ep_write_doubleãšusb_ep_read_doubleã䜿çšããŸãã
AudioDeviceããã€ã¹
ãããŠä»ãç§ãã¡ãæè¡çãªã¬ãŒããçè§£ãããšããæãè峿·±ãããšã«ç§»ããŸããã-ãªãŒãã£ãªããã€ã¹ã®ã»ããã¢ããã
USBèŠæ Œã«ãããšããªãŒãã£ãªããã€ã¹ã¯ãç¹å®ã®ããããžã§çžäºã«æ¥ç¶ããããšã³ãã£ãã£ã®ã»ããã§ããããªãŒãã£ãªä¿¡å·ãééããŸããåãšã³ãã£ãã£ã«ã¯åºæã®çªå·ïŒbTerminalIDãå¥åUnitIDïŒããããããã«ãã£ãŠä»ã®ãšã³ãã£ãã£ãŸãã¯ãšã³ããã€ã³ããæ¥ç¶ã§ããŸãããã¹ãã¯ãäžéšã®ãã©ã¡ãŒã¿ãŒã倿Žããå Žåã«ããã®çªå·ã䜿çšããŸãããããŠã圌ã¯ãã®å®äœããæãåºãå¯äžã®æ¹æ³ãšèããããŠããŸãããã ããå ¥åããŸã£ãããªãå ŽåïŒå ¥å端åã®å ŽåïŒããŸãã¯è€æ°ããå ŽåïŒbSourceIDïŒããããŸããå®éãçŸåšã®ãšã³ãã£ãã£ããªãŒãã£ãªä¿¡å·ãåä¿¡ãããšã³ãã£ãã£ã®çªå·ãbSourceIDé åã«æžã蟌ãããšã«ãããããããžå šäœãèšè¿°ããŸãããã®çµæãéåžžã«é«éã§ããããšãããããŸããããšãã°ãè³Œå ¥ããUSBãµãŠã³ãã«ãŒãã®ããããžã瀺ããŸãïŒçªå·ã¯bTerminalID / UnitIDã瀺ããŠããŸãïŒã
lsusbãšãã®åŸ©å·å
Bus 001 Device 014: ID 0d8c:013c C-Media Electronics, Inc. CM108 Audio Controller
#
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0d8c C-Media Electronics, Inc.
idProduct 0x013c CM108 Audio Controller
bcdDevice 1.00
iManufacturer 1
iProduct 2
iSerial 0
bNumConfigurations 1
#
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x00fd
bNumInterfaces 4 #
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
# 0 -
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 1 Control Device
bInterfaceProtocol 0
iInterface 0
AudioControl Interface Descriptor:
bLength 10
bDescriptorType 36
bDescriptorSubtype 1 (HEADER)
bcdADC 1.00
wTotalLength 0x0064
bInCollection 2 # ! (2)
baInterfaceNr(0) 1 #
baInterfaceNr(1) 2 #
##### #####
# 1 InputTerminal (USB, )
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 1 #
wTerminalType 0x0101 USB Streaming
bAssocTerminal 0
bNrChannels 2 #
wChannelConfig 0x0003 # -
Left Front (L)
Right Front (R)
iChannelNames 0
iTerminal 0
# 2 InputTerminal ()
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 2
wTerminalType 0x0201 Microphone
bAssocTerminal 0
bNrChannels 1
wChannelConfig 0x0001
Left Front (L)
iChannelNames 0
iTerminal 0
# 6 OutputTerminal (), 9
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (OUTPUT_TERMINAL)
bTerminalID 6
wTerminalType 0x0301 Speaker
bAssocTerminal 0
bSourceID 9 #
iTerminal 0
# 7 OutputTerminal (USB), 8
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (OUTPUT_TERMINAL)
bTerminalID 7
wTerminalType 0x0101 USB Streaming
bAssocTerminal 0
bSourceID 8
iTerminal 0
# 8 Selector, 10
AudioControl Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 5 (SELECTOR_UNIT)
bUnitID 8
bNrInPins 1 #
baSourceID(0) 10 #
iSelector 0
# 9 Feature, 15
AudioControl Interface Descriptor:
bLength 10
bDescriptorType 36
bDescriptorSubtype 6 (FEATURE_UNIT)
bUnitID 9
bSourceID 15
bControlSize 1
bmaControls(0) 0x01
Mute Control
bmaControls(1) 0x02
Volume Control
bmaControls(2) 0x02
Volume Control
iFeature 0
# 10 Feature, 2
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 6 (FEATURE_UNIT)
bUnitID 10
bSourceID 2
bControlSize 1
bmaControls(0) 0x43
Mute Control
Volume Control
Automatic Gain Control
bmaControls(1) 0x00
iFeature 0
# 13 Feature, 2
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 6 (FEATURE_UNIT)
bUnitID 13
bSourceID 2
bControlSize 1
bmaControls(0) 0x03
Mute Control
Volume Control
bmaControls(1) 0x00
iFeature 0
# 15 Mixer, 1 13
AudioControl Interface Descriptor:
bLength 13
bDescriptorType 36
bDescriptorSubtype 4 (MIXER_UNIT)
bUnitID 15
bNrInPins 2 #
baSourceID(0) 1 #
baSourceID(1) 13
bNrChannels 2
wChannelConfig 0x0003
Left Front (L)
Right Front (R)
iChannelNames 0
bmControls(0) 0x00
iMixer 0
##### #####
# 1 () -
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
# 1 () -
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 1
bDelay 1 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 14
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 2
bSubframeSize 2
bBitResolution 16
bSamFreqType 2 Discrete
tSamFreq[ 0] 48000
tSamFreq[ 1] 44100
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 9
Transfer Type Isochronous
Synch Type Adaptive
Usage Type Data
wMaxPacketSize 0x00c8 1x 200 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x01
Sampling Frequency
bLockDelayUnits 1 Milliseconds
wLockDelay 0x0001
# 2 () -
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
# 2 ()
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 7
bDelay 1 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 14
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 1
bSubframeSize 2
bBitResolution 16
bSamFreqType 2 Discrete
tSamFreq[ 0] 48000
tSamFreq[ 1] 44100
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 9
Transfer Type Isochronous
Synch Type Adaptive
Usage Type Data
wMaxPacketSize 0x0064 1x 100 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x01
Sampling Frequency
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
##### #####
# 3 " " ( )
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 3
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.00
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 60
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x87 EP 7 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 2
ãã£ãšç°¡åãªããšãããŸãïŒãããã空çœãåããŸãã ïŒïŒ
ããã§ã¯ãUSBãããæ©èœããããã¹ããŒã«ãŒããžããŸãã¯ããã€ã¯ãããå¥ã®ãæ©èœããžã®2ã€ã®ç¬ç«ããä¿¡å·äŒæ¬ãã©ã³ããèŠãããšãã§ããŸãã ããUSBã«æ¥ç¶ããŸãããã€ã¯ãšã¹ããŒã«ãŒã¯åŒçšç¬Šã§å²ãŸããŠããã ãã§ã¯ãããŸããããããã°ããŒãã«ã¯ãªãã®ã§ããµãŠã³ãèªäœã®ä»£ããã«ãã¿ã³ãšLEDã䜿çšããŸããããããæ°ããããšã¯äœããããŸãããç§ã®å Žåã®ãæ©èœãã¯äœããããçŸããã®ããã«ããã«è¿œå ãããŸãã
ãã®ã¢ãã«ã®ä¿¡å·ã¯ã1ã€ä»¥äžã®è«çãã£ãã«ã§æ§æãããŠãããšèŠãªãããããšãããã«æç¢ºã«ããå¿ èŠããããŸããã€ãŸããããšãã°ãã¢ãã©ã«ã¹ããŒã«ãŒãã¹ãã¬ãªã¹ããŒã«ãŒã«å€æŽããå Žåãããããžèªäœã¯å€æŽããããä¿¡å·åœ¢åŒã®ã¿ã倿ŽãããŸãã
ãæ©èœãã®ã¿ã€ããšä»ã®ãšã³ãã£ãã£ã®éãã«ã€ããŠã¯æ·±ãæãäžããŸããã§ããããããã¥ã¡ã³ãã®äžéšãåã³èªãããšã軜èããã€ããã¯ãããŸããã
1.å ¥å端å
ååã瀺ãããã«ããªãŒãã£ãªä¿¡å·ããªãŒãã£ãªããã€ã¹ã«å ¥ãã®ã¯ãããä»ããŠã§ãã USBã§ããéåžžã®ãã€ã¯ããããã»ãããã€ã¯ãããã«ã¯ãã€ã¯ã¢ã¬ã€ã§ãããŸããŸããã
2.åºå端å
é³ãããã€ã¹ããåºãã®ãæããã§ããåãUSBã§ããã¹ããŒã«ãŒããããã»ãããã¢ãã¿ãŒã®ã¹ããŒã«ãŒãããŸããŸãªåšæ³¢æ°ã®ã¹ããŒã«ãŒããã®ä»ã®ããŸããŸãªããã€ã¹ã§ãããŸããŸããã
3.ãããµãŒãŠããã
è€æ°ã®å ¥åä¿¡å·ãåãåãããããããæå®ã®éã ãå¢å¹ ãããã®çµæãåºåãã£ãã«ã«è¿œå ããŸããå¿ èŠã«å¿ããŠãã²ã€ã³ããŒãã«èšå®ã§ããŸããããã«ãããã²ã€ã³ã次ã®ãšã³ãã£ãã£ã«æžå°ããŸãã
4.ã»ã¬ã¯ã¿ãŠããã
è€æ°ã®å ¥åä¿¡å·ãåãåãããã®ãã¡ã®1ã€ãåºåã«ãªãã€ã¬ã¯ãããŸãã
5.ãã£ã«ã¿ãŒïŒæ©èœãŠãããïŒ
åäžã®å ¥åä¿¡å·ãåãåãããµãŠã³ããã©ã¡ãŒã¿ãŒïŒé³éãããŒã³ãªã©ïŒã倿ŽããŠãåºåã«åºåããŸããåœç¶ããããã®ãã©ã¡ãŒã¿ã¯ãã¹ãŠãä¿¡å·å ã®è«çãã£ãã«ã®çžäºäœçšãªãã«ãåãæ¹æ³ã§ä¿¡å·å šäœã«é©çšãããŸã
ã
ããããããã«ãããåå ¥åå ã®åã ã®è«çãã£ãã«ãæäœã§ããããã«ãªããŸããããã«ãåºåã®è«çãã£ãã«ã®æ°ãå ¥åã®æ°ãšçããããªãããã«ããããšãã§ããŸãã
7.æ¡åŒµãŠããã
éæšæºãšã³ãã£ãã£ã®ã»ããå šäœã ããã«ãããæ©åšã¡ãŒã«ãŒã®ç çãªå¹»æ³ã¯èªç±ã«ãªããŸããããããã£ãŠãåäœãšèšå®ã®äž¡æ¹ããã®ãã¡ã³ã¿ãžãŒã«äŸåããŸãã
äžéšã®ãšã³ãã£ãã£ã«ã¯ãã²ã€ã³ããã£ãã«çªå·ãªã©ã®ãã©ã¡ãŒã¿ãããããšã³ãã£ãã£çªå·ã«å¯ŸããŠsetFeature / getFeatureã¯ãšãªã䜿çšããŠãã¹ãã®åœ±é¿ãåããå¯èœæ§ããããŸããã§ãããã§ã¯ãæ£çŽãªãšãããã©ããã£ãŠãã§ãã¯ããã®ãå šãããããŸããããããããç§ãæã£ãŠããªãããçš®ã®ç¹å¥ãªãœãããŠã§ã¢ãå¿ èŠã§ãããŸãã倧äžå€«ããšã«ããç§ã¯ãã¹ãŠã®çš®é¡ã®ãã€ã³ãããã§ãã¯ããããã ãã«ããã«ä¹ã蟌ã¿ãŸãã...ç§ã®é ã®äžã§...
èšè¿°åãããéãã
以åã®USBããã€ã¹ãšã¯ç°ãªããããã§ã®èšè¿°åã¯è€éã§å€å±€åãããŠãããWindowsãBSODã«æããããåŸåããããŸããäžã§èŠãããã«ãèªå®¶ããã€ã¹ã®ããããžãŒã¯éåžžã«è€éã§åºããããããŸããã€ã³ã¿ãŒãã§ãŒã¹å šäœããã®èª¬æã§éç«ã£ãŠããŸããæããã«ããšã³ããã€ã³ãã¯å«ãŸããŸãããããšã³ãã£ãã£èšè¿°åã®ãªã¹ããšãããã®å ¥åãæ¥ç¶ãããŠãããã®ã®èª¬æãå«ãŸããŸããããã§ã¯ããŸãæå³ããããŸãããã³ãŒããšããã¥ã¡ã³ããèŠãæ¹ãç°¡åã§ããããã§ã¯ãã¡ã€ã³ã¬ãŒãã«ã€ããŠã®ã¿èª¬æããŸããããã§ã¯ã察å¿ãããšã³ããã€ã³ããšã®ã©ã®ã€ã³ã¿ãŒãã§ã€ã¹ããã®ããã€ã¹ãå ·äœçã«åç §ããŠãããã«ã€ããŠèª¬æããŸããããšãã°ãæ§æã倿ŽããŠããããã¹ããŒã«ãŒãåé€ããå Žåã¯ããšã³ãã£ãã£ã®ååãåé€ããå¿ èŠãããã ãã§ãªãïŒãã¯ãã®ãããã§ãå°ãªããšãèšè¿°åã®é·ãã®èšç®ã«åé¡ã¯ãããŸããïŒããŸããbInCollectionãã£ãŒã«ãã1ã«æžãããŸã次ã«ãããã«ç¶ãé åbInterfaceNrããäœåãªã€ã³ã¿ãŒãã§ã€ã¹ã®çªå·ãåé€ããŸãã
ããã«ãããŒã¿äº€æãæ åœããã€ã³ã¿ãŒãã§ãŒã¹ããããŸããç§ã®å Žåã1çªç®ã®ã€ã³ã¿ãŒãã§ã€ã¹ããã€ã¯ãæ åœãã2çªç®ã®ã€ã³ã¿ãŒãã§ã€ã¹ãã¹ããŒã«ãŒãæ åœããŸããããã§ã¯ããŸãããããã®åã€ã³ã¿ãŒãã§ã€ã¹ã®2ã€ã®ããªã¢ã³ãã«æ³šæãæã䟡å€ããããŸãã 1ã€ã¯bAlternateSettingã0ã«çããããã1ã€ã¯1ã«ãªããŸãããããã¯ããšã³ããã€ã³ãã®ååšã«ãã£ãŠç°ãªããŸããã€ãŸããããã€ã¹ãçŸåšäœ¿çšãããŠããªãå Žåããã¹ãã¯ãšã³ããã€ã³ããè£ åãããŠããªã代æ¿ã€ã³ã¿ãŒãã§ã€ã¹ã«åãæ¿ããã ãã§ããã¹åž¯åå¹ ãæµªè²»ããããšã¯ãããŸããã
ããŒã¿ã€ã³ã¿ãŒãã§ã€ã¹ã®2çªç®ã®æ©èœã¯ããªãŒãã£ãªä¿¡å·åœ¢åŒã§ãã察å¿ããèšè¿°åã¯ããšã³ã³ãŒãã¿ã€ãããã£ãã«æ°ãè§£å床ãããã³ãµã³ããªã³ã°ã¬ãŒãïŒ24ãããã®æ°å€ã§æå®ïŒãæå®ããŸããã³ãŒãã£ã³ã°ãªãã·ã§ã³ã¯ããªããããŸãããæãåçŽãªãã®ã§ããPCMã䜿çšããŸããå®éãããã¯ã³ãŒãã£ã³ã°ãªãã®ä¿¡å·ã®ç¬æå€ã®å€ã®ã·ãŒã±ã³ã¹ã§ãããå€ã¯ç¬Šå· ä»ãæŽæ°ãšèŠãªãããŸããä¿¡å·ã®è§£å床ã¯2ãæã§èšå®ãããŸãïŒçç±ã¯äžæã§ãïŒãbSubFrameSizeãã£ãŒã«ã ã¯ãã€ãæ°ãæå®ããbBitResolutionã¯ãããæ°ãæå®ã ãŸãã..ãããããããµãŠã³ãã«ãŒãã®ç¯å²ãããŒã¿åã®å šç¯å²ïŒããšãã°int16_tïŒã«éããŠããããããã10ãããã§ããããšãææã§ããŸãã
ãããŠæåŸã«ãå®éã®ãšã³ããã€ã³ãã®èšè¿°åããŸããæåã«ããã€ãã®åæãªãã·ã§ã³ãæäŸããæ¬¡ã«ãã®ãã€ã³ããé¢é£ä»ããããŠãããšã³ãã£ãã£ã®çªå·ïŒbTerminalLinkïŒãæäŸãããããéåžžã®ãªãã·ã§ã³ãšã¯å°ãç°ãªããŸã ãåæãªãã·ã§ã³ã¯ããšã³ããã€ã³ãã¿ã€ãã«çŽæ¥äžäœãããã§æžã蟌ãŸããŸãïŒããããåæå颿°ã§ã¢ã€ãœã¯ããã¹ãã€ã³ããããã©ã«ãã®ãã©ã³ãã«ç§»åãããçç±ã§ãïŒããè©³çŽ°ãæ±ã£ãŠããªããããããããŸãããé¢çœããã®ã¯äœã§ããåæã®ä»£ããã«ãéåžžã®ã³ã³ãããŒã©ãŒã¿ã€ããŒã䜿çšããŸããããã«ãããã»ãŒå¿ èŠãªåšæ³¢æ°ã§å²ã蟌ã¿ãçæãããŸãã
ãããããééã£ãèšè¿°åããã¹ããããšãã«ãå¥ã®BSODã®æã«ã€ããŠèšåããã®ãã»ãšãã©å¿ããŠããŸãããããäžåºŠæãåºãããŠãã ãããããŒã¿ã€ã³ã¿ãŒãã§ã€ã¹ã®æ°ã¯bInCollectionã®æ°ã«å¯Ÿå¿ããŠããå¿ èŠãããããããã®æ°ã¯ããã«ç¶ãé åã«å¯Ÿå¿ããŠããå¿ èŠããããŸãã
é ãããã¹ã
, , . --.
ããã€ã¹ã®ããžãã¯
ãã§ã«è¿°ã¹ãããã«ããã¹ãã®å Žåããã³ãžä»ãã³ã³ããŒãã³ãããããã°ããŒãã«å«ããããšã¯æå³ããªãããããã¹ãŠã®ãã¹ãã¯ããã¿ã³ãšLEDãªã©ã®æ¢ã«ã€ã³ã¹ããŒã«ãããŠãããã®ã䜿çšããŠå®è¡ãããŸãããã ãããã®å Žåãããã¯åé¡ã«ã¯ãªããŸãããããã€ã¯ãã¯ãããšãã°1 kHzã®åšæ³¢æ°ã®æ£åŒŠæ³¢ãçæããã ãã§ããã¹ããŒã«ãŒãã¯ãé³ã®ãããå€ãè¶ ãããšLEDããªã³ã«ããŸãïŒããšãã°ã ã10,000ãè¶ ããïŒæå®ããã16ãããã®è§£å床ïŒç¯å²-32768 ... +32767ã«å¯Ÿå¿ïŒã§ã¯ãããã¯çŽ3åã®1ã§ãïŒã
ãããããã¹ãã§ã¯ãå°ããªåé¡ãçºçããŸããããã€ã¯ããã®ä¿¡å·ãããã°ã©ã ã®æšæºå ¥åã«ãªãã€ã¬ã¯ãããç°¡åãªæ¹æ³ãèŠã€ãããŸããã§ããã以åã¯/ dev / dspãèªã¿åãã ãã§ãããè¡ãããŠããããã§ãããçŸåšã¯äœããå£ããŠããŸãããã ãããã«ãã¡ãã£ã¢ãšå¯Ÿè©±ããããã®ããããçš®é¡ã®ã©ã€ãã©ãªïŒSDLãSFLMãªã©ïŒããããããéèŠãªããšã¯äœããããŸãããå®éãSFMLã§ã¯ããã€ã¯ããèªã¿åããå¿ èŠã«å¿ããŠä¿¡å·ãèŠèŠåããããã®ç°¡åãªãŠãŒãã£ãªãã£ãäœæããŸããã
ãªãŒãã£ãªããã€ã¹ã®å¶éã«ç¹ã«æ³šæããŸããç§ãçè§£ããŠããéããã¢ã€ãœã¯ããã¹INèŠæ±ã¯1ããªç§ã«1åéä¿¡ãããŸãïŒãã ããOUTã倿°ååšããå¯èœæ§ããããŸãïŒãããã«ããããµã³ããªã³ã°ã¬ãŒããå¶éãããŸãããšã³ããã€ã³ãã®ãµã€ãºã64ãã€ãã§ãããšããŸãããïŒãããã¡ãªã³ã°ãèæ ®ãããšãã¡ã¢ãªå ã§128ãã€ãããããŸããããã¹ãã¯ãããèªèããŠããŸããïŒãè§£å床ã¯16ãããã§ããã€ãŸããäžåºŠã«32ãµã³ãã«ãéä¿¡ã§ããŸãã ã 1ããªç§ã®ééãäžãããããšã1ã€ã®ãã£ãã«ã«å¯ŸããŠ32kHzã®çè«äžã®å¶éãåŸãããŸãããããåé¿ããæãç°¡åãªæ¹æ³ã¯ããšã³ããã€ã³ãã®ãµã€ãºãå¢ããããšã§ãããã ããããã§ã¯ãPMAãããã¡ã®åèšãµã€ãºã512ãã€ããããªãããšãèŠããŠããå¿ èŠããããŸãããã€ã³ã忣ããŒãã«ããep0ãåŒãããã®ãå·®ãåŒããšããããã¡ãªã³ã°ãèæ ®ããŠãæå€§440ãã€ããã€ãŸã1ãã€ã³ãããã220ãã€ããåŸãããŸãããããŠãããçè«äžã®éçã§ãã
ãã ãããã¹ãã1ã€ã®ãã¬ãŒã ã§è€æ°ã®OUTèŠæ±ãéä¿¡ã§ãããšããäºå®ã¯ãããã€ã¹ãåãããšãå®è¡ã§ããããšã瀺ããŠããŸãããã®æ¹æ³ãçè§£ããããšã¯æ®ã£ãŠããŸãããããããããã¯é©åãªåæèšå®ã«ãã£ãŠè§£æ±ºãããŸããããããç§ã«ãšã£ãŠããã®è³ªåã¯ãã¯ãéèŠã§ã¯ãããŸãããã¢ã€ãœã¯ããã¹ãã€ã³ããæ©èœãããããã¡ãªã³ã°ããããã€ã³ããæ©èœãããªãŒãã£ãªããã€ã¹ãæ©èœããŸããã¿ã¹ã¯ã¯å®äºããŸãã
çµè«ïŒãµã€ã¯ã«ã«å ±éïŒ
STM32F103ããã³STM32L151ã³ã³ãããŒã©ãŒïŒããã³åæ§ã®å®è£ ãæã€ä»ã®ã³ã³ãããŒã©ãŒïŒã®USBããã€ã¹ã«ç²Ÿéããããã€ãã®ã¢ãŒããã¯ãã£ãœãªã¥ãŒã·ã§ã³ã®ããžãã¯ã«é©ããŠããŸããïŒç¹ã«USB_EPnRã¬ãžã¹ã¿ã«æéãåããŸããããããã«ãããã¡ãªã³ã°ãé ããŠããŸããïŒèåŸïŒãé©åãªããã€ã¹ãæ§ç¯ããããšã«ããããã¹ãŠã®ã¿ã€ãã®ãšã³ããã€ã³ãã調ã¹ããããããã§ãã¯ããŸããããããã£ãŠããã®äžé£ã®èšäºã¯è«ççãªçµè«ã«éãããšèšããŸãããã¡ãããããã¯ã³ã³ãããŒã©ãŒãUSBãæŸæ£ããããšãæå³ãããã®ã§ã¯ãããŸãããé ãèšç»ã§ã¯ãè€åããã€ã¹ïŒãããŸã§ã®ãšããç°¡åã«èŠããŸãããã¢ã€ãœã¯ããã¹ãã€ã³ããããŸããããŸããã§ããïŒãšã³ã³ãããŒã©ãŒäžã®USBãåŠçããå¿ èŠããããŸããä»ã®å®¶æã®ã