📄 flashwriterdlg.cpp
字号:
}
void CFlashWriterDlg::UpdateFileInfomation()
{
BYTE data[USE_BLOCK0_SIZE];
UINT Count=0;
FillMemory(data,USE_BLOCK0_SIZE,0xFF);
for (UINT i=0 ; i < m_FileInforCount ; i++ )
{
data[Count++]=( m_FileInformation[i].StartAddress >> 16 ) & 0xFF;
data[Count++]=( m_FileInformation[i].StartAddress >> 24 ) & 0xFF;
data[Count++]=m_FileInformation[i].StartAddress & 0xFF;
data[Count++]=( m_FileInformation[i].StartAddress >> 8 ) & 0xFF;
data[Count++]=( m_FileInformation[i].Size >> 16 ) & 0xFF;
data[Count++]=( m_FileInformation[i].Size >> 24 ) & 0xFF;
data[Count++]=m_FileInformation[i].Size & 0xFF;
data[Count++]=( m_FileInformation[i].Size >> 8 ) & 0xFF;
}//end for
NFlashWrite(&data[0],0,USE_BLOCK0_SIZE);
}
void CFlashWriterDlg::OnPlayFile()
{
int Block=0;
int Status;
unsigned char data[512];
static char szFilter[] = _T("BIN Files(*.BIN;*.BN1;*.BN2;MRC)|*.BIN;*.BN1;*.BN2;*.MRC||");
CFileDialog FileDlg( TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter );
CString FileName;
unsigned char *FileDataPtr;
int Temp_Counter;
do{
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((CleCommand+0x60)<<16 | 0000)); //Erase Nandflash CMD1
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((Ale1ByteCommand+((Block<<6)&&0xff))<<16 | 0001)); //Row Address 1
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((Ale1ByteCommand+((Block>>2)&&0xff))<<16 | 0002)); //Row Address 2
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((CleCommand+0xd0)<<16 | 0003)); //Erase Nandflash CMD2
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (WaitReady<<16 | 0004)); //Wait Busy
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (ReadStatus<<16 | 0005)); //Read Status
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (Read1ByteToY0<<16 | 0006)); //Read Status
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (NandFlashCommandEnd<<16 | 0007)); //Read Status
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_ExcuteCommandRam_Cmd+USB_Special_Patten, 0); //Excute Nandflash Program
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_Program_Jmp_Cmd+USB_Special_Patten, UpLoadY0Data); //Excute Nandflash Program
data[0]=0;
data[1]=0;
Status = USBICE_Read(&data[0], 64);
if (data[0]!=0x55 || data[1]!=0xaa)
break;
else
{
Status = data[2];
Status = data[3];
}
m_Status.Format("%d",Block);
UpdateData(false);
Block++;
}while (Block<10);
if (FileDlg.DoModal()==IDOK)
{
//----Read File Manager in NF Block0 Page 0------------------
m_Status = "1: Read File Info";
UpdateData(false);
Sleep(100);
FileName = FileDlg.GetPathName();
CFile f_tmp;
unsigned long FileLength,DownloadLength;
BYTE *ProgramData;
if ( ! f_tmp.Open(FileName, CFile::modeRead) )
{
AfxMessageBox("File could not be opened",MB_OK,0);
return;
}
FileLength = f_tmp.GetLength();
UINT k = FileLength / 512 ;
if ( FileLength <= 512 )
DownloadLength = 512;
else if ( ! ( FileLength % 512 ) )
DownloadLength = FileLength;
else
DownloadLength = ( k + 1 ) * 512;
ProgramData = new BYTE[DownloadLength];
FillMemory(ProgramData,DownloadLength,0xFF);
f_tmp.Read(ProgramData,FileLength);
f_tmp.Close();
UINT StartAddress;
StartAddress =0;
m_Status = "2: Program";
UpdateData(false);
FileDataPtr=&ProgramData[0];
Temp_Counter = 0;
do
{
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((0xb000)<<16 | SetIx1Value)); //Erase Nandflash CMD1
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd( SET_ADDRESS + USB_Special_Patten , 512/2 ); //设置数据个数
USB_Special_Patten = USB_Special_Patten + 0x40;
// Write4L_Cmd(USB_Program_Jmp_Cmd+USB_Special_Patten, DownloadData); //Excute Download Program
Sleep(1);
USBICE_Write( FileDataPtr , 512 );
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(Check_Status+USB_Special_Patten, 0); //Excute Download Program
data[0]=0;
data[1]=0;
Status = USBICE_Read(&data[0], 64);
FileDataPtr=FileDataPtr+512;
//Write Data To Nandflash init
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((CleCommand+0x80)<<16 | 0000)); //Write page Nandflash CMD1
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (Ale4ByteCommand<<16 | 0001)); //Row Address 1
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (NandFlashCommandEnd<<16 | 2)); //Nandflash End
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((StartAddress&&0xff)<<16 | 20)); //Set X0 Value
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (((StartAddress&&0x700)|(((StartAddress&&0xffff800)<<5)&&0xff0000))<<8 | 22)); //Set mr0 Value
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (((StartAddress<<5)&&0xff000000)>>8 | 23)); //Set mr1 Value
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_ExcuteCommandRam_Cmd+USB_Special_Patten, 0); //Excute Nandflash Program
Sleep(50);
// USB_Special_Patten = USB_Special_Patten + 0x40;
// Write4L_Cmd(Check_Status+USB_Special_Patten, 0); //Excute Download Program
// Status = USBICE_Read(&data[0], 64);
//Write to Nandflash
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((0xb000)<<16 | SetIx1Value));
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((00)<<16 | SetIx1bkramValue));
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (256<<16 | 21)); //Set y0 Value
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (WriteIx1Data<<16 | 0000)); //Write 512byte to nandflash
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((CleCommand+0x10)<<16 | 0001)); //Write page Nandflash CMD2
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (WaitReady<<16 | 0002)); //Write page Nandflash CMD2
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (NandFlashCommandEnd<<16 | 3)); //Nandflash End
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_ExcuteCommandRam_Cmd+USB_Special_Patten, 0); //Excute Nandflash Program
Sleep(50);
///////////////////////Read verify
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((CleCommand+0x00)<<16 | 0000)); //Read page Nandflash CMD1
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (Ale4ByteCommand<<16 | 0001)); //Row Address 1
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((CleCommand+0x30)<<16 | 0002)); //Read page Nandflash CMD2
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (WaitReady<<16 | 0003)); //Wait Busy
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (NandFlashCommandEnd<<16 | 4)); //Nandflash End
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((StartAddress&&0xff)<<16 | 20)); //Set X0 Value
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (((StartAddress&&0x700)|(((StartAddress&&0xffff800)<<5)&&0xff0000))<<8 | 22)); //Set mr0 Value
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (((StartAddress<<5)&&0xff000000)>>8 | 23)); //Set mr1 Value
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_ExcuteCommandRam_Cmd+USB_Special_Patten, 0); //Excute Nandflash Program
Sleep(50);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (0xae00<<16 | SetIx1Value));
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, SetIx1bkramValue);
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (256<<16 | 21)); //Set y0 Value
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((ReadDataToIx1+0x00)<<16 | 0000)); //Read page Nandflash CMD1
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (NandFlashCommandEnd<<16 | 1)); //Nandflash End
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_ExcuteCommandRam_Cmd+USB_Special_Patten, 0); //Excute Nandflash Program
Sleep(50);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd( SET_ADDRESS + USB_Special_Patten , 512/2 ); //设置数据个数
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (0xae00<<16 | SetIx1Value));
Sleep(1);
USB_Special_Patten = USB_Special_Patten + 0x40;
// Write4L_Cmd(USB_Program_Jmp_Cmd+USB_Special_Patten, UploadDataCmd); //设置数据个数
Sleep(1);
USBICE_Read(&data[0], 512);
//Write End
StartAddress+=512;
Temp_Counter++;
if (Temp_Counter >= 20)
{
m_Status.Format("%d",StartAddress);
UpdateData(false);
Temp_Counter = 0;
}
}while (FileDataPtr<&ProgramData[DownloadLength]);
}
}
void CFlashWriterDlg::OnBrowse()
{
// TODO: Add your control notification handler code here
UpdateData(true);
char *p="xls File(*.xls)|*.xls";
CFileDialog cfdlg(true,NULL,NULL,OFN_HIDEREADONLY,p,NULL);
if (cfdlg.DoModal () == IDOK)
{
m_SourceFile = cfdlg.GetPathName ();
}
if ( !m_SourceFile.IsEmpty () )
UpdateData(false);
}
void CFlashWriterDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
if (USBReadyFlag)
{
Write4L_Cmd(USB_Program_Jmp_Cmd+USB_Special_Patten, ResetMCUCmd); //设置数据个数
Set_USB_Close(0x00);
}
CDialog::OnClose();
}
void CFlashWriterDlg::UsbSucessClose()
{
Write4L_Cmd(USB_Program_Jmp_Cmd+USB_Special_Patten, UsbOKExitCmd); //设置数据个数
Set_USB_Close(0x00);
}
void CFlashWriterDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CWnd *pWnd = GetDlgItem(IDC_STATIC_USB);
if ( ! Initial_NFlashWriter() )
{
USBReadyFlag=false;
pWnd->SetWindowText("USB Status:No USB Device!");
Close_USB();
GetDlgItem(IDC_Program_FLASH_WRITER)->EnableWindow(FALSE);
}
else
{
USBReadyFlag=true;
pWnd->SetWindowText("USB Status:USB is Ready!");
GetDlgItem(IDC_Program_FLASH_WRITER)->EnableWindow(TRUE);
}
CDialog::OnTimer(nIDEvent);
}
void CFlashWriterDlg::SetProgress(short MaxIndex)
{
((CProgressCtrl*)GetDlgItem(IDC_PROGRESS1))->SetRange(0, MaxIndex);
}
void CFlashWriterDlg::ProgressPrg(int Temp_Counter)
{
return;
((CProgressCtrl*)GetDlgItem(IDC_PROGRESS1))->SetPos(Temp_Counter);
UpdateData(false);
UpdateWindow();
}
void CFlashWriterDlg::OnButton2()
{
// TODO: Add your control notification handler code here
if (USBReadyFlag)
{
Write4L_Cmd(USB_Program_Jmp_Cmd+USB_Special_Patten, ResetMCUCmd); //设置数据个数
Set_USB_Close(0x00);
}
CDialog::OnOK();
}
void CFlashWriterDlg::OnOutofmemoryProgress1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CFlashWriterDlg::OnButton3()
{
OnProcEvent();
return;
CExcelRW rw;
if (!rw.Open("c:\\test.xls", "sheet1"))
{
AfxMessageBox("open failed");
return;
}
rw.Write(1, 1, _variant_t("ri o"));
rw.Save("c:\\test.xls");
_variant_t ri = rw.Read(1, 2);
rw.Close();
}
void CFlashWriterDlg::OnProcEvent()
{
// 初始化,发指令
// 启动线程
unsigned long tId;
HANDLE hThread = CreateThread(NULL, 0, ThreadInit, (PVOID)&m_hWnd, 0, &tId);
if (hThread == NULL)
{
AfxMessageBox("启动线程失败");
}
}
unsigned long __stdcall CFlashWriterDlg::ThreadInit(PVOID param)
{
HWND* pWnd = (HWND*)param;
// 等待指令操作
//short cmd = 1;
Sleep(1000);
char* buf = new char[20];
::PostMessage(*pWnd, MSG_INIT, (WPARAM)buf, 0);
//delete[] buf;
return 0;
}
LRESULT CFlashWriterDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if (message == MSG_INIT)
{
// 收到初始化返回指令,调用相关函数
char* buf = (char*)wParam;
delete[] buf;
AfxMessageBox("收到指令");
}
else if (message == MSG_READ)
{
// 收到读数据返回指令,调用相关函数
}
else if (message == MSG_ERASE)
{
// 收到擦除返回指令,调用相关函数
}
else if (message == MSG_WRITE)
{
// 收到输入返回指令,调用相关函数
}
else if (message == MSG_CHECK)
{
// 收到校验返回指令,调用相关函数
}
return CDialog::WindowProc(message, wParam, lParam);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -