搜索
bottom↓
回复: 53

最近试了一下AVR-USB,感觉不错

[复制链接]

出0入0汤圆

发表于 2006-11-15 00:31:29 | 显示全部楼层 |阅读模式
其实AVR-USB的所有资料网上都可以找到,测试过M48,M88,M168和M8,均可正常使用,一些测试应用占用了大概2K空间(代码最大size优化,IAR)

PC端的驱动使用libusb(linux),Libusb-Win32(windows)



一下是一些图片,明天会再整理一些贴出来,包括串口命令行界面





测试了几个晚上:





另外一个应用,纯粹好玩:串口命令行界面(以前用在LPC芯片上,现在移植到了AVR上,用了大概1.5K空间),正在移植XMODEM协议的代码





showpara命令:

uint8 ShowPara(uint8 **argv,uint8 argc)

{

        uint8 i;



        for(i = 0;i < argc;i++)

        {

                Shell_WriteLine(argv);

        }

        return SHELLERR_SUCCESS;

}


-----此内容被chengyingavr于2006-11-15,00:41:27编辑过

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2006-11-15 23:20:36 | 显示全部楼层
大家好像对AVR-USB都不太赶兴趣,可能涉及到什么Lincense的问题,代码就不贴上来了



就贴一段,嵌入式的命令行界面吧,我做的这个命令行界面叫S-Shell



一共有5个文件:

shell.h       // 头文件

shell_cfg.h   // 配制头文件

shell_cmd.h   // 命令头文件

shell.c       // 实现代码

readme.txt    // 说明文件,内容有待更新



介绍一下具体的思路:

在shell_cmd.h中定义了各个命令

typedef struct _cmd

{

        STR_DEF cmd_str;                // command string

        uint8 (*cmd_func)(uint8 **argv,uint8 argc);

        STR_DEF cmd_info;

}CMD,*PCMD;



// extern userdefined command functions

#define SHELL_CMD_HIDEIDX        11

const CMD Shell_CMDs[]        =        {

                                                        {STR_TYP("help"),Shell_Help,STR_TYP("Shell Help.")},

                                                        {STR_TYP("cls"),Shell_Clear,STR_TYP("Clear the Shell Output.")},

                                                        {STR_TYP("quit"),Shell_Exit,STR_TYP("Quit S-Shell.")},

                                                        {STR_TYP("version"),Shell_Ver,STR_TYP("Show Shell version.")},

#if SHELL_COLOR_EN == 1

//                                                        {STR_TYP("color"),Shell_color,STR_TYP("Shell Set Attr.")},

#endif

                                                        {STR_TYP("s"),ShowPara,STR_TYP("Show Parameters.")},

                                                        {STR_TYP(0),(void *)0,STR_TYP(0)}

                                                        };





在main函数中,只要如下调用就可以进入命令行界面:

Shell_Init();

Shell_Run();



其中Shell_Run和相关的函数是整个命令行界面的核心:

void Shell_Run(void)

{

        Shell_State = Shell_State_Running;



        while(Shell_State == Shell_State_Running)

        {

                Shell_WriteStr_P(Shell_Str);

                Shell_ReadLine(Shell_LineBuff,SHELL_LINE_BUFFER_SIZE,Shell_EchoChar);

                if(strlen((const char*)Shell_LineBuff) != 0)

                        Shell_DoCMD(Shell_LineBuff);

        }



        Shell_Fini();

}



当检测到有一行命令输入后,调用Shell_DoCMD,解析命令的参数,并调用相应的命令函数:

static uint8 Shell_DoCMD(uint8 *CMD)

{

        int8 i = -1;

#if HAS_MALLOC == 1

        uint8 **para = (uint8**)0,para_num = 0;

#else

        uint8 para_num = 0;

#endif                // #if HAS_MALLOC == 1



#if HAS_MALLOC == 1

        para_num = Shell_ParsePara((uint8**)0,CMD);

        para = (uint8**)malloc(para_num * sizeof(uint8*));

#endif                // #if HAS_MALLOC == 1

        para_num = Shell_ParsePara(para,CMD);



        if(para_num  == 0)

                return SHELLERR_CMD_NOT_FOUND;



        while(Shell_CMDs[++i].cmd_str != 0)

                if(!strcmp_P((const char*)para[0],Shell_CMDs.cmd_str))

                        return Shell_CMDs.cmd_func(para,para_num);



        Shell_WriteStr_P(STR_T("COMMAND:\""));

        Shell_WriteStr(para[0]);

        Shell_WriteLine_P(STR_T("\" not found"));



#if HAS_MALLOC == 1

        free(para);

        para = (uint8**)0;

#endif                // #if HAS_MALLOC == 1



        return SHELLERR_CMD_NOT_FOUND;

}



