搜索
bottom↓
回复: 52

固件验证通过,猜猜这是什么?

[复制链接]

出0入0汤圆

发表于 2010-9-10 20:43:04 | 显示全部楼层 |阅读模式

(原文件名:MiniHJ.jpg)

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2010-9-10 20:47:13 | 显示全部楼层
ARM仿真器?

出0入0汤圆

发表于 2010-9-10 20:56:35 | 显示全部楼层
好像是哪个仿真器,还真猜不出来

出0入0汤圆

 楼主| 发表于 2010-9-10 20:58:20 | 显示全部楼层
呵呵,MiniHJ联想一下。

出0入0汤圆

发表于 2010-9-10 21:03:28 | 显示全部楼层
MINI h-JTAG? 好像原版里有cpld 啊

出0入0汤圆

发表于 2010-9-10 21:09:48 | 显示全部楼层
和USB BLASTER很像!

出0入0汤圆

 楼主| 发表于 2010-9-10 21:16:37 | 显示全部楼层
to 【4楼】 boboo 波波:
这是DIY裁剪版。

出0入168汤圆

发表于 2010-9-10 21:34:56 | 显示全部楼层
高人。

出0入0汤圆

发表于 2010-9-10 21:37:58 | 显示全部楼层
jlink?

出0入0汤圆

发表于 2010-9-10 22:35:00 | 显示全部楼层
不是jlink,jlink有个ARM7

出0入0汤圆

 楼主| 发表于 2010-9-10 22:42:36 | 显示全部楼层
to 【8楼】,【9楼】:
6楼说明了。

出0入168汤圆

发表于 2010-9-10 22:43:43 | 显示全部楼层
有没更详细的资料?速度怎么样?

出0入0汤圆

 楼主| 发表于 2010-9-10 22:50:12 | 显示全部楼层
并口的速度。

出0入0汤圆

发表于 2010-9-11 00:09:58 | 显示全部楼层
唉 并口的速度真是糟蹋cy7c68013a了……

出0入0汤圆

 楼主| 发表于 2010-9-11 09:38:40 | 显示全部楼层
to 【13楼】 minux 啊啊?
搞破解都讲究个循序渐进,这只是一个原型验证,全功能的不远了。

出0入0汤圆

 楼主| 发表于 2010-9-24 00:08:02 | 显示全部楼层
USB H-JTAG DIY成功。

(原文件名:HJ.JPG)

出0入0汤圆

发表于 2010-9-24 00:24:00 | 显示全部楼层
这个还是在猜图上比较麻烦,有电路的话,68013还是比较容易搞定的
还是用老外的,呵呵

出0入0汤圆

 楼主| 发表于 2010-9-24 02:33:56 | 显示全部楼层
68013只是一个简单的FIFO,关键是FPGA的verilog代码,写了两天,不分昼夜。


(原文件名:HJ_verilog.jpg)

出0入168汤圆

发表于 2010-9-24 21:03:43 | 显示全部楼层
牛人一个。

出0入0汤圆

发表于 2010-9-24 21:28:33 | 显示全部楼层
【17楼】 hontor

我原以为它也是通过MCU进行的FPGA配置.
原来你是自己写的FPGA的代码呀.

以前读书时用68013A的时候,用Slave FIFO方式总是莫名其妙的出问题,速度倒很快,30多MB/s,但传着传着MCU的FIFO标志就不对了,好像是有个信号一直就不再有效,这时通过上位机发一个端点复位,标志又正常,一直没找到原因,想是不是布线时USB部分没做阻抗匹配,但不应该影响到Slave FIFO模式的标志呀.什么时候再把板子拿出来查查.

出0入0汤圆

 楼主| 发表于 2010-9-26 23:15:08 | 显示全部楼层
经过优化,完全可以使用A3P060,原版使用A3P125,容量比060大一倍,价格却是吓人,足有4倍。

出0入0汤圆

发表于 2010-9-27 02:36:14 | 显示全部楼层
【17楼】 hontor

我好奇这个做了FPGA做了些什么?
能否给点细节?

另外,速度如何?TCK频率最高多少?RAM下载速度最快多少?

出0入0汤圆

发表于 2010-9-27 02:54:35 | 显示全部楼层
【19楼】 hiberhe

不会是USB没做阻抗匹配的问题,我曾经调试过一个2层板的cy7c68013A电路,
连USB两条差分线等长都没怎么控制…… 照样轻松上40MB/s,无误码。

出0入0汤圆

 楼主| 发表于 2010-9-27 20:44:15 | 显示全部楼层
【19楼】 hiberhe
FIFO很稳定,40M的单向速率没问题,可达2.0的极限。

【21楼】 minux
FPGA主要分4个模块:FIFO收发模块、命令处理模块、MCU配置模块、LED处理模块。使用A3P060编译只用了1000个D触发器(2/3),不明白原版怎么使用3072个D触发器的A3P125,太浪费资源了。
原版使用30M的FIFO,最高TCK可达15M。所有速率均和原版相同,ARM7理论上可达750KB/S。
如果采用48M的FIFO,最高TCK可达24M,ARM7理论上可达1MB/S以上。

出0入0汤圆

发表于 2010-9-27 22:13:10 | 显示全部楼层
【23楼】 hontor  
能不能共享一下FIFO收发模块部分的代码,要能够进行收发就行了,我想在原来的板子上试一下,一直没找到FIFO flag错误的原因.我以前是直接在fpga中不停的判断flag标志,然后写slave fifo,速度倒是能上到40MB/s,而且也没有误码,但就是操作一段时间后,会出来flag再也无效的情况.

出0入0汤圆

 楼主| 发表于 2010-9-27 22:43:35 | 显示全部楼层
这是一个读取例子,只要FIFO不空就一直读取。
case(State)
    4'b0000:
        begin
        fifo_cs_reg <= 1'b0;
        fifo_addr_reg <= 2'b00;
        State <= 4'b0001;
        end
    4'b0001:
        begin
        if(fifo_empty)
            begin
            fifo_rd_reg <= 1'b0;
            fifo_oe_reg <= 1'b0;
            State <= 4'b0010;
            end
        end
    4'b0010:
        begin
        fifo_rd_reg <= 1'b1;
        fifo_oe_reg <= 1'b1;
        fifo_data_reg <= fifo_data;
        State <= 4'b0001;
        end
endcase

出0入0汤圆

发表于 2010-9-28 23:35:03 | 显示全部楼层
【23楼】 hontor

就是说,其实FPGA就是计算机做了个高级的基于高速USB的bit-bang接口?

话说为啥用Actel的ProASIC3的FPGA呢?就是防止破_解么…… 从资源和价格上来说都不如xc3s50an啊。。。

Actel的FPGA用的versatile的粒度太细,现代的FPGA一般都不用那么细粒度的了……
而且每个tile还只能实现3-LUT....

出0入0汤圆

 楼主| 发表于 2010-9-29 21:35:29 | 显示全部楼层
使用Actel的FPGA,就是因为Flash架构,可以加密,而CPLD容量又不能满足要求。

出0入0汤圆

发表于 2010-9-30 08:58:49 | 显示全部楼层
如果是破_解HJTAG,建议不要公开,也不要拿来卖,请支持HJTAG

出0入0汤圆

 楼主| 发表于 2010-9-30 21:05:54 | 显示全部楼层
【28楼】 mpuhome
目前只是自己用的,由于没钱,买不起标准版,更买不起增强版,普及版买了一个,却再也买不到了,于是乎一生气......
现在硬件成本100不到,三个版本都已实现,自己用,送送朋友,还没考虑卖,等哪天吃不饱饭了,再考虑,呵呵......

出0入0汤圆

发表于 2010-10-1 01:04:50 | 显示全部楼层
现在注_册个公司 做破_解,然后通知H-JTAG,收购你了,这样你就不失业了

出0入0汤圆

发表于 2010-10-1 21:06:34 | 显示全部楼层
【27楼】 hontor

想保密的话,各个环节都必须仔细考虑的…… 这种光靠FPGA来做加密的话,就像
计算机软件只靠加壳保护一样。

呵呵,你能成功反向也证明了它最初选择Actel FPGA的非常错误…… 哈哈

出0入0汤圆

发表于 2010-10-1 22:33:12 | 显示全部楼层
回复楼上:呵呵,你能成功反向也证明了它最初选择Actel FPGA的非常错误…… 哈哈 此话还是有问题!

选那个都是可以破_解 因为如果你抓了USB数据包+读取了EEPROM的数据+硬件都可以仿制出的话, 选那个FPGA有啥区别 ?

请不吝赐教!!

出0入0汤圆

发表于 2010-10-1 22:45:08 | 显示全部楼层
个人觉得 学习 H-J-T-A-G的USB协议这块是比较有价值的!!

出0入0汤圆

发表于 2010-10-1 22:52:27 | 显示全部楼层
to 【33楼】 MTO1

有价值在哪儿?做D版?

出0入0汤圆

 楼主| 发表于 2010-10-1 23:42:16 | 显示全部楼层
【30楼】 MTO1
要是如你所说,人家taoist还不发了!
【36楼】 MTO1
反汇编EEPROM,将会一无所获,或许你反汇编1楼那个原理图的EEPROM还会有点用。
FPGA可不是画出来的,1000行的verilog代码综合成门电路可不好画。

出0入0汤圆

 楼主| 发表于 2010-10-2 00:04:24 | 显示全部楼层
【38楼】 MTO1
站着说话不腰疼,你就是扯破了天我也不公开,有本事自己做一个,那才配得上一个高工。

出0入0汤圆

发表于 2010-10-2 01:00:31 | 显示全部楼层
mirrorok 的马甲  鉴定完毕

出0入0汤圆

发表于 2010-10-2 01:41:03 | 显示全部楼层
竟然删帖…… ft

出0入0汤圆

发表于 2010-10-2 01:52:39 | 显示全部楼层
呵呵,你能成功反向也证明了它最初选择Actel FPGA的非常错误…… 哈哈 !! 为什么错误!!

出0入0汤圆

发表于 2010-10-2 10:26:23 | 显示全部楼层
下面提供一个CDC的主函数和处理函数 ,希望对大家有用

//*--------------------------------------------------------------------------------------
//*      ATMEL Microcontroller Software Support  -  ROUSSET  -
//*--------------------------------------------------------------------------------------
//* The software is delivered "AS IS" without warranty or condition of any
//* kind, either express, implied or statutory. This includes without
//* limitation any warranty or condition with respect to merchantability or
//* fitness for any particular purpose, or against the infringements of
//* intellectual property rights of others.
//*--------------------------------------------------------------------------------------
//* File Name           : main.c
//* Object              :
//* Translator          :
//* 1.0 08/Sep/04 JPP        : Creation
//*--------------------------------------------------------------------------------------

#include <string.h>
#include "board.h"
#include "cdc_enumerate.h"

#include "Packet.h"


//#define FW_VERSION_MAJOR                0
//#define FW_VERSION_MINOR                1
//#define FW_VERSION_BUILD                0x1
#define FW_REVISION                                0x0006 //((FW_VERSION_MAJOR << 24) | (FW_VERSION_MINOR << 16) | FW_VERSION_BUILD)

#define SIZEBUFMAX                                 64
#define CHAINDATAMAX                         8192
#define TDIOFFSET                                8

/*
#define PIO_INTERRUPT_LEVEL                6
#define IRQ0_INTERRUPT_LEVEL        2
#define SOFT_INTERRUPT_LEVEL        5
#define FIQ_INTERRUPT_LEVEL                0
*/
/*
#define PIO_TRST                                AT91C_PIO_PA28
#define PIO_TCK                                        AT91C_PIO_PA29
#define PIO_TMS                                        AT91C_PIO_PA30
#define PIO_TDI                                        AT91C_PIO_PA31
#define PIO_TDO                                        AT91C_PIO_PA27
*/

