Исправлена 16-битная адресация на 8-битную

This commit is contained in:
Eugene 2023-11-28 16:26:22 +03:00
parent 1675ae9fce
commit a60fcc5f52
6 changed files with 116 additions and 93 deletions

View File

@ -6,7 +6,7 @@
<mapEntry key="org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser.PIN_CLONE_VIEW_2@#$Texas Instruments XDS100v2 USB Debug Probe_0/C28xx_CPU1@#$1" value="16-Bit Hex - C Style"/>
<mapEntry key="org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser.PIN_CLONE_VIEW_2@#$Texas Instruments XDS100v2 USB Debug Probe_0/C28xx_CPU2@#$1" value="16-Bit Hex - TI Style"/>
<mapEntry key="org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser.PIN_CLONE_VIEW_2@#$Texas Instruments XDS100v2 USB Debug Probe_0/Cortex_M4_0@#$0" value="16-Bit Hex - C Style"/>
<mapEntry key="org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser.PIN_CLONE_VIEW_3@#$Texas Instruments XDS100v2 USB Debug Probe_0/C28xx_CPU1@#$1" value="16-Bit Hex - C Style"/>
<mapEntry key="org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser.PIN_CLONE_VIEW_3@#$Texas Instruments XDS100v2 USB Debug Probe_0/C28xx_CPU1@#$1" value="8-Bit Hex - C Style"/>
<mapEntry key="org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser.PIN_CLONE_VIEW_3@#$Texas Instruments XDS100v2 USB Debug Probe_0/C28xx_CPU2@#$1" value="16-Bit Hex - TI Style"/>
<mapEntry key="org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser.PIN_CLONE_VIEW_3@#$Texas Instruments XDS100v2 USB Debug Probe_0/Cortex_M4_0@#$0" value="16-Bit Hex - C Style"/>
<mapEntry key="org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser.PIN_CLONE_VIEW_4@#$Texas Instruments XDS100v2 USB Debug Probe_0/C28xx_CPU1@#$1" value="16-Bit Hex - TI Style"/>
@ -31,7 +31,7 @@
<mapEntry key="org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser.PIN_CLONE_VIEW_5@#$Texas Instruments XDS100v2 USB Debug Probe_0/C28xx_CPU1" value="Data@@0x39000"/>
<mapEntry key="org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser@#$Texas Instruments XDS100v2 USB Debug Probe_0/C28xx_CPU1" value="Data@@0x2008000"/>
<mapEntry key="org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser@#$Texas Instruments XDS100v2 USB Debug Probe_0/C28xx_CPU2" value="Data@@0x82000"/>
<mapEntry key="org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser@#$Texas Instruments XDS100v2 USB Debug Probe_0/Cortex_M4_0" value="@@0x20080000"/>
<mapEntry key="org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser@#$Texas Instruments XDS100v2 USB Debug Probe_0/Cortex_M4_0" value="@@0x20082000"/>
</mapAttribute>
<stringAttribute key="com.ti.ccstudio.debug.debugModel.ATTR_DEBUGGER_PROPERTIES.TMS320F28388D.ccxml.Texas Instruments XDS100v2 USB Debug Probe_0/C28xx_CPU1" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot; ?&gt;&#10;&lt;PropertyValues&gt;&#10;&#10; &lt;property id=&quot;ConnectOnStartup&quot;&gt;&#10; &lt;curValue&gt;1&lt;/curValue&gt;&#10; &lt;/property&gt;&#10;&#10; &lt;property id=&quot;EnableInstalledBreakpoint&quot;&gt;&#10; &lt;curValue&gt;1&lt;/curValue&gt;&#10; &lt;/property&gt;&#10;&#10; &lt;property id=&quot;IgnoreSoftLaunchFailures&quot;&gt;&#10; &lt;curValue&gt;0&lt;/curValue&gt;&#10; &lt;/property&gt;&#10;&#10;&lt;/PropertyValues&gt;&#10;"/>
<stringAttribute key="com.ti.ccstudio.debug.debugModel.ATTR_GROUP_LIST" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;groupInfoData&gt;&#13;&#10;&lt;group autoload_group=&quot;true&quot; id=&quot;Group 1&quot; sync_group=&quot;false&quot;&gt;&#13;&#10;&lt;thread id=&quot;Texas Instruments XDS100v2 USB Debug Probe_0/C28xx_CPU1&quot;/&gt;&#13;&#10;&lt;/group&gt;&#13;&#10;&lt;/groupInfoData&gt;"/>

