USB protocol analyzer

Dependencies:   mbed

/media/uploads/va009039/lpc1114-usb.jpg

control:
/media/uploads/va009039/lpc1114-usb-1.png

interrupt in:
/media/uploads/va009039/lpc1114-usb-2.png

Committer:
va009039
Date:
Wed Jun 18 01:33:32 2014 +0000
Revision:
0:0faa55631ffe
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 0:0faa55631ffe 1 #include "mbed.h"
va009039 0:0faa55631ffe 2 #include "BaseUsbProtocolAnalyzer.h"
va009039 0:0faa55631ffe 3 //
va009039 0:0faa55631ffe 4 // USB LPC1114FN28
va009039 0:0faa55631ffe 5 // 1 VCC
va009039 0:0faa55631ffe 6 // 2 DATA- dp18(P1_9)
va009039 0:0faa55631ffe 7 // 3 DATA+ dp17(P1_8)
va009039 0:0faa55631ffe 8 // 4 GND GND
va009039 0:0faa55631ffe 9
va009039 0:0faa55631ffe 10 DigitalOut led1(LED1),led2(LED2);
va009039 0:0faa55631ffe 11 DigitalIn usb_dm(P1_9);
va009039 0:0faa55631ffe 12 DigitalIn usb_dp(P1_8);
va009039 0:0faa55631ffe 13 RawSerial pc(USBTX, USBRX);
va009039 0:0faa55631ffe 14
va009039 0:0faa55631ffe 15 const int BUF_SIZE = 512;
va009039 0:0faa55631ffe 16 uint8_t buf[BUF_SIZE+256];
va009039 0:0faa55631ffe 17
va009039 0:0faa55631ffe 18 class USB_Protocol_Analyzer : public BaseUsbProtocolAnalyzer {
va009039 0:0faa55631ffe 19 virtual void output(char c) {
va009039 0:0faa55631ffe 20 pc.putc(c);
va009039 0:0faa55631ffe 21 }
va009039 0:0faa55631ffe 22 };
va009039 0:0faa55631ffe 23
va009039 0:0faa55631ffe 24 USB_Protocol_Analyzer analyzer;
va009039 0:0faa55631ffe 25
va009039 0:0faa55631ffe 26 extern "C" {
va009039 0:0faa55631ffe 27 uint8_t* usbcapture_lpc1114(uint8_t* buf, uint8_t* end);
va009039 0:0faa55631ffe 28 }
va009039 0:0faa55631ffe 29
va009039 0:0faa55631ffe 30 void usbcapture_setup()
va009039 0:0faa55631ffe 31 {
va009039 0:0faa55631ffe 32 usb_dm.mode(PullNone);
va009039 0:0faa55631ffe 33 usb_dp.mode(PullNone);
va009039 0:0faa55631ffe 34
va009039 0:0faa55631ffe 35 LPC_SYSCON->SYSAHBCLKCTRL |= 1<<8; // CT16B1
va009039 0:0faa55631ffe 36 LPC_IOCON->PIO1_8 = (LPC_IOCON->PIO1_8 & ~0x7) | 0x1; // FUNC=CT16B1_CAP0
va009039 0:0faa55631ffe 37 LPC_TMR16B1->TCR |= 1; // Counter Enable
va009039 0:0faa55631ffe 38 LPC_TMR16B1->CCR |= 7; // CAP0RE,CAP0FE,CAP0I
va009039 0:0faa55631ffe 39 }
va009039 0:0faa55631ffe 40
va009039 0:0faa55631ffe 41 int main() {
va009039 0:0faa55631ffe 42 pc.baud(115200);
va009039 0:0faa55631ffe 43 pc.puts(__FILE__);
va009039 0:0faa55631ffe 44 pc.puts("\n");
va009039 0:0faa55631ffe 45
va009039 0:0faa55631ffe 46 usbcapture_setup();
va009039 0:0faa55631ffe 47
va009039 0:0faa55631ffe 48 for(int n = 0; ; n++) {
va009039 0:0faa55631ffe 49 uint8_t* end = usbcapture_lpc1114(buf, buf+BUF_SIZE);
va009039 0:0faa55631ffe 50 analyzer.init();
va009039 0:0faa55631ffe 51 for(uint8_t* p = buf; p < end; p++) {
va009039 0:0faa55631ffe 52 analyzer.input(*p);
va009039 0:0faa55631ffe 53 if (*p == 0) {
va009039 0:0faa55631ffe 54 pc.puts("\n");
va009039 0:0faa55631ffe 55 }
va009039 0:0faa55631ffe 56 }
va009039 0:0faa55631ffe 57 pc.puts("\n\n");
va009039 0:0faa55631ffe 58 Timer t;
va009039 0:0faa55631ffe 59 t.reset();
va009039 0:0faa55631ffe 60 t.start();
va009039 0:0faa55631ffe 61 while(t.read_ms() < 1000*3 + n%100) {
va009039 0:0faa55631ffe 62 }
va009039 0:0faa55631ffe 63 led1 = !led1;
va009039 0:0faa55631ffe 64 }
va009039 0:0faa55631ffe 65 }
va009039 0:0faa55631ffe 66