#define PIO_TRST                                AT91C_PIO_PA7
#define PIO_BLUE_LED                        AT91C_PIO_PA3

// Variable
struct _AT91S_CDC         pCDC;

char g_aTms[] = {0x6A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00};
//char g_aTms[] = {0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00};
//char g_aTms[] = {0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00};
char g_aTmsIdle[1024];
char g_aTdiIdle[8];
char g_aTdoIdle[1024];
char g_aTapData[CHAINDATAMAX + TDIOFFSET];

volatile int g_nPause;
volatile int g_nTckDiv;
//*----------------------------------------------------------------------------
//* \fn    AT91F_USB_Open
//* \brief This function Open the USB device
//*----------------------------------------------------------------------------
/*__ramfunc*/ void AT91F_USB_Open(void)
{
    // Set the PLL USB Divider
    AT91C_BASE_CKGR->CKGR_PLLR |= AT91C_CKGR_USBDIV_1 ;

    // Specific Chip USB Initialisation
    // Enables the 48MHz USB clock UDPCK and System Peripheral USB Clock
    AT91C_BASE_PMC->PMC_SCER = AT91C_PMC_UDP;
    AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_UDP);

    // Enable UDP PullUp (USB_DP_PUP) : enable & Clear of the corresponding PIO
    // Set in PIO mode and Configure in Output