View File

@ -150,75 +150,82 @@ uint16_t Bl25cm1a_verify_8_bytes(uint32_t Addr, uint16_t * verify_data, uint16_
return 0;
}
void Bl25cm1a_read_data(uint32_t Addr, uint16_t quant16, uint16_t * read_data)
void Bl25cm1a_read_data(uint32_t Addr, uint16_t quant8, uint16_t * read_data)
{
uint32_t i=0;
uint32_t Addressfull8bit;
uint16_t addr_read_data[8];
if(quant16 > 4)
if(quant8 > 8)
{
for(i = 0; i < (quant16-4); i += 4)
for(i = 0; i < (quant8-8); i += 8)
{
Addressfull8bit = Addr+2*i;
Addressfull8bit = Addr+i;
Bl25cm1a_read_8_bytes(Addressfull8bit, addr_read_data, 8);
copy8_to_16(addr_read_data, read_data, 4);
read_data+=4;
}
}
if(i < quant16)
if(i < quant8)
{
Addressfull8bit = Addr+2*i;
Bl25cm1a_read_8_bytes(Addressfull8bit, addr_read_data, 2*(quant16 - i));
copy8_to_16(addr_read_data, read_data, (quant16 - i));
Addressfull8bit = Addr+i;
Bl25cm1a_read_8_bytes(Addressfull8bit, addr_read_data, (quant8 - i));
if((quant8 - i) & 1) {addr_read_data[quant8] = 0; quant8++; }
copy8_to_16(addr_read_data, read_data, (quant8 - i)/2);
}
}
uint16_t Bl25cm1a_verify_data(uint32_t Addr, uint16_t quant16, uint16_t * verify_data)
uint16_t Bl25cm1a_verify_data(uint32_t Addr, uint16_t quant8, uint16_t * verify_data)
{
uint32_t i=0;
uint16_t addr_vfy_data[8];
uint16_t quant16;
if(quant16 > 4)
if(quant8 > 8)
{
for(i = 0; i < (quant16-4); i += 4)
for(i = 0; i < (quant8-8); i += 8)
{
copy16_to_8(verify_data, addr_vfy_data, 4);
if(Bl25cm1a_verify_8_bytes(Addr+2*i, addr_vfy_data, 8)) return 1;
if(Bl25cm1a_verify_8_bytes(Addr+i, addr_vfy_data, 8)) return 1;
verify_data+=4;
}
}
if(i < quant16)
if(i < quant8)
{
copy16_to_8(verify_data, addr_vfy_data, (quant16 - i));
if(Bl25cm1a_verify_8_bytes(Addr+2*i, addr_vfy_data, 2*(quant16 - i))) return 1;
if((quant8 - i) & 1) quant16 = (quant8 + 1 - i)/2;
else quant16 = (quant8 - i)/2;
copy16_to_8(verify_data, addr_vfy_data, quant16);
if(Bl25cm1a_verify_8_bytes(Addr+i, addr_vfy_data, (quant8 - i))) return 1;
}
return 0;
}
void Bl25cm1a_write_1_page(uint32_t Addr, uint16_t quant, uint16_t * write_data)
void Bl25cm1a_write_1_page(uint32_t Addr, uint16_t quant8, uint16_t * write_data)
{
uint32_t i=0;
uint16_t addr_write_data[8];
uint32_t Addressfull8bit;
uint16_t quant16;
if(quant > 4)
if(quant8 > 8)
{
for(i = 0; i < (quant-4); i += 4)
for(i = 0; i < (quant8-8); i += 8)
{
copy16_to_8(write_data, addr_write_data, 4);
Addressfull8bit = Addr+2*i;
Addressfull8bit = Addr+i;
Bl25cm1a_write_8_bytes(Addressfull8bit, addr_write_data, 8);
write_data += 4;
}
}
if(i < quant)
if(i < quant8)
{
copy16_to_8(write_data, addr_write_data, (quant - i));
Addressfull8bit = Addr+2*i;
Bl25cm1a_write_8_bytes(Addressfull8bit, addr_write_data, 2*(quant - i));
if((quant8 - i) & 1) quant16 = (quant8 + 1 - i)/2;
else quant16 = (quant8 - i)/2;
copy16_to_8(write_data, addr_write_data, quant16);
Addressfull8bit = Addr+i;
Bl25cm1a_write_8_bytes(Addressfull8bit, addr_write_data, (quant8 - i));
}
}

