deyun 发表于 2013-6-8 10:08:48

USBasp官方源代码疑似错误发现。

USBasp是一个很成熟的设计,很早我就想研究和分析一下这个项目可是一直没时间,最近有点小空闲,看了一下源代码,发现了好多问题值得我们分析一下是否需要修改:
1.原理图中的红色二极管和绿色二极管接法跟usbasp.h中定义不同,看上去是颠倒了,但是如果修正
/* macros for gpio functions */
#define ledRedOn()    PORTC &= ~(1 << PC1)
#define ledRedOff()   PORTC |= (1 << PC1)
#define ledGreenOn()PORTC &= ~(1 << PC0)
#define ledGreenOff() PORTC |= (1 << PC0)
又跟main.c中的
/* all inputs except PC0, PC1 */
DDRC = 0x03;
PORTC = 0xfe;
有不对劲的地方,因此可以判定是原理图红绿颠倒。

2.默认时钟太高
ISP默认时钟为375会导致部分低速芯片无法识别,建议修改成187.5,修改的代码如下:
void ispSetSCKOption(uchar option) {
if (option == USBASP_ISP_SCK_AUTO)
option = USBASP_ISP_SCK_187_5;
if (option >= USBASP_ISP_SCK_93_75) {
ispTransmit = ispTransmit_hw;
sck_spsr = 0;
sck_sw_delay = 1;        /* force RST#/SCK pulse for 320us */
switch (option) {
case USBASP_ISP_SCK_1500:
/* enable SPI, master, 1.5MHz, XTAL/8 */
sck_spcr = (1 << SPE) | (1 << MSTR) | (1 << SPR0);
sck_spsr = (1 << SPI2X);
case USBASP_ISP_SCK_750:
/* enable SPI, master, 750kHz, XTAL/16 */
sck_spcr = (1 << SPE) | (1 << MSTR) | (1 << SPR0);
break;
case USBASP_ISP_SCK_375:
/* enable SPI, master, 375kHz, XTAL/32*/
sck_spcr = (1 << SPE) | (1 << MSTR) | (1 << SPR1);
sck_spsr = (1 << SPI2X);
break;
case USBASP_ISP_SCK_187_5:
default:
/* enable SPI, master, 187.5kHz XTAL/64 (default) */
sck_spcr = (1 << SPE) | (1 << MSTR) | (1 << SPR1);
break;
case USBASP_ISP_SCK_93_75:
/* enable SPI, master, 93.75kHz XTAL/128 */
sck_spcr = (1 << SPE) | (1 << MSTR) | (1 << SPR1) | (1 << SPR0);
break;
}
还有好多问题还没有仔细分析,有时间我就贴出来我们大家讨论一下。

lsy5110 发表于 2013-6-9 16:04:00

我顶你!
页: [1]
查看完整版本: USBasp官方源代码疑似错误发现。