其中Shell_ParsePara是做命令行解析,提取命令参数,使得命令函数的参数和main函数的一样,然后在Shell_CMDs中寻找匹配的命令,调用相关的函数。



底层的接口由shell_cfg.h实现,如果移植到其他的系统,大多数情况下只需要修改shell_cfg.h(至少移植到LPC的ARM7芯片上如此):

#define Shell_WriteChar(CH)                        USART_Transmit((CH))

#define Shell_ReadChar()                        USART_Receive()

#define Shell_Interface_Init()                USART_Init(USART_DOUBLESPEED | /*((uint8)(F_CPU / (8 * USART_BAUDRATE)) - 1)*/12,USART_8N1,USART_INT_NOINT)

#define Shell_Interface_Fini()       

其中,USART_Transmit,USART_Receive,USART_Init需要根据不同的系统另外实现。由于代码中的类型定义基本使用类似uint8,int8等方式,所以在shell_cfg.h中还需要定义或者包含相关的类型定义语句





其他还有一些附加的功能,比如如果使用Windows的超级终端的话,可以通过发送转移字符来更改字体和背景的颜色,也可以增加用户登陆过程或者也可以自己加上启动的选项



整个代码(这个是测试版本,等到测试了足够长的时间后没有问题的话就可以认为是正式版本了):

点击此处下载armok01135383.rar

-----此内容被chengyingavr于2006-11-15,23:37:31编辑过


-----此内容被chengyingavr于2006-11-15,23:40:12编辑过

出0入0汤圆

发表于 2006-11-16 11:08:18 | 显示全部楼层
支持一下

出0入0汤圆

发表于 2006-11-16 11:59:21 | 显示全部楼层
libusb在哪里找到?

出0入0汤圆

 楼主| 发表于 2006-11-16 16:15:56 | 显示全部楼层
libusb是sourceforge下的一个GUN项目,项目主页为http://libusb.sourceforge.net/

Libusb-Win32也是sourceforge下的一个开源项目,使用DDK开发,程序接口(API)和libusb相同

上面有说明和帮助文档



帮助文档:

点击此处下载armok01135439.rar



AVR-USB主页:http://www.obdev.at/products/avrusb/index.html相关的代码都可以下载
头像被屏蔽

出0入0汤圆

发表于 2006-11-17 01:15:54 | 显示全部楼层
置成COOL。



尽量将资料上传上来吧。不要怕版权问题。如果发生纠纷,我们会与原始网站与作者沟通。

出0入0汤圆

 楼主| 发表于 2006-11-17 20:27:19 | 显示全部楼层
先上传驱动程序,其实并不需要写驱动程序,只需要把lib加入到工程中去,并调用相关的API就可以了。驱动程序安装文件使用inf-wizard.exe来生成,驱动程序为库中自带的libusb0.dll和libusb0.sys。



测试程序:

点击此处下载armok01135545.rar



基本上所有的USB设备都可以用libusb来写驱动,其实SLISP软件也使用到了这个库。



Linux下还有一个选择,就是使用usbserial,对/dev/ttyUSBn进行直接的读写操作就可以实现,非常简单,但是速度并不快(虽然实现usbserial设备需要使用批量传输)。测试的时候发现libusb要比usbserial快1倍以上。
-----此内容被chengyingavr于2006-11-17,20:29:18编辑过

出0入0汤圆

 楼主| 发表于 2006-11-17 20:50:13 | 显示全部楼层
S-Shell GCC移植,考虑到论坛上使用GCC的居多,上传GCC下的移植代码



由于在写这个程序的时候考虑过一些通用性(可能不是考虑的很全面,如果测试其他的系统有什么通用性的问题希望能mail我),需要修改的只有2个.h文件



点击此处下载armok01135546.rar



1.shell_cfg.h:移植一般只需要修改这个文件,配制运行的环境

2.shell_cmd.h:由于GCC把字符串定义在FLash的方法特殊,所以需要修改Shell_CMDs,当然如果有其他的命令要增加的话,也需要修改shell_cmd.h文件。(如果有什么更加通用的方法,请mail我)


-----此内容被chengyingavr于2006-11-17,20:51:02编辑过

出0入0汤圆

 楼主| 发表于 2006-11-18 09:30:24 | 显示全部楼层
FW程序,用过的应该比较了解了,修改了一些描述符



点击此处下载armok01135557.rar



PCB:

点击此处下载armok01135558.rar



SCH:

点击此处打开armok01135576.pdf



所有资料上传完毕

出0入0汤圆

发表于 2006-11-18 15:39:50 | 显示全部楼层
非常感谢楼主~~