View File

@ -194,75 +194,81 @@ void GD25Q16ETIGR_write_8_bytes(uint32_t Addr, uint16_t * write_data, uint16_t n
}
}
void GD25Q16ETIGR_read_data(uint32_t Addr, uint16_t quant16, uint16_t * read_data)
void GD25Q16ETIGR_read_data(uint32_t Addr, uint16_t quant8, uint16_t * read_data)
{
uint32_t i=0;
uint32_t Addressfull8bit;
uint16_t addr_read_data[8];
if(quant16 > 4)
if(quant8 > 8)
{
for(i = 0; i < (quant16-4); i += 4)
for(i = 0; i < (quant8-8); i += 8)
{
Addressfull8bit = Addr+2*i;
GD25Q16ETIGR_read_8_bytes(Addr+i, addr_read_data, 8);
Addressfull8bit = Addr+i;
GD25Q16ETIGR_read_8_bytes(Addressfull8bit, addr_read_data, 8);
copy8_to_16(addr_read_data, read_data, 4);
read_data+=4;
}
}
if(i < quant16)
if(i < quant8)
{
Addressfull8bit = Addr+2*i;
GD25Q16ETIGR_read_8_bytes(Addressfull8bit, addr_read_data, 2*(quant16 - i));
copy8_to_16(addr_read_data, read_data, (quant16 - i));
Addressfull8bit = Addr+i;
GD25Q16ETIGR_read_8_bytes(Addressfull8bit, addr_read_data, (quant8 - i));
if((quant8 - i) & 1) {addr_read_data[quant8] = 0; quant8++; }
copy8_to_16(addr_read_data, read_data, (quant8 - i)/2);
}
}
uint16_t GD25Q16ETIGR_verify_data(uint32_t Addr, uint16_t quant16, uint16_t * verify_data)
uint16_t GD25Q16ETIGR_verify_data(uint32_t Addr, uint16_t quant8, uint16_t * verify_data)
{
uint32_t i=0;
uint16_t addr_vfy_data[8];
uint16_t quant16;
if(quant16 > 4)
if(quant8 > 8)
{
for(i = 0; i < (quant16-4); i += 4)
for(i = 0; i < (quant8-8); i += 8)
{
copy16_to_8(verify_data, addr_vfy_data, 4);
if(GD25Q16ETIGR_verify_8_bytes(Addr+2*i, addr_vfy_data, 8)) return 1;
if(GD25Q16ETIGR_verify_8_bytes(Addr+i, addr_vfy_data, 8)) return 1;
verify_data+=4;
}
}
if(i < quant16)
if(i < quant8)
{
copy16_to_8(verify_data, addr_vfy_data, (quant16 - i));
if(GD25Q16ETIGR_verify_8_bytes(Addr+2*i, addr_vfy_data, 2*(quant16 - i))) return 1;
if((quant8 - i) & 1) quant16 = (quant8 + 1 - i)/2;
else quant16 = (quant8 - i)/2;
copy16_to_8(verify_data, addr_vfy_data, quant16);
if(GD25Q16ETIGR_verify_8_bytes(Addr+i, addr_vfy_data, (quant8 - i))) return 1;
}
return 0;
}
void GD25Q16ETIGR_write_1_page(uint32_t Addr, uint16_t quant, uint16_t * write_data) // çàïèñü âíóòðè îäíîé ñòðàíèöû
void GD25Q16ETIGR_write_1_page(uint32_t Addr, uint16_t quant8, uint16_t * write_data) // çàïèñü âíóòðè îäíîé ñòðàíèöû
{
uint32_t i=0;
uint16_t addr_write_data[8];
uint32_t Addressfull8bit;
uint16_t quant16;
if(quant > 4)
if(quant8 > 8)
{
for(i = 0; i < (quant-4); i += 4)
for(i = 0; i < (quant8-8); i += 8)
{
copy16_to_8(write_data, addr_write_data, 4);
Addressfull8bit = Addr+2*i;
Addressfull8bit = Addr+i;
GD25Q16ETIGR_write_8_bytes(Addressfull8bit, addr_write_data, 8);
write_data += 4;
}
}
if(i < quant)
if(i < quant8)
{
copy16_to_8(write_data, addr_write_data, (quant - i));
Addressfull8bit = Addr+2*i;
GD25Q16ETIGR_write_8_bytes(Addressfull8bit, addr_write_data, 2*(quant - i));
if((quant8 - i) & 1) quant16 = (quant8 + 1 - i)/2;
else quant16 = (quant8 - i)/2;
copy16_to_8(write_data, addr_write_data, quant16);
Addressfull8bit = Addr+i;
GD25Q16ETIGR_write_8_bytes(Addressfull8bit, addr_write_data, (quant8 - i));
}
}

