《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 业界动态 > 采用PDIUSBD12的USB系统固件程序设计

采用PDIUSBD12的USB系统固件程序设计

2008-09-16
作者:周 涛 张 辉

  摘  要: 在设计USB系统的过程中,固件" title="固件">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序" title="固件程序">固件程序的编写是非常重要的一个环节,它直接影响到开发产品的数据传输速度。以Phillips公司的USB控制芯片PDIUSBD12为例,介绍了在设计开发USB外设中,固件的作用以及固件程序的编写流程,并给出了相应程序。

  关键词: USB  固件程序  PDIUSBD12  端点  单片机

 

  USB(Universal Serial Bus)即通用串行总线,是现在非常流行的一种技术。USB接口是一种快速、双向、廉价、可以进行热插拔的串行接口,在现在的每一台PC机上都可以找到一对USB接口。在遵循USB1.1规范的基础上,USB接口最高传输速率可达12Mb/s;而在最新的USB2.0规范下,更可以达到480Mb/s。同时它可以支持多个不同设备的串联连接,理论上可以连接127个USB设备,而且连接的方式也十分灵活,既可以使用串行连接,也可以使用集线器(Hub)把多个设备连接在一起,再同PC机的USB接口相连。此外,它还可以从系统中直接汲取电流,无需单独的供电系统。USB的这些特点使它获得了广泛的应用。但是使用上的方便则意味着开发上的复杂,主要是编程的复杂性大大增加了。

  在设计开发一个USB外设的时候,开发者主要需要编写三部分程序:①固件程序;②USB驱动程序;③客户应用程序。本文主要阐述固件程序的编写。

1 固件要完成的工作

  固件是FIREWARE的对应中文词,它实际上是单片机的程序文件,其编写语言可以采用C语言或是汇编语言。它的操作方式与硬件联系紧密,包括USB设备的连接、USB协议、中断处理等,它不是单纯的软件,而是软件和硬件的结合,开发者需要对端口、中断和硬件结构非常熟悉。固件程序一般放入MCU中,当把设备连接到主机上(USB连接线插入插孔)时,上位机可以发现新设备,然后建立连接。因此,编写固件程序的一个最主要的目的就是让Windows可以检测和识别设备。

2 PDIUSBD12芯片特点

  PDIUSBD12是一个性能优化的USB器件,通常用于基于微控制器" title="微控制器">微控制器的系统,并通过高速通用并行接口与微控制器进行通信,而且支持本地DMA传输。该器件采用模块化的方法实现一个USB接口,允许在众多可用的微控制器中选择最合适的作为系统微控制器,允许使用现存的体系结构使固件投资减到最小。这种灵活性减少了开发时间、风险和成本。该器件是开发成本低且高效的USB外围设备的一种有效途径。PDIUSBD12完全符合USB1.1规范,也能适应大多数设备类规范的设计,如成像类、大容量存储类、通信类、打印类和人工输入设备等。因此,PDIUSBD12非常适合做很多外围设备,如打印机、扫描仪、外部大容量存储器(Zip驱动器)和数码相机等。现在很多用SCSI实现的很多设备如果用USB来实现可以直接降低成本。

  PDIUSBD12还集成了SoftConnect、GoodLink、可编程时钟输出、低频晶振和终端电阻等特性。所有这些特性都能在系统实现时节省成本,同时在外围设备上很容易实现更高级的USB功能。