传得这么辛苦,不支持不行啊~

出0入0汤圆

发表于 2006-11-18 18:44:02 | 显示全部楼层
不错谢谢~

出0入0汤圆

发表于 2007-10-13 08:48:09 | 显示全部楼层
多谢!

出0入0汤圆

发表于 2007-10-13 08:55:25 | 显示全部楼层
有没有HID类的实现???需要安装驱动的总觉得不方便啊……
呵呵……

出0入0汤圆

发表于 2007-10-13 14:34:49 | 显示全部楼层
非常感谢

出0入0汤圆

发表于 2007-10-13 14:39:56 | 显示全部楼层
好东西要顶

出0入0汤圆

发表于 2007-10-13 16:12:23 | 显示全部楼层
好,太好了

出0入0汤圆

发表于 2007-10-15 09:19:32 | 显示全部楼层
好,顶!!!

出0入0汤圆

发表于 2007-10-15 09:49:40 | 显示全部楼层
谢谢了. 若整理成全套资料串上来就可以做范例了.

出0入0汤圆

发表于 2007-10-15 09:55:04 | 显示全部楼层
2006年的帖子又被翻出来了.

出0入0汤圆

发表于 2007-10-15 12:47:11 | 显示全部楼层
现在流行挖坟...
和USBASP一类的吧,用的是同一个驱动?

出0入0汤圆

发表于 2007-10-15 14:32:05 | 显示全部楼层
强!
不过我做AVR-USB的HID总是有问题,http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=796155&bbs_page_no=1&search_mode=4&search_text=sprhawk&bbs_id=1000

出0入0汤圆

发表于 2007-10-15 14:52:17 | 显示全部楼层
强!正需要这方面资料,谢谢楼主

前天有看了下AVR USB官方网站的几个项目,因为初学,还不懂怎么使用这个库,正打算做试验试试看。

如果楼主能教一教AVR USB的具体用法就更好了。 :-)

出0入50汤圆

发表于 2007-10-15 15:10:23 | 显示全部楼层
呵呵,楼主曾经是ATMEL代理的FAE,曾经有过一面之缘,现在我们都辞职了,想必楼主混得不差了,^_^

出0入0汤圆

发表于 2007-10-15 16:37:05 | 显示全部楼层
学习ing.......

出0入0汤圆

发表于 2008-5-26 14:29:13 | 显示全部楼层
顶老帖     楼主能否说说把AVR-USB 移到IAR编译器下啊

出0入0汤圆

发表于 2008-5-26 14:40:32 | 显示全部楼层
mark

出0入42汤圆

发表于 2008-5-26 17:56:51 | 显示全部楼层
mark

出0入22汤圆

发表于 2008-5-26 20:44:31 | 显示全部楼层
虽然是老帖,还是要顶。

出0入0汤圆

发表于 2008-5-27 23:19:06 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-5-28 00:14:52 | 显示全部楼层
非常不错
标记一下
明天 学习学习

出0入0汤圆

发表于 2008-5-28 12:56:27 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2010-4-13 09:41:08 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-13 13:26:40 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-13 13:34:09 | 显示全部楼层
顶老帖。

出0入0汤圆

发表于 2010-4-13 15:55:09 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-13 17:04:44 | 显示全部楼层
好东西,不得不顶

出0入0汤圆

发表于 2010-4-13 18:22:29 | 显示全部楼层
cool

出0入0汤圆

发表于 2010-4-13 22:30:56 | 显示全部楼层
很有用

出0入0汤圆

发表于 2010-4-28 15:12:56 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-11 19:46:09 | 显示全部楼层
果断market

出0入0汤圆

发表于 2010-6-13 21:43:50 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2010-6-19 18:47:21 | 显示全部楼层
古墓派

出0入0汤圆

发表于 2010-7-13 09:00:32 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-9 16:00:12 | 显示全部楼层
liu ming

出0入0汤圆

发表于 2010-10-21 12:52:36 | 显示全部楼层
好东西

出0入0汤圆

发表于 2010-10-26 20:01:31 | 显示全部楼层
超级终端,在那里能找到呢!!请教指点!!!

出0入0汤圆

发表于 2010-10-26 20:02:50 | 显示全部楼层
能否发一份给我,zenghuabengbeng@sina.com谢谢

出0入0汤圆

发表于 2010-10-26 20:55:07 | 显示全部楼层
厉害,其它的也能做么?

出0入0汤圆

发表于 2011-1-5 10:30:51 | 显示全部楼层
学习啊

出0入0汤圆

发表于 2011-5-3 13:52:30 | 显示全部楼层
顶一个

出0入0汤圆

发表于 2011-10-20 10:45:42 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-20 10:55:36 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-12 17:05

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表