View File

@ -36,78 +36,84 @@ uint16_t ZD24C02A_verify_16(uint16_t Addr, uint16_t * Array, uint16_t quant)
return VerifyErr;
}
uint16_t ZD24C02A_write(uint32_t Addr, uint16_t quant, uint16_t * write_data)
uint16_t ZD24C02A_write(uint32_t Addr, uint16_t quant8, uint16_t * write_data)
{
uint32_t i=0;
uint16_t addr_write_data[8];
uint32_t Addressfull8bit;
uint16_t quant16;
if(quant > 4)
if(quant8 > 8)
{
for(i = 0; i < (quant-4); i += 4)
for(i = 0; i < (quant8-8); i += 8)
{
copy16_to_8(write_data, addr_write_data, 4);
Addressfull8bit = Addr+2*i;
Addressfull8bit = Addr+i;
if( ZD24C02A_write_8(Addressfull8bit, addr_write_data, 8)) return 1;
write_data += 4;
}
}
if(i < quant)
if(i < quant8)
{
copy16_to_8(write_data, addr_write_data, (quant - i));
if((quant8 - i) & 1) quant16 = (quant8 + 1 - i)/2;
else quant16 = (quant8 - i)/2;
copy16_to_8(write_data, addr_write_data, quant16);
Addressfull8bit = Addr+2*i;
if( ZD24C02A_write_8(Addressfull8bit, addr_write_data, 2*(quant - i))) return 1;
if( ZD24C02A_write_8(Addressfull8bit, addr_write_data, (quant8 - i))) return 1;
}
return 0;
}
uint16_t ZD24C02A_read(uint32_t Addr, uint16_t quant16, uint16_t * read_data)
uint16_t ZD24C02A_read(uint32_t Addr, uint16_t quant8, uint16_t * read_data)
{
uint32_t i=0;
uint32_t Addressfull8bit;
uint16_t addr_read_data[8];
if(quant16 > 4)
if(quant8 > 8)
{
for(i = 0; i < (quant16-4); i += 4)
for(i = 0; i < (quant8-8); i += 8)
{
Addressfull8bit = Addr+2*i;
if( ZD24C02A_read_8(Addr+i, addr_read_data, 8)) return 1;
Addressfull8bit = Addr+i;
if( ZD24C02A_read_8(Addressfull8bit, addr_read_data, 8)) return 1;
copy8_to_16(addr_read_data, read_data, 4);
read_data+=4;
}
}
if(i < quant16)
if(i < quant8)
{
Addressfull8bit = Addr+2*i;
if( ZD24C02A_read_8(Addressfull8bit, addr_read_data, 2*(quant16 - i))) return 1;
copy8_to_16(addr_read_data, read_data, (quant16 - i));
Addressfull8bit = Addr+i;
if( ZD24C02A_read_8(Addressfull8bit, addr_read_data, (quant8 - i))) return 1;
if((quant8 - i) & 1) {addr_read_data[quant8] = 0; quant8++; }
copy8_to_16(addr_read_data, read_data, (quant8 - i)/2);
}
return 0;
}
uint16_t ZD24C02A_verify(uint32_t Addr, uint16_t quant16, uint16_t * verify_data)
uint16_t ZD24C02A_verify(uint32_t Addr, uint16_t quant8, uint16_t * verify_data)
{
uint32_t i=0;
uint16_t addr_vfy_data[8];
uint16_t Err_read = 0;
uint16_t quant16;
if(quant16 > 4)
if(quant8 > 8)
{
for(i = 0; i < (quant16-4); i += 4)
for(i = 0; i < (quant8-8); i += 8)
{
copy16_to_8(verify_data, addr_vfy_data, 4);
Err_read = ZD24C02A_verify_16(Addr+2*i, addr_vfy_data, 8);
Err_read = ZD24C02A_verify_16(Addr+i, addr_vfy_data, 8);
if(Err_read) return Err_read;
verify_data+=4;
}
}
if(i < quant16)
if(i < quant8)
{
copy16_to_8(verify_data, addr_vfy_data, (quant16 - i));
Err_read = ZD24C02A_verify_16(Addr+2*i, addr_vfy_data, 2*(quant16 - i));
if((quant8 - i) & 1) quant16 = (quant8 + 1 - i)/2;
else quant16 = (quant8 - i)/2;
copy16_to_8(verify_data, addr_vfy_data, quant16);
Err_read = ZD24C02A_verify_16(Addr+i, addr_vfy_data, (quant8 - i));
if(Err_read) return Err_read;
}
return 0;

View File

@ -19,6 +19,7 @@
#include "BL25CM1A.h"
#include "GD25Q16ETIGR.h"
#include "emif_init.h"
#include "spi_init.h"
#endif
//#pragma DATA_SECTION(readData, "MSGRAM_CPU_TO_CM")
//uint32_t readData[10];
@ -116,6 +117,9 @@ void getMessage_from_Cm_Flash(void)
uint32_t block1, block2;
uint16_t MemOperationError = 0;
if((InData & 1)||(InAddr & 1)) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_ADDR, INT_FLASH, 0, 0); return;}
InData /= 2;
InAddr /= 2;
if((InData > 2048)||(InData == 0)) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_LENGHT, INT_FLASH, 0, 0); return;}
if((InAddr+InData) > 0x40000) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_ADDR, INT_FLASH, 0, 0); return;}
IPC_sendCommand(IPC_CPU1_L_CM_R, COMMAND_ACCEPTED, INT_FLASH, 0, 0);
@ -179,7 +183,7 @@ void getMessage_from_Cm_EMIF(void)
{
uint16_t MemOperationError = 0;
if((InData > 2048)||(InData == 0)) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_LENGHT, EMIF, 0, 0); return;}
if((InAddr+InData) > 0x100000) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_ADDR, EMIF, 0, 0); return;}
if((InAddr+InData) > 0x100000*2) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_ADDR, EMIF, 0, 0); return;}
IPC_sendCommand(IPC_CPU1_L_CM_R, COMMAND_ACCEPTED, EMIF, 0, 0);
switch(InCommand >> 16)
@ -205,23 +209,23 @@ void getMessage_from_Cm_EMIF(void)
void getMessage_from_Cm_BL25CM1A(void)
{
uint16_t MemOperationError = 0;
if((InData > 2048)||(InData == 0)) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_LENGHT, BL25CM1A_1M_bit_SPI, 0, 0); return;}
if((InAddr+InData) > BL25CM1A0_SIZE) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_ADDR, BL25CM1A_1M_bit_SPI, 0, 0); return;}
if((InData > 2048*2)||(InData == 0)) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_LENGHT, BL25CM1A_1M_bit_SPI, 0, 0); return;}
if((InAddr+InData) > (BL25CM1A0_SIZE*2)) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_ADDR, BL25CM1A_1M_bit_SPI, 0, 0); return;}
IPC_sendCommand(IPC_CPU1_L_CM_R, COMMAND_ACCEPTED, BL25CM1A_1M_bit_SPI, 0, 0);
spi_TurnOffCS1_GD25Q16E();
switch(InCommand >> 16)
{
case READ:
Bl25cm1a_read_data(2*InAddr, InData, (uint16_t *)CPUXTOCMMSGRAM0_BASE);
Bl25cm1a_read_data(InAddr, InData, (uint16_t *)CPUXTOCMMSGRAM0_BASE);
IPC_sendCommand(IPC_CPU1_L_CM_R, DONE_SUCCESS, BL25CM1A_1M_bit_SPI, 0, 0);
break;
case WRITE:
Bl25cm1a_write_data(2*InAddr, InData, (uint16_t *)CMTOCPUXMSGRAM0_BASE);
Bl25cm1a_write_data(InAddr, InData, (uint16_t *)CMTOCPUXMSGRAM0_BASE);
IPC_sendCommand(IPC_CPU1_L_CM_R, DONE_SUCCESS, BL25CM1A_1M_bit_SPI, 0, 0);
break;
case VERIFY:
MemOperationError = Bl25cm1a_verify_data(2*InAddr, InData, (uint16_t *)CMTOCPUXMSGRAM0_BASE);
MemOperationError = Bl25cm1a_verify_data(InAddr, InData, (uint16_t *)CMTOCPUXMSGRAM0_BASE);
if(MemOperationError) IPC_sendCommand(IPC_CPU1_L_CM_R, ERROR_VERIFY, BL25CM1A_1M_bit_SPI, 0, 0);
else IPC_sendCommand(IPC_CPU1_L_CM_R, DONE_SUCCESS, BL25CM1A_1M_bit_SPI, 0, 0);
break;
@ -237,8 +241,8 @@ void getMessage_from_Cm_BL25CM1A(void)
void getMessage_from_Cm_GD25Q16E(void)
{
uint16_t MemOperationError = 0;
if((InData > 2048)||(InData == 0)) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_LENGHT, GD25Q16E_16M_bit_SPI, 0, 0); return;}
if((InAddr+InData) > GD25Q16E_SIZE) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_ADDR, GD25Q16E_16M_bit_SPI, 0, 0); return;}
if((InData > (2048*2))||(InData == 0)) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_LENGHT, GD25Q16E_16M_bit_SPI, 0, 0); return;}
if((InAddr+InData) > (GD25Q16E_SIZE*2)) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_ADDR, GD25Q16E_16M_bit_SPI, 0, 0); return;}
IPC_sendCommand(IPC_CPU1_L_CM_R, COMMAND_ACCEPTED, GD25Q16E_16M_bit_SPI, 0, 0);
Gpio15outSPI_CS_BL25CM1A(1);
@ -247,15 +251,15 @@ void getMessage_from_Cm_GD25Q16E(void)
switch(InCommand >> 16)
{
case READ:
GD25Q16ETIGR_read_data(InAddr*2, InData, (uint16_t *)CPUXTOCMMSGRAM0_BASE);
GD25Q16ETIGR_read_data(InAddr, InData, (uint16_t *)CPUXTOCMMSGRAM0_BASE);
IPC_sendCommand(IPC_CPU1_L_CM_R, DONE_SUCCESS, GD25Q16E_16M_bit_SPI, 0, 0);
break;
case WRITE:
GD25Q16ETIGR_write_data(InAddr*2, InData, (uint16_t *)CMTOCPUXMSGRAM0_BASE);
GD25Q16ETIGR_write_data(InAddr, InData, (uint16_t *)CMTOCPUXMSGRAM0_BASE);
IPC_sendCommand(IPC_CPU1_L_CM_R, DONE_SUCCESS, GD25Q16E_16M_bit_SPI, 0, 0);
break;
case VERIFY:
MemOperationError = GD25Q16ETIGR_verify_data(InAddr*2, InData, (uint16_t *)CMTOCPUXMSGRAM0_BASE);
MemOperationError = GD25Q16ETIGR_verify_data(InAddr, InData, (uint16_t *)CMTOCPUXMSGRAM0_BASE);
if(MemOperationError) IPC_sendCommand(IPC_CPU1_L_CM_R, ERROR_VERIFY, GD25Q16E_16M_bit_SPI, 0, 0);
else IPC_sendCommand(IPC_CPU1_L_CM_R, DONE_SUCCESS, GD25Q16E_16M_bit_SPI, 0, 0);
break;
@ -274,24 +278,24 @@ void getMessage_from_Cm_ZD24C02A(void)
{
uint16_t MemOperationError = 0;
uint16_t I2CErr = 0;
if((InData > 2048)||(InData == 0)) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_LENGHT, ZD24C02A_2K_I2C, 0, 0); return;}
if((InAddr+InData) > ZD24C02A_SIZE) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_ADDR, ZD24C02A_2K_I2C, 0, 0); return;}
if((InData > (2048*2))||(InData == 0)) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_LENGHT, ZD24C02A_2K_I2C, 0, 0); return;}
if((InAddr+InData) > (ZD24C02A_SIZE*2)) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_ADDR, ZD24C02A_2K_I2C, 0, 0); return;}
IPC_sendCommand(IPC_CPU1_L_CM_R, COMMAND_ACCEPTED, ZD24C02A_2K_I2C, 0, 0);
switch(InCommand >> 16)
{
case READ:
I2CErr = ZD24C02A_read(InAddr*2, InData, (uint16_t *)CPUXTOCMMSGRAM0_BASE);
I2CErr = ZD24C02A_read(InAddr, InData, (uint16_t *)CPUXTOCMMSGRAM0_BASE);
if(I2CErr) IPC_sendCommand(IPC_CPU1_L_CM_R, FLASH_ERR, ZD24C02A_2K_I2C, 0, 0);
else IPC_sendCommand(IPC_CPU1_L_CM_R, DONE_SUCCESS, ZD24C02A_2K_I2C, 0, 0);
break;
case WRITE:
I2CErr = ZD24C02A_write(InAddr*2, InData, (uint16_t *)CMTOCPUXMSGRAM0_BASE);
I2CErr = ZD24C02A_write(InAddr, InData, (uint16_t *)CMTOCPUXMSGRAM0_BASE);
if(I2CErr) IPC_sendCommand(IPC_CPU1_L_CM_R, FLASH_ERR, ZD24C02A_2K_I2C, 0, 0);
else IPC_sendCommand(IPC_CPU1_L_CM_R, DONE_SUCCESS, ZD24C02A_2K_I2C, 0, 0);
break;
case VERIFY:
MemOperationError = ZD24C02A_verify(InAddr*2, InData, (uint16_t *)CMTOCPUXMSGRAM0_BASE);
MemOperationError = ZD24C02A_verify(InAddr, InData, (uint16_t *)CMTOCPUXMSGRAM0_BASE);
if(MemOperationError == 2) IPC_sendCommand(IPC_CPU1_L_CM_R, ERROR_VERIFY, ZD24C02A_2K_I2C, 0, 0);
else if(MemOperationError == 1) IPC_sendCommand(IPC_CPU1_L_CM_R, FLASH_ERR, ZD24C02A_2K_I2C, 0, 0);
else IPC_sendCommand(IPC_CPU1_L_CM_R, DONE_SUCCESS, ZD24C02A_2K_I2C, 0, 0);
@ -356,8 +360,9 @@ void ipc_init(void)
//
IPC_initMessageQueue(IPC_CPU1_L_CM_R, &messageQueue, IPC_INT1, IPC_INT1);
IPC_initMessageQueue(IPC_CPU1_L_CM_R, &messageQueue, IPC_INT0, IPC_INT0);
#ifdef CPU1
GD25Q16ETIGR_clean_SectorWasErraised();
#endif
clear_BlockWasErased();
}

View File

@ -20,8 +20,7 @@ void transmitBData(uint16_t a);
void Gpio15outSPI_CS_BL25CM1A(uint16_t out_bit);
void spi_TurnOnCS1_GD25Q16E(void);
void spi_TurnOnCS1_GD25Q16E(void);
void spi_TurnOffCS1_GD25Q16E(void);
#ifdef ExtEEPROM_SPIB