/*
    AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,AT91C_PIO_PA16);
        // Set
        AT91F_PIO_SetOutput(AT91C_BASE_PIOA,AT91C_PIO_PA16);
        for (unsigned i=0; i<g_nPause; i++);
    // Clear
    AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91C_PIO_PA16);
*/
    // CDC Open by structure initialization
    AT91F_CDC_Open(&pCDC);
}
//*----------------------------------------------------------------------------
//* \fn    AT91F_L0USB_PUT_Data
//* \brief This function allows data tx by USART
//*----------------------------------------------------------------------------
/*__ramfunc*/ inline void AT91F_L0USB_PUT_Data(char* data,unsigned int length)
{
        pCDC.Write(&pCDC, data, length);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_L0USB_GET_Data
//* \brief This function allows data tx by USART
//*----------------------------------------------------------------------------
/*__ramfunc*/ inline int AT91F_L0USB_GET_Data(char* data,unsigned int length, int wait_all=0)
{
        return pCDC.Read(&pCDC, data, length, wait_all);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_L1USB_PUT_Data
//* \brief This function allows data tx by USART
//*----------------------------------------------------------------------------
/*__ramfunc*/ void AT91F_L1USB_PUT_Data(char* data,unsigned int length)
{
        unsigned int size;

        while(length)
        {
                size = (length<SIZEBUFMAX) ? length : SIZEBUFMAX;
                AT91F_L0USB_PUT_Data(data, size);
                length -= size;
                data += size;
        }
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_L1USB_GET_Data
//* \brief This function allows data tx by USART
//*----------------------------------------------------------------------------
/*__ramfunc*/ void AT91F_L1USB_GET_Data(char* data,unsigned int length)
{
        unsigned int size;

        while(length)
        {
                size = AT91F_L0USB_GET_Data(data, (length<SIZEBUFMAX) ? length : SIZEBUFMAX);
                length -= size;
                data += size;
        }
}
/*
void AIC_Reset(void)
{
        unsigned int i;
//        AT91C_BASE_AIC->AIC_EOICR = 0x0;
        // 悟觌噱?怦?桉蝾黜桕?镳屦囗栝
        AT91C_BASE_AIC->AIC_IDCR = 0xFFFFFFFF;
        // 西棂噱?怦?镳屦囗?
        AT91C_BASE_AIC->AIC_ICCR = 0xFFFFFFFF;
        // 悟觌噱?镥痂翦痂?铗 耔耱屐眍泐 觌铌?
        AT91C_BASE_PMC->PMC_PCDR = 0xFFFFFFFF;
        // 厌疣覃忄屐 綦嚆?蜞殪屦钼
        i = AT91C_BASE_TC0->TC_SR;
        i = AT91C_BASE_TC1->TC_SR;
        i = AT91C_BASE_TC0->TC_SR;
        for (i=0;i < 8;i++)
        {
                // 埋?镳屦囗? 玎觐眵屙?
                AT91C_BASE_AIC->AIC_EOICR = 0xFFFFFFFF;
        }
}
*/

/*__ramfunc*/ inline void SPI_Init()
{
        AT91F_SPI_Disable(AT91C_BASE_SPI);
        AT91F_SPI_Reset(AT91C_BASE_SPI);

        AT91F_SPI_CfgMode(AT91C_BASE_SPI,
//                AT91C_SPI_MSTR |
                AT91C_SPI_PS_FIXED);

        AT91F_SPI_CfgCs(AT91C_BASE_SPI, 0,
                AT91C_SPI_CPOL        |
                (AT91C_SPI_BITS & AT91C_SPI_BITS_8) |
                (AT91C_SPI_DLYBS & (2 << 16))
//                (AT91C_SPI_SCBR & (CS_BAUD << 8))
        );

        AT91F_SPI_Enable(AT91C_BASE_SPI);
}

/*__ramfunc*/ inline void SSC_Init(unsigned nDiv)
{
        AT91C_BASE_SSC->SSC_CR = AT91C_SSC_SWRST | AT91C_SSC_RXDIS | AT91C_SSC_TXDIS;
//        AT91C_BASE_SSC->SSC_RCMR = 0;
//        AT91C_BASE_SSC->SSC_RFMR = 0;
       
        AT91C_BASE_SSC->SSC_CMR = nDiv; // (MCK/512)
        AT91C_BASE_SSC->SSC_RCMR = AT91C_SSC_CKS_RK |
//                                                                AT91C_SSC_CKS_TK |
                                                                AT91C_SSC_CKI |
//                                                                AT91C_SSC_START_CONTINOUS |
                                                                AT91C_SSC_START_FALL_RF
//                                                                AT91C_SSC_START_LOW_RF// |
//                                                                AT91C_SSC_START_TX// |
//                                                                (AT91C_SSC_STTDLY&(1<<16))
//                                                                AT91C_SSC_PERIOD&(31<<24)
                                                                ;
        AT91C_BASE_SSC->SSC_RFMR = AT91C_SSC_DATLEN&7 |
                                                                (AT91C_SSC_DATNB&(7<<8));

        AT91C_BASE_SSC->SSC_TCMR = AT91C_SSC_CKS_DIV |
                                                                AT91C_SSC_CKO_CONTINOUS |
//                                                                AT91C_SSC_CKI |
//                                                                 AT91C_SSC_START_LOW_RF                |
                                                                AT91C_SSC_START_CONTINOUS//        |
//                                                                (AT91C_SSC_STTDLY&(2<<16))
//                                                                AT91C_SSC_PERIOD&(4<<24)
                                                                ;
        AT91C_BASE_SSC->SSC_TFMR = AT91C_SSC_DATLEN&7                |
                                                                AT91C_SSC_MSBF                        |
                                                                AT91C_SSC_DATNB&(7<<8)        |
                                                                AT91C_SSC_FSOS_LOW
                                                                ;
       
        AT91C_BASE_SSC->SSC_CR = AT91C_SSC_RXEN | AT91C_SSC_TXEN;
}

/*__ramfunc*/ inline void ResetAll()
{
        AT91F_PIO_CfgPeriph( AT91C_BASE_PIOA, // PIO controller base address
                AT91C_PA11_NPCS0        |        // CS
                AT91C_PA12_MISO                |        // SPI Slave Out
                AT91C_PA13_MOSI                |        // SPI Master Out
                AT91C_PA14_SPCK                |        // SPI Slave Clock
                AT91C_PA15_TF                |        // SSC Tx Frame Sync
                AT91C_PA16_TK                |        // SSC Tx Clock
                AT91C_PA17_TD                |        // SSC Tx Data
                AT91C_PA20_RF                |        // SSC Rx Frame Sync
                  AT91C_PA19_RK                |        // SSC Rx Clock
                AT91C_PA18_RD, 0);                // SSC Rx Data
       
        AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, PIO_TRST);
//        AT91F_PIO_SetOutput(AT91C_BASE_PIOA, PIO_TRST); // Clear Output ?
        AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, PIO_TRST);
        AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, PIO_BLUE_LED);
        AT91F_PIO_SetOutput(AT91C_BASE_PIOA, PIO_BLUE_LED);
       
        AT91C_BASE_SSC->SSC_CR = AT91C_SSC_SWRST | AT91C_SSC_RXDIS | AT91C_SSC_TXDIS;
        AT91F_SPI_Disable(AT91C_BASE_SPI);
        AT91F_SPI_Reset(AT91C_BASE_SPI);
}

