V-USB�𗘗p����HID�f�o�C�X�����
(C) Objective Development Software
2012�N4�� AVR���g�������앨��V-USB��g�ݍ������Ǝv���܂������A�f�o�C�X�����z�X�g�����\�t�g���ǂ̂悤�ɍ��悢�̂��悭������Ȃ������̂ŁA���ׂȂ��璧�킵�܂����B �{�L���͂��̂Ƃ��̃������܂Ƃ߂����̂ł��B���e�����Ă�����A�������I�ɓǂ݂ɂ����Ƃ��������Ǝv���܂����A���������������B ��HID�f�o�C�X�c�q���[�}���E�C���^�[�t�F�C�X�E�f�o�C�X�E�f�o�C�X�B�C�ɂ��Ȃ��ł��������B �y�ڎ��z
�{�L����V-USB�̓��e���ڍׂɉ��������̂ł͂Ȃ��A���������߂�V-USB���g���i��荞�ށj�ɂ�����A���ׂ����ƁA��|����ɂ������Ƃ��Љ����̂ł��B���ꂩ��V-USB���g�����Ƃ���l�̃q���g�ɂȂ�Ǝv���܂��B�����āA�{�L����ǂ߂�V-USB���g�����Ȃ���悤�ɂȂ�A�Ƃ������̂ł͂���܂���B |
V-USB�Ƃ� | |
PC�ɂ͗l�X�ȃf�o�C�X�i���Ӌ@��j��USB(Universal Serial Bus)�Őڑ����邱�Ƃ��ł��܂��B ���̂悤�ȃf�o�C�X�ɂ́AUSB�@�\���i���pIC��USB�����}�C�R�����g���Ă��܂��B ��̓d�q�H��ł��AUSB������PIC��AVR���g����USB�f�o�C�X����邱�Ƃ��ł��܂��BUSB������PIC�͔�r�I�悭�o����Ă��܂��B����ɔ�ׁAAVR�̕��͂��܂�o����Ă��܂���B�������AUSB��������Ă��Ȃ�AVR�}�C�R���ł�USB�f�o�C�X����邱�Ƃ��ł��܂��BV-USB�Z�p��������\�ɂ��܂��B V-USB��AVR��Ńt�@�[���E�F�A�i�}�C�R���ɏ������ރ\�t�g�E�F�A�j�ɂ����USB�@�\����������Z�p�ł��B
V-USB�̓����m�邽�߂Ƀ\�[�X(usbdrv.c)��ǂ�ŏ������e��ǂ����Ƃ�����܂��BUSB�Ɋւ����b�m���i�N���X�A�C���^�[�t�F�C�X�A�p�P�b�g�A�g�����U�N�V�����A�]�������A�Ƃ��������Ɓj������ƁA�\�[�X���������₷���Ȃ�܂��B USB�Ɋւ���ڍׂ͎Q�l����ǂ�ł��������B�T�v�����Ȃ�AUSB�R���g���[������IC�̐�������������₷���Ă����߂ł��B���[�J�[�̃T�C�g�Ō��J����Ă��܂��B���uUSB HID �R���g���[������ pdf�v�Ȃǂ̗p��Ō����B ���̍ہAIC�ŗL�̋@�\�Ɋւ���������AUSB�K�i�̐������Ɗ��Ⴂ���Ȃ��悤���ӂ��Ă��������B |
V-USB��HID�f�o�C�X����� | |
AVR�ō�������̂�PC�ɐڑ����邽�߂ɁAAVR-CDC�𗘗p���邱�Ƃ��悭����܂��BAVR-CDC�V���[�Y��V-USB�����p����CDC(Communication
Device Class)�f�o�C�X�ŁAPC�ɉ��zCOM�|�[�g�݂��Ă���܂��B
AVR-CDC���g���ɂ́AINF�t�@�C���Œ����h���C�o��PC�ɃC���X�g�[������K�v������܂��BAVR-CDC�Ɍ��炸�AV-USB�𗘗p�����J�X�^���ȃf�o�C�X�͊�{�I�Ƀh���C�o��K�v�Ƃ��܂��B�f�o�C�X�J���҂̓h���C�o�����Ȃ���Ȃ�܂���B ����ɑ��AHID(Human Interface Device)�Ƃ��ċK�i������Ă���f�o�C�X�c�L�[�{�[�h��}�E�X�A�W���C�X�e�B�b�N�Ȃǂ́APC(OS)�����Ƃ��ƃh���C�o�������Ă���̂ŗ��p�҂��ʓr�C���X�g�[������K�v�͂���܂���B ����HID�ɏ��������f�o�C�X�ł���A���e�����ł���OS�W���̃h���C�o�œ��삳���邱�Ƃ��ł��܂��B����f�o�C�X�ł��h���C�o�̊J���E�C���X�g�[���Ȃ��ɁAPC�ɐڑ����邱�Ƃ��ł���̂ł��B �{�L���ł�V-USB�𗘗p����HID�f�o�C�X�����܂��B��̓I�ɂ̓z�X�g(PC)�Ƃ̊ԂŔC�ӂ̃f�[�^�ibyte�z��j�����Ƃ肷��HID�f�o�C�X�����܂��B����ɁAAVR-CDC/IO�̂悤�ȔėpI/O����f�o�C�X������Ǝv���܂��B ���NjL�F AVR-HID/IO�A�������܂����B����A�\�t�g�E�F�A�҂̋L���Ō��J����\��ł��B |
V-USB�t�@�C���̔z�u��AVR Studio�̐ݒ� | |
Objective Development�̃T�C�g����V-USB�̃��W���[�����_�E�����[�h���܂��B �{�L�����J���_�ł̍ŐV�ł�vusb-20120109.zip�ł����B
�t�@�C���z�u�Ɛݒ�
[Symbols] F_CPU=12000000UL�@��12MHz�̗�B���ۂ͐��삷��f�o�C�X�ɍ��킹���l�ŁB [Directories] �v���W�F�N�g����usbdrv�f�B���N�g�����w�肷��B�u../usbdrv�v�̂悤�ɐݒ肳���B [Optimization]�i�w��͔C�Ӂj -Os �A�Z���u���̃��W���[���ɑ���ݒ� [AVR/GNU Assembler] [General] �v���W�F�N�g����usbdrv�f�B���N�g�����w�肷��B�u../usbdrv�v�̂悤�ɐݒ肳���B [Symbols] F_CPU=12000000UL�@��12MHz�̗�B���ۂ͐��삷��f�o�C�X�ɍ��킹���l�ŁB |
usbconfig.h������������ | |||||||
�_�E�����[�h����V-USB�̃��W���[����vusb-20120109/examples�t�H���_�ɃT���v���f�o�C�X�������������Ă��܂��B���̂����A�ړI�̂��̂ɋ߂��uhid-data�v����������`�Ői�߂邱�Ƃɂ��܂��B�f(��)��usbconfig.h�������������蕪����₷������ł��B�Ȃ��AV-USB��g�ݍ���AVR��ATmega88P�Ƃ��܂����B ���삷��f�o�C�X�ɍ��킹�Ahid-data��usbconfig.h�̐ݒ���e��ύX���܂��B
���������ۂɑg�ݗ��Ă��f�o�C�X�����̒ʂ�̔z���ł��B
�f�t�H���g�́u0�v�A254byte�܂ł̓]���ƂȂ��Ă��܂��B
�����^���T�C�g�ł���T�u�h���C�����܂ŕK�v�ł��傤�BURL���uhttp://�v����t���ɏ����ΊԈႢ����܂���B�T�C�g��u���O���Ȃ��l��e-mail�A�h���X�������܂��B�ڍׂ�usbdrv�t�H���_�ɂ���USB-IDs-for-free.txt��ǂ�ł��������B
�z�X�g���̃A�v���̓x���_�[ID�^�v���_�N�gID�ɉ����A�V���A���ԍ��܂Ō��ČX�̃f�o�C�X�ʂ��܂��B �V���A���ԍ��͐��������łȂ��A���t�@�x�b�g���g���܂��B
�f�o�C�X�̊J�����A���o�͎d�l�̕ύX�ɔ����A�p�ɂɏ��������邱�ƂɂȂ�Ǝv���܂��B����������Y���ƃf�o�C�X�ɃA�N�Z�X�ł��܂���B���ӂ��Ă��������B |
�f�o�C�X�̓�����m�F���� |
AVR Studio�Ńv���W�F�N�g���r���h���AAVR�i�����ł�ATmega88P�j�ɏ������݂܂��B�q���[�Y�r�b�g�̐ݒ�̓T���v���f�o�C�Xhid-data��Makefile�t�@�C���ɋL�q����Ă��܂��B �T���v���f�o�C�X�̃t�H���_�ɂ́A�R�}���h���C���œ��삷��uhidtool�v�Ƃ����z�X�g���A�v���������Ă��܂��B���̃A�v���̎��s�ɂ́ulibusb�v���K�v�ł��B�����������̓��P������libusb�������A���l�̃��C�u�����A����сAhidtool�̑���ƂȂ�z�X�g���A�v����C#�ō쐬���܂����B��libusb�cUSB�f�o�C�X�ɃA�N�Z�X���邽�߂́A�z�X�g���A�v���̃��C�u�����B hid-data��128byte�܂ł̔C�ӂ̃f�[�^�i�o�C�g�z��j���z�X�g(PC)�ƃf�o�C�X(hid-data)�Ԃł��Ƃ�ł��܂��B �z�X�g����f�[�^�𑗂�ƃf�o�C�X�͂����EEPROM�ɕۑ����܂��B�z�X�g���ǂݏo����v������ƁA�f�o�C�X��EEPROM����f�[�^��ǂݏo���A�Ԃ��܂��B ��L����c�[����p���āA�����̓��삪����ɍs���邱�Ƃ��m�F���܂����B |
�]�������^���|�[�g�^�C�v�^�T�|�[�g�c�[�� | |
�r���h�A���s�A����m�F���ł����Ƃ���ŁAV-USB�̓�����e�����Ă݂܂��B V-USB�̃\�[�Xusbdrv.c/.h��ǂނɂ�����A�C��t���Ȃ���Ȃ�Ȃ��d�v�ȃ|�C���g������܂��B USB�f�o�C�X�ɂ�����f�[�^�]���̕�����\�����tINPUT/OUTPUT�́A��Ƀz�X�g(PC)���猩�������ł��B USB�f�o�C�X�͎����I�ɍs�����N�������Ƃ͂ł����A���ł��z�X�g����̖��߂��čs�����N�������́A�Ƃ������܂肪����܂��B
USB�K�i�Ńr�b�g���ƂɈӖ��Â���ꂽ�l���A�l�X�ȍ��ڂ��Ƃɐݒ肷��̂ł����A���Ƃł͂���Ă��܂���BUSB�̃T�C�g�Ō��J���Ă���T�|�[�g�c�[���𗘗p���܂��B�{�L�����J���_�ł̃t�@�C������dt2_4.zip�ł����B
|
�f�[�^�]���̗���ƃf�[�^�̃Q�b�g�^�Z�b�g�ꏊ�ɂ��� | |||
�f�o�C�X�́A�z�X�g�����M����f�[�^�ƃz�X�g�֑��M����f�[�^���A���ꂼ��ǂ̊��ŃQ�b�g�^�Z�b�g����̂��B �z�X�g����f�o�C�X�փ��|�[�g�����N�G�X�g�����ƁA��M�����̊�����usbFunctionSetup()���Ăяo����܂��B �����Ŗ߂�l��USB_NO_MSG��Ԃ��ƁA������usbFunctionRead(), usbFunctionWrite()���Ăяo����܂��B �ȍ~�A�z�X�g����v�����ꂽ�f�[�^���ɒB����܂Łi���x��usbFunctionSetup()���o�R�����ɁjusbFunctionRead(), usbFunctionWrite()���Ăяo����܂��B ����āA�f�[�^�̃Q�b�g�^�Z�b�g��usbFunctionRead(), usbFunctionWrite()�ōs���܂��B�����͂��̂��߂̊��ł��B usbFunctionRead(), usbFunctionWrite()�Ŏg���ϐ��̏�������usbFunctionSetup()�ōs���܂��B
usbFunctionSetup()�ł̓��|�[�g�^�C�v(feature/input/output)�ƃ��|�[�gID�����ʂł���̂ŁA�f�[�^�̃Q�b�g��̃o�b�t�@�^�Z�b�g���̃o�b�t�@��U�蕪���邱�Ƃ��ł��܂��B [main.c] usbFunctionSetup()�̋L�q��
|
�f�[�^����M�̃T�C�Y�Ɩ߂�l�ɂ��� |
�z�X�g(PC)��V-USB�f�o�C�X�Ԃł��Ƃ肷��f�[�^�����|�[�g�ƌĂт܂��B �f�[�^�̍ŏ��P�ʂ�byte�ł͂Ȃ�bit�ł��B�Ⴆ�{�^���f�o�C�X��on/off��1�r�b�g����Α���܂��B 1byte�P�ʂŃf�[�^�����������ꍇ�A8bit��1�̃f�[�^�Ƃ��Ē�`����悢�ł��B �f�[�^�i���|�[�g�j�̏ڍׂ̓��|�[�g�f�X�N���v�^�Œ�`���܂��B �Ⴆ�T���v���f�o�C�Xhid-data�́Amain.c����usbHidReportDescriptor[]�Ŏ��̂悤�ɒ�`���Ă��܂��B
usbdrv.c�����̑���M�o�b�t�@��8byte�ł��B��usbTxBuf[]��usbRxBuf[]�B��M�g��2�{�T�C�Y�Ŋm�ۂ��Ă���B �f�o�C�X�̃v���O�������i��L��ł�hid-data/main.c���j��usbFunctionRead(),usbFunctionWrite()��8byte���f�[�^���������邱�ƂɂȂ�܂��B���f�[�^�S����8byte�̔{���łȂ��Ȃ�A�J��Ԃ��̍Ō��8byte�����B ��byte����M���������O�ŃJ�E���g���A�f�[�^�S�����������������ǂ��������O�Ŕ��f���܂��B uchar usbFunctionRead(uchar *data, uchar len) �̖߂�l ����'len'�̓o�b�t�@'data[]'�֊i�[�ł���byte���ŁA�߂�l�͎��ۂ�data[]�֊i�[����byte���ł��Btrue/false�I�Ȓl�ł͂Ȃ���������byte����Ԃ��̂ł��B�]���Ė߂�l��len�ȉ��̒l�ƂȂ�܂��B len�̒l��ݐς��A����܂łɉ��o�C�g�����������c�����A�f�[�^�̑S�̃T�C�Y���ď������Ȃ��悤�ɂ��܂��B uchar usbFunctionWrite(uchar *data, uchar len) �̖߂�l ����'len'�̓o�b�t�@'data[]'������o����byte���ł��B���O�ŗp�ӂ���SRAM��̃o�b�t�@�Ɋi�[����ȂǏ������܂��B������len�̒l��ݐς��A�f�[�^�̑S�̃T�C�Y�ɒB�������i�f�[�^��S�Ď�������j���f���܂��B �S�Ẵf�[�^��������Ƃ��A��0�̒l(true)��Ԃ��܂��B�܂������̃f�[�^������Ƃ��A0(false)��Ԃ��܂��B �z�X�g���́A�f�o�C�X���Ńf�[�^��8byte������Ă��邱�Ƃ��ӎ�����K�v�͂���܂���B HidD_SetFeature(),HidD_GetFeature()�Ńf�[�^�S�̂�1��ő���M����悢�ł��B HidD_GetInputReport(),HidD_SetOutputReport()�����l�ł��B�������4��Windows�W����hid.dll�Ɋ܂܂�Ă�����B |
GetIdol/SetIdol���N�G�X�g�ɂ��� | |
�C���^���v�g�]���̎��ԊԊu��usbconfig.h�Ŏ��̂悤�ɒ�`���܂��B ��F�@#define USB_CFG_INTR_POLL_INTERVAL 100 //100ms ��{�I�ɂ��̎��ԊԊu�ŁA�z�X�g���f�o�C�X�Ɂu�f�[�^������Ȃ瑗�M����v�Ɩ��߂𑗂�܂��B ���������̒l�Ƃ͕ʂɁA�z�X�g�����w�肵�����ԊԊu�ŃC���^���v�g�]�����s���ꍇ������܂��B�f�o�C�X��USB_CFG_INTR_POLL_INTERVAL�̒l�Ƃ͊W�Ȃ��A�]������莞�ԑ҂��ƂɂȂ�܂��B ���̎d�g�݂̓L�[�{�[�h�f�o�C�X�ł̓T�|�[�g�K�{�ł��B�ʏ�A�L�[�{�[�h�f�o�C�X�ł̓z�X�g�iPC��OS�j���l���w�肵�Ă��܂��B���̒l���擾�^�ݒ肷��̂�GetIdol/SetIdol���N�G�X�g�ł��B [main.c] usbFunctionSetup()�̋L�q��
�L�[�{�[�h�f�o�C�X�̏ꍇ�A�u�Ԃ��ƂɃL�[�̉�����Ԃ��ς��킯�ł͂Ȃ��̂ŁA�z�X�g���̔��f�ɂ���ăA�C�h�����Ԃ����邱�Ƃ�����܂��B �}�E�X�f�o�C�X�̏ꍇ�A�J�[�\���̏r�q�ȓ�����ߑ����邽�߁AUSBRQ_HID_SET/GET_IDLE�����͕K�v����܂���B USB_CFG_INTR_POLL_INTERVAL�Ŏw�肵���C���^�[�o���Ԋu�Ńf�[�^���]������܂��B ���̑��Ahid-data�̂悤�ȃf�o�C�X�ł�USBRQ_HID_SET/GET_IDLE�����͕K�v����܂���B |
�f�[�^�]���̎�ނƏ����Ԋu�ɂ��� | ||||
V-USB�̓R���g���[���]���ƃC���^���v�g�]�����T�|�[�g���܂��B USB���[�X�s�[�h�f�o�C�X�ł̃o���N�]���͋֎~����Ă��܂��BV-USB�I�ɂ����ׂ��傫���悤�ł��B
�T���v���f�o�C�Xhid-data�̓R���g���[���]���𗘗p����128byte�̃f�[�^�𑗎�M���܂��B USB�������̂悤�ȃf�o�C�X���C���[�W���ăf�[�^��EEPROM�ɕۑ����Ă��܂��B EEPROM�ւ̃A�N�Z�X�̂悤�Ɏ��Ԃ������鏈��������Ƃ��͒��ӂ��K�v�ł��B �f�o�C�X���łǂ̂悤�ȏ��������悤�Ƃ�usbPoll()��50ms��ȓ��̊Ԋu�ŌĂяo���K�v������܂��B
|
�傫�ȃT�C�Y�̃f�[�^��]������ɂ�(1) | ||||||||
�ʏ��SRAM��Ƀo�b�t�@���m�ۂ��ăf�[�^���������邱�ƂɂȂ�܂��B ATmega88P��SRAM�T�C�Y��1KB(1024byte)�ł��BATmega328P����2KB(2048byte)����܂��B �����ŁAATmega328P���g���ASRAM�Ƀo�b�t�@���m�ۂ���Ƃ��āA�z�X�g(PC)��V-USB�f�o�C�X�Ԃ�1KB(1024byte)�̃f�[�^�𑗎�M���邱�Ƃ��l���Ă݂܂��B �R���g���[���]���𗘗p����ꍇ V-USB�̃f�t�H���g�ł́A�R���g���[���]���ɂ��f�[�^�T�C�Y��254byte�܂łł��B 255byte�ȏ���w�肵�Ă͂����܂���B255��USB_NO_MSG�̒�`�l�Ƃ��Ďg�p����Ă��܂��B
hid-data�̃��|�[�g�f�X�N���v�^�����������Ď��������Ƃ���A254byte����ɓ]���ł��܂����B ��hid-data��usbFunctionSetup()��'128'�ƃn�[�h�R�[�f�B���O���Ă���̂Œ��ӁB������'254'�ɏC������B 254byte���傫�����邱�Ƃ��ł��܂��B������16384byte�܂łł��B ���̏ꍇ�AUSB_NO_MSG��'sizeof(unsigned)-1'�Ƃ��Ē�`����Ă��܂��B
�ȏ���A1024byt�̃f�[�^��]������ɂ͎��̂悤�ɂ��܂��B
|
�傫�ȃT�C�Y�̃f�[�^��]������ɂ�(2) | |||
�C���^���v�g�]���𗘗p����ꍇ ���|�[�g�f�X�N���v�^�ɍ���[INPUT]�W���L�q���܂��B ��F
�C���^���v�g�]������ɂ̓f�o�C�X��main.c�̃��C�����[�v���ŁAusbPoll()�̌��usbSetInterrupt()���R�[������K�v������܂��B�C���^���v�g�]���ɂ���x�̓]����8byte�܂łł��B������傫�ȃf�[�^��]���������Ȃ�R���g���[���]�����g���Ƃ̂��ƁB
�ȏ���A�C���^���v�g�]���ő傫�ȃT�C�Y�̃f�[�^��]������ɂ́H �� �����Ă��Ȃ��B |
���|�[�g�^�C�v�̊��蓖�ė� | ||||||||||||||||
���|�[�g�f�X�N���v�^���L�q���邱�Ƃɂ��A�l�X�ȃf�[�^�]���̃p�^�[���i���o�͂̕�����f�[�^�T�C�Y�j��g�ݍ��ނ��Ƃ��ł��܂��B�ȉ��ɁA���ۂɂ�肻���ȗ�������܂��B��������������ē���m�F�ł��Ă��܂��B (A) �C���^���v�g�]��(IN)���g�p����
8byte����T�C�Y���C���^���v�g�]�����邱�Ƃ��ł��܂����i�����ς݁j�A�����ɏ]�����Ƃɂ��܂��B (B) �T�C�Y�ʁ^�ړI�ʂɕ������� �R�}���h�i���T�C�Y:16byte�j�ƃf�[�^�i��T�C�Y:512byte�j�̂悤�Ɏg����B
(C) ���G�ȑg�ݍ��킹 ���o�͕����Ɗe�T�C�Y���ׂ����ݒ肷���B
���L�̂悤�Ɋ��蓖�Ă��Ƃ���A�ړI�̓�������܂����B
V-USB�͍��ݓ��������|�[�gID�̎g�p�ɂ͑Ή�������Ȃ��̂�������܂���i�H�j�@���̃R�����g��hid-data�ɂ��Ă̘b�Ȃ̂��AV-USB�Ƃ��Ă�����������ŊJ�����Ă����Ƃ������ƂȂ̂��A�s���ł��B
���|�[�g�f�X�N���v�^�̋L�q���i�ԍ��͏�L�p�^�[���ɑΉ��j (A)
(B)
(C)
|
�T���v���v���O���� | |||||
�u���|�[�g�^�C�v�̊��蓖�ė� (C) ���G�ȑg�ݍ��킹�v�̃\�[�X�������܂��B
�S�̃_�E�����[�h�͂�����B
������e
�܂��Afeature���|�[�g��256byte����M�e�X�g���Ă��܂��B0x00�`0xFF�𑗐M���A��M�ł������Ƃ�\���Ă��܂��B ���ɁAoutput���|�[�g��16byte���M�e�X�g���Ă��܂��B ������feature���|�[�g�Ńf�[�^����M���A16byte���������M�ł��Ă������Ƃ��m�F���Ă��܂��B �Ō�ɁA�C���^���v�g�]��(IN)�̎�M�e�X�g�����Ă��܂��B PC2��GND�ƃV���[�g�����u�ԁA�u00 3B 22 ... 88�v����M���܂����B0x3B��0b00111011�iPC2��0�ɂȂ��Ă���j PC2���I�[�v���ɂ����u�ԁA�u00 3F 22 ... 88�v����M���܂����B0x3F��0b00111111�iPC2��1�ɖ߂��Ă���j |
�����ɗp������H | ||
|
���@���@�� |
V-USB�̎g�����̓T���v���f�o�C�X���Q�l�ɂȂ�܂��B����������E�g������`�� ���̂��͍̂�ꂻ���ł��B���g�����Ȃ��ɂ�USB�̒m�����K�v�ł��B �ƌ����Ă��uV-USB���g������x�Ɂv�ƍi��A�����𗝉����Ȃ��Ă����v�ł��B V-USB��USB�̃R���g���[�����قƂ�ǂ���Ă���܂��B HID�f�o�C�X�����ɂ̓��|�[�g�f�X�N���v�^�̏������𗝉�����K�v������܂��B �ł��������f�o�C�X�̂悤�ɕ��G�Ȃ��̂����Ȃ���A�K���ł����Ƃ��Ȃ�܂��B |
(C) �w����t�]�x�H�쎺 | �m�g�b�v�y�[�W�֖߂�n |