3 PDIUSBD12固件程序的编写

  USB设备启动流程如下:

  (1)USB设备接入USB口,发出连接USB命令;

  (2)主机发出读设备描述符" title="描述符">描述符两次;

  (3)主机根据设备描述符——厂商ID、产品ID,启动相应设备驱动程序;

  (4)设备驱动程序初始化USB设备;

    ①读设备描述符;

  ②读配置描述符;

  ③选择接口、端点(管道),确定传输方式。

  图1是PDIUSBD12的电路连接图。

 

 

  USB固件程序通常由三部分组成:①初始化单片机和所有的外围电路(包括PDIUSBD12);②主循环部分,其任务是可以中断的;③中断服务程序,其任务是对时 间敏感的,必须马上执行。根据USB协议,任何传输都是由主机(Host)开始的,单片机作它的前台工作,等待中断。主机首先要发令牌" title="令牌">令牌包给USB设备(这里是PDIUSBD12),PDIUSBD12接收到令牌包后就给单片机发中断。单片机进入中断服务程序,首先读PDIUSBD12的中断寄存器,判断USB令牌包的类型,然后执行相应的操作。在USB单片机程序中,要完成对各种令牌包的响应,其中比较难处理的是SETUP包,主要是端口0的编程。

  单片机与PDIUSBD12的通信主要是靠单片机给PDIUSBD12发命令和数据来实现的。PDIUSBD12的命令字分为三种:初始化命令字、数据流命令字和通用命令字。PDIUSBD12数据手册给出了各种命令的代码和地址。单片机先给PDIUSBD12的命令地址发命令,根据不同命令的要求再发送或读出不同的数据。因此,可以将每种命令做成函数,用函数实现各个命令,以后直接调用函数即可。

  下面的程序是处理主机的标准控制请求的一个模板:

  unsigned char ENDPOINT_A0_FIFO[8];

    //判断输入的是SETUP请求,并将其读入缓冲区ENDPOINT_A0_FIFO

    ...

    if((ENDPOINT_A0_FIFO[0] & 0b01100000)==0x00)               {

    {    

         if (ENDPOINT_A0_FIFO[1] <= 0x0C)

            {

           (*StandardFunctionTable[ENDPOINT_A0_FIFO[1]])();

            return;

            }

    }

    ...

      const void (* StandardFunctionTable[])(void)=

    {

           GetStatus,ClearFeature,USB_Reserved,SetFeature,

           USB_Reserved,SetAddress,GetDescriptor,SetDescriptor,

           GetConfiguration,SetConfiguration,GetInterface,

           SetInterface,SynchFrame

    };

  USB设备在正常使用以前,必须由主机配置设备。主机一般会从USB设备获取配置信息后再确定此设备有哪些功能。

作为配置操作的一部分,主机会设置设备的配置值,如果必要的话会选择合适的接口备选设置。其初始化函数为:

  void D12_int()

  {  XmtBuff.pNum = 16;

         D12_COMMAND = 0xf4;        // 读中断寄存器

         ist = D12_DATA;

         if(ist & 0x01)              //ENDP0_OUT

         {  XmtBuff.out = 0;

              XmtBuff.in  = 1;

              D12_COMMAND = 0x40;    //读 OUT 最后状态

              ist= D12_DATA;

  if (ist & 0x20)                    //收到 SETUP 包

        {  Setup_read();

           Setup_control();

        }

        else

              {     Setup_read();

              }

       }

       else if(ist & 0x02)          //ENDP0_IN

       {     XmtBuff.in  = 1;

             D12_COMMAND = 0x41;   //读 in 最后状态

             ist = D12_DATA;

      USB_submit();

       }

       else if(ist & 0x04)        //ENDP1_OUT

       {     XmtBuff.out = 2;

             XmtBuff.in  = 3;

             D12_COMMAND = 0x42;  //读 out 最后状态

       ist = D12_DATA;

       read_out();

  }

       else if(ist & 0x08)//ENDP1_IN

       {     XmtBuff.in  = 3;

           D12_COMMAND = 0x43;   //读 in 最后状态

           ist = D12_DATA;

        XmtBuff.b[0] = 5;

         XmtBuff.wrLength = 1;

         XmtBuff.p = XmtBuff.b;

         USB_submit();

       }

  ……

  在发出连接USB命令后,主机先读取设备描述符,然后发出设置USB地址SETUP包,设置USB地址后,进行主机客户驱动与设备初始化。其余端点(ENDPOINT)依此类推。

  在其头文件里需定义USB规范中的各种描述符格式,包括设备描述表、配置描述表、接口描述表、端点描述表、字符串描述表以及描述表类型。这样,在发送配置[,接口(1),端点(1),接口(2),端点(2),...,类,厂商等]联合描述表时,主机USBD可以根据描述表类型标识区分各种分描述表。

  下面是固件程序的主循环部分:

  #include

  //指向外部D12访问地址

  #define D12_COMMAND(*(unsigned char xdata *)0xff01)

  #define D12_DATA     (*(unsigned char xdata *)0x7f02)

  extern void D12_int();

  sbit D12_suspend=P1^0;

  sbit D12_int_n=P1^1;

  sbit D12_eot_n=P1^2;

  sbit D12_DMAck_n=P1^3;

  sbit D12_DMAreq=P1^4;

  void main(void)

  {

  unsigned char ist;

      P1 = 0xff;

      D12_COMMAND = 0xf3;

      D12_DATA = 0x06;//设置模式0

      D12_DATA = 0x03;//初始化频率 12MHz

      D12_COMMAND = 0xd0;

      D12_DATA = 0x80;//设置地址 0 使能

      D12_COMMAND = 0xf3;//连接主机

      D12_DATA = 0x16;

      while(1)

      {  if(!D12_int_n)

          {  

                    D12_int();

          }

      }

  }

  在编写USB的固件程序时,需要注意:

  ①单片机的中断应设置为电平触发;中断后一定要读上次传输状态寄存器(命令40~45H),以清除中断寄存器中的中断标志。这样,PDIUSBD12的中断输出才能变回高电平,这一点非常重要。

  ②在接收到Setup包后,一定要调用D8命令重新使能端口0。

  ③在向IN端点写完数据后,一定调用命令FAH,指明缓冲区中的数据有效,可以发送到主机。

  ④读完数据后,一定调用命令F2H,以保证可以接收新的包。

  ⑤可以通过调用命令FDH,检查PDIUSBD12是否工作。该命令要读两个字节数据。

  固件程序的编写是整个USB外设开发中非常重要的一环,它直接影响到设计开发的产品的数据传输速度。例如,采用不同的传输类型、设置不同的分组大小、是否采用DMA方式、传输缓冲区的大小等都会使得传输速度发生很大的变化。还有在高速情况下的超时处理等,也包含了很多的内容。

  总之,在USB技术应用越来越广泛的今天,只有掌握了固件程序的编写,才可能开发出一个好的USB产品。

 

参考文献

1 张念淮,江浩. USB总线接口开发指南.北京:国防工业出版社,2001

2 Jan Axelson.USB大全.北京:中国电力出版社,2001

3 Chris Cant.Windows WDM设备驱动程序开发指南.北京:机械工业出版所,2000

4 Universal Serial Bus Specification Revision 1.1,1998.9

5 PDIUSBD12数据手册, 2001
本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。