/*__ramfunc*/ inline void DMA_Init()
{
        AT91F_PDC_Open(AT91C_BASE_PDC_SPI);
        AT91F_PDC_Open(AT91C_BASE_PDC_SSC);
}

/*__ramfunc*/ inline void DMA_WaitUntilEmpty()
{
        while (!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXEMPTY));
        SSC_Init(g_nTckDiv);
//        DMA_Init();
}

/*__ramfunc*/ void PacketHandler(CPacket *pPacket)
{
        switch (pPacket->m_nId)
        {
                case PKT_ID_SETUP:
                {
                        CSetupPacket *pIn = (CSetupPacket *) pPacket;
                        AT91F_SPI_CfgPMC();
                        SPI_Init();
                        AT91F_SSC_CfgPMC();
                        SSC_Init(pIn->m_nTckDiv);
                        g_nTckDiv = pIn->m_nTckDiv;
                        DMA_Init();

                        AT91F_PIO_SetOutput(AT91C_BASE_PIOA, PIO_TRST);
                        break;
                }
                case PKT_ID_CHAIN:
                {
                        CChainPacket *pIn = (CChainPacket *) pPacket;
                        int i;
//                        memset(g_aTapData, 0xAA, 64); // Debug

                        DMA_WaitUntilEmpty();
                        if (pIn->m_bReset)
                        {
                                AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, PIO_TRST);

//                                AT91F_PDC_SetTx(AT91C_BASE_PDC_SPI, g_aTdiIdle, pIn->m_nBDataSize); // NEW
                                AT91F_PDC_SetRx(AT91C_BASE_PDC_SSC, g_aTdoIdle, pIn->m_nBDataSize);
                                AT91F_PDC_SetTx(AT91C_BASE_PDC_SSC, g_aTmsIdle, pIn->m_nBDataSize);
                                DMA_WaitUntilEmpty();
                               
                                AT91F_PIO_SetOutput(AT91C_BASE_PIOA, PIO_TRST);
                               
//                                AT91F_PDC_SetTx(AT91C_BASE_PDC_SPI, g_aTdiIdle, pIn->m_nIdleCount); // NEW
                                AT91F_PDC_SetRx(AT91C_BASE_PDC_SSC, g_aTdoIdle, pIn->m_nIdleCount);
                                AT91F_PDC_SetTx(AT91C_BASE_PDC_SSC, g_aTmsIdle, pIn->m_nIdleCount);
                                DMA_WaitUntilEmpty();
                                break;
                        }
                       
                        AT91F_L0USB_GET_Data(g_aTapData + TDIOFFSET, pIn->m_nBDataSize, 1);

                        SPI_Init();
                        AT91F_PDC_SetTx(AT91C_BASE_PDC_SPI, g_aTdiIdle, 3);
                        AT91F_PDC_SetNextTx(AT91C_BASE_PDC_SPI, g_aTapData+TDIOFFSET, 5);
                        AT91F_PDC_SetRx(AT91C_BASE_PDC_SSC, g_aTdoIdle, 1);
                        AT91F_PDC_SetNextRx(AT91C_BASE_PDC_SSC, g_aTapData, 7);
                        AT91F_PDC_SetTx(AT91C_BASE_PDC_SSC, g_aTms, 8);
//                        for (i=4; i>=0; i--)
//                                g_aTapData
                        unsigned nCount = (pIn->m_nBDataSize*52429) >> 18; // div 5

               
                        for (i=1; i<nCount; i++)
                        {
                                DMA_WaitUntilEmpty();
//                                AT91F_PDC_SetTx(AT91C_BASE_PDC_SPI, g_aTdiIdle, pIn->m_nIdleCount); // NEW
                               
// <rev.6>
//                                g_nPause = 1024;
//                                while (g_nPause && (AT91F_PDC_ReceiveFrame(AT91C_BASE_PDC_SSC, g_aTdoIdle, pIn->m_nIdleCount, NULL, 0) != 2)) g_nPause--;
//                                while (g_nPause && (AT91F_PDC_SendFrame(AT91C_BASE_PDC_SSC, g_aTmsIdle, pIn->m_nIdleCount, NULL, 0) != 2)) g_nPause--;
// </rev.6>
                                AT91F_PDC_SetRx(AT91C_BASE_PDC_SSC, g_aTdoIdle, pIn->m_nIdleCount); // 6
                                AT91F_PDC_SetTx(AT91C_BASE_PDC_SSC, g_aTmsIdle, pIn->m_nIdleCount); // 6
                               
                                DMA_WaitUntilEmpty();
                                SPI_Init();
// <rev.6>
//                                while (g_nPause && (AT91F_PDC_SendFrame(AT91C_BASE_PDC_SPI, g_aTdiIdle, 3, g_aTapData+TDIOFFSET+i*5, 5) != 2)) g_nPause--;
//                                while (g_nPause && (AT91F_PDC_ReceiveFrame(AT91C_BASE_PDC_SSC, g_aTdoIdle, 1, g_aTapData+i*5, 7) != 2)) g_nPause--;
//                                while (g_nPause && (AT91F_PDC_SendFrame(AT91C_BASE_PDC_SSC, g_aTms, 8, NULL, 0) != 2)) g_nPause--;
// </rev.6>
                                AT91F_PDC_SetTx(AT91C_BASE_PDC_SPI, g_aTdiIdle, 3); // 6
                                AT91F_PDC_SetNextTx(AT91C_BASE_PDC_SPI, g_aTapData+TDIOFFSET+i*5, 5); // 6
                                AT91F_PDC_SetRx(AT91C_BASE_PDC_SSC, g_aTdoIdle, 1); // 6
                                AT91F_PDC_SetNextRx(AT91C_BASE_PDC_SSC, g_aTapData+i*5, 7); // 6
                       
                                AT91F_PDC_SetTx(AT91C_BASE_PDC_SSC, g_aTms, 8); // 6
                        }
                        DMA_WaitUntilEmpty();

//                        AT91F_PDC_SetTx(AT91C_BASE_PDC_SPI, g_aTdiIdle, pIn->m_nIdleCount); // NEW
                        AT91F_PDC_SetRx(AT91C_BASE_PDC_SSC, g_aTdoIdle, pIn->m_nIdleCount);
                        AT91F_PDC_SetTx(AT91C_BASE_PDC_SSC, g_aTmsIdle, pIn->m_nIdleCount);                       

                        break;
                }
                case PKT_ID_GET_DATA:
                {
                        CGetDataPacket *pIn = (CGetDataPacket *) pPacket;
                        DMA_WaitUntilEmpty();
                        AT91F_L0USB_PUT_Data(g_aTapData+pIn->m_nOffset, pIn->m_nBDataSize);
                        break;
                }
                case PKT_ID_GET_STATUS:
                {
                        CGetStatusPacket *pIn = (CGetStatusPacket *) pPacket;
                        pIn->m_nFwRevision = FW_REVISION;
                        pIn->m_nTms = AT91C_BASE_PDC_SSC->PDC_TCR;
                        pIn->m_nTdi = AT91C_BASE_PDC_SPI->PDC_TCR;
                        pIn->m_nTdo = AT91C_BASE_PDC_SSC->PDC_RCR;
                        AT91F_L0USB_PUT_Data((char*) pIn, pIn->m_nBPacketSize);
                        break;
                }
                case PKT_ID_RESET:
                {
                        ResetAll();
                        break;
                }
        }
}

