|
|
View previous topic :: View next topic |
Author |
Message |
biomed12
Joined: 05 Feb 2016 Posts: 33
|
18f4550 Usb Hid Device Problem [Solved] |
Posted: Sun Dec 18, 2016 6:16 pm |
|
|
EDIT: IN FACT IT WAS NOT A PROBLEM. I SUPPOSED THAT MY DEVICE WILL BE SEEN IN THE DEVICE MANAGER WITH ITS NAME. BUT, IT DOESN'T SEEN. SO, IT IS NOT A PROBLEM. THE DEVICE IS SUCCESSFULLY COMMUNICATING WITH MY PC. IT LOOKS AS A "HID DEVICE" AND PROJECT WIZARD WORKS PROPERLY.
Hello everyone,
I am studying the USB protocol and I need to implement some device classes. I implemented a cdc and bulk device with 18f4550 using project wizard. There are OK and run properly. Bu I can't run hid device. I created it with project wizard, neither polling method nor interrupt method don't work. I plug my pic to usb and in device manager I saw a USB device under HID Devices and I hear "da da" windows plug sound. I tried to update driver of it but it did not change. My codes are below and also I attached my hex file. If anyone can try it I will be very happy. I think, the last option is maybe Windows 10.
header file:
Code: |
#include <18F4550.h>
#device ADC=10
#FUSES NOWDT,PLL5,HSPLL //No Watch Dog Timer
#use delay(clock=48MHz,crystal=20MHz,USB_FULL)
#define USB_ISR_POLLING
#define USB_CONFIG_VID 0x0461
#define USB_CONFIG_PID 0x0020
#define USB_CONFIG_BUS_POWER 100
#define USB_STRINGS_OVERWRITTEN
char USB_STRING_DESC_OFFSET[]={0,4,26};
char const USB_STRING_DESC[]={
//string 0 - language
4, //length of string index
0x03, //descriptor type (STRING)
0x09,0x04, //Microsoft Defined for US-English
//string 1 - manufacturer
22, //length of string index
0x03, //descriptor type (STRING)
'U',0,
'S',0,
'B',0,
' ',0,
'T',0,
'E',0,
'S',0,
'T',0,
'E',0,
'R',0,
//string 2 - product
20, //length of string index
0x03, //descriptor type (STRING)
'U',0,
'S',0,
'B',0,
' ',0,
'T',0,
'E',0,
'S',0,
'T',0,
' ',0
};
#define USB_CONFIG_HID_TX_SIZE 64
#define USB_CONFIG_HID_RX_SIZE 64
#include <pic18_usb.h>
#include <usb_desc_hid.h>
#include <usb.c>
|
source file:
Code: |
#include <main.h>
/* TODO: Use usb_put_packet() to transmit data to USB HID,
using USB_HID_ENDPONT for the endpoint and the payload size
needs to match USB_CONFIG_HID_TX_SIZE. Use usb_get_packet()
to read incomming data, using USB_HID_ENDPOINT for the
endpoint. usb_enumerated() can be used to see if connected to
a host and ready to communicate. */
void main()
{
usb_init_cs();
while(TRUE)
{
// USB code
usb_task();
//TODO: User Code
}
} |
Hex file:
https://yadi.sk/d/WYqKKj5633zMWV
*20mhz/pll5
Thanks!
Last edited by biomed12 on Tue Dec 20, 2016 6:57 pm; edited 1 time in total |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19516
|
|
Posted: Mon Dec 19, 2016 2:08 am |
|
|
Always tell us your compiler version...
I would be explicitly enabling the USB VREG (VREGEN), and disabling LVP. If you look at the CCS examples, the fuses they use for the 4550, are:
HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
The Wizard, is a very good way of getting things 'wrong'... Better to work out your own set of fuses for the chip, make sure they are running, and then use these for all your projects on that chip.
However one thing leaps out in your string descriptor. No serial number. The CCS HID device descriptor (which you are presumably using, since you don't post your own one), includes the flag to require this.
Serial numbers in USB are only 'mandatory' on MSC devices. However they are recommended on HID devices (except keyboard and mouse). Microsoft use the serial number in their HID driver to generate the instance ID. With the flag set, and the number missing, I don't think the device will enumerate. |
|
|
biomed12
Joined: 05 Feb 2016 Posts: 33
|
|
Posted: Mon Dec 19, 2016 7:06 am |
|
|
Ttelmah wrote: |
However one thing leaps out in your string descriptor. No serial number. The CCS HID device descriptor (which you are presumably using, since you don't post your own one), includes the flag to require this.
|
How can I repair this issue? |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19516
|
|
Posted: Mon Dec 19, 2016 8:08 am |
|
|
Put a serial number in your string descriptor. Look at the examples. |
|
|
biomed12
Joined: 05 Feb 2016 Posts: 33
|
|
Posted: Mon Dec 19, 2016 5:31 pm |
|
|
Ttelmah wrote: | Put a serial number in your string descriptor. Look at the examples. |
Compiler Version: 5.064
I think the problem is windows 10. Because I tried a comlete project hex file which has been shared on github, It doesn't work, too. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19516
|
|
Posted: Tue Dec 20, 2016 1:58 pm |
|
|
Why not just try adding the serial number?.
The point is that W10, is much 'stricter' about errors than the older OS's. It'll not allow things to work, that you could 'get away with' on the older systems. Forces you to get things 'right'. Don't assume anything you download will work correctly with your hardware (90% of posted code, when you look at it only works by 'luck'). |
|
|
biomed12
Joined: 05 Feb 2016 Posts: 33
|
|
Posted: Tue Dec 20, 2016 6:01 pm |
|
|
The device has a serial number as you see in the link below.
http://i.hizliresim.com/vXbdRA.png
EDIT: The problem is solved and i added the explanation to the first message's first line. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|