//*--------------------------------------------------------------------------------------
//* Function Name       : main
//* Object              :
//* Input Parameters    :
//* Output Parameters   :
//*--------------------------------------------------------------------------------------
/*__ramfunc*/ int main (void)
{
        char aPacket[SIZEBUFMAX];
        int nLen;
       
        int i;
        for (i=0; i<sizeof(g_aTmsIdle); i++)
                g_aTmsIdle = 0;
        for (i=0; i<sizeof(g_aTdiIdle); i++)
                g_aTdiIdle = 0xFF;
//        memset(g_aTmsIdle, 0, sizeof(g_aTmsIdle));
//        memset(g_aTdiIdle, 0xFF, sizeof(g_aTdiIdle));
       
        // Init USB device
        AT91F_USB_Open();
        ResetAll();
       
/*       
        AT91F_PIO_CfgPeriph( AT91C_BASE_PIOA, // PIO controller base address
                AT91C_PA11_NPCS0        |        // CS
                AT91C_PA12_MISO                |        // SPI Slave Out
                AT91C_PA13_MOSI                |        // SPI Master Out
                AT91C_PA14_SPCK                |        // SPI Slave Clock
                AT91C_PA15_TF                |        // SSC Tx Frame Sync
                AT91C_PA16_TK                |        // SSC Tx Clock
                AT91C_PA17_TD                |        // SSC Tx Data
                AT91C_PA20_RF                |        // SSC Rx Frame Sync
                  AT91C_PA19_RK                |        // SSC Rx Clock
                AT91C_PA18_RD, 0);                // SSC Rx Data
       
        AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, PIO_TRST);
//        AT91F_PIO_SetOutput(AT91C_BASE_PIOA, PIO_TRST); // Clear Output ?
        AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, PIO_TRST);
        AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, PIO_BLUE_LED);
        AT91F_PIO_SetOutput(AT91C_BASE_PIOA, PIO_BLUE_LED);
*/
        // Wait enumeration
        while(!pCDC.IsConfigured(&pCDC));
       
        // Start waiting some cmd
        while (1)
        {
                nLen = AT91F_L0USB_GET_Data(aPacket, SIZEBUFMAX);
                if (nLen)
                {
                        AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, PIO_BLUE_LED);
                        PacketHandler((CPacket *)aPacket);
                        AT91F_PIO_SetOutput(AT91C_BASE_PIOA, PIO_BLUE_LED);
                }
        }
}

出0入0汤圆

发表于 2010-10-2 10:27:11 | 显示全部楼层
预祝hontor能做出单片ARM的仿真器来 呵呵!!

出0入0汤圆

 楼主| 发表于 2010-10-2 10:53:53 | 显示全部楼层
脑袋让驴踢了吗?

出0入0汤圆

发表于 2010-10-2 11:19:12 | 显示全部楼层
【45楼】 MTO1 是淘宝 mirrorok 的马甲   昨天刚被我指出来,今天就把资料改了   呵呵

出0入0汤圆

发表于 2010-10-3 21:33:28 | 显示全部楼层
http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.e.html
http://www.ztex.de/firmware-kit/example.e.html
http://www.ztex.de/downloads/index.e.html#firmware_kit

出0入0汤圆

发表于 2010-10-4 10:09:10 | 显示全部楼层
这个,mark……

出0入0汤圆

发表于 2010-11-14 09:18:19 | 显示全部楼层
不错,过下眼睛

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-8-26 23:38

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

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