ARM芯片用什么工具能读出里面的二进制内容

ARM芯片用什么工具能读出里面的二进制内容,第1张

ARM是一个内核,很多公司用ARM来设计芯片,比如恩智浦、赛普拉斯等。在这类芯片里面,都是有存放控制程序的Flash,二进制内容是存放在这个Flash里面的。一般用两种工具可以读出ARM芯片里面的二进制文件:1、仿真器;2编程器。如果你能找到这两种工具,读出来的二进制文件就.bin格式的,保存就行了。

使用对应的仿真器加上配套的驱动软件就能读取。

比如使用Jlink+Jflish

for

arm,连接好硬件电路后,打开JFlash

for

arm

软件,在工程设置里面选择好对应的STM32芯片,最红选择菜单中的“read

back”下的enter

chip,即可回读整片flash里面的内容了。

#include"config.h"

#include"spi.h"

#define UART_BPS 9600

U8 Send_BUF[16] // UART0数据接收缓冲区

//数码管的输出对应值 从0~F

const U8 SEGMENT_DATA[16] = {

0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,

0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E }

/********************************************************************************************************

*

* 函数名称:DataDisp(uint8 data,uint8 n)

*

* 功能描述:数据字符显示控制。显两位16进制数

*

* 入口参数:data 要显示的数据,取值0~15,n 选择第n个数码管,取值0~3

* 出口参数:无

*

* 全局变量: 无

* 调用模块: HC595_SendData(uint8 data)

*

********************************************************************************************************/

void DataDisp(U8 data,U8 n,U8 point)

{

if(point)

point=0x80

if(data<16 &&n<4)

{

Write_Byte_SPI((~SEGMENT_DATA[data])|point)// 显示高位

Write_Byte_SPI(~(1<<n)) // 显示低位

}

}

/****************************************************************************

**读取RTC的时间值,并将读出的时分秒值由串口发送到上位机显示。

****************************************************************************/

void SendTimeRtc(void)

{

U32 times

U8 bak

times = CTIME0 // 读取完整时钟寄存器0

bak = (times>>16)&0x1F // 取得时的值

Send_BUF[0] = bak/10+'0'

Send_BUF[1] = bak%10+'0'

Send_BUF[2] = ':'

DataDisp(bak/10,0,0)//显示小时

Delay(2)

DataDisp(bak%10,1,1)

Delay(4)

bak = (times>>8)&0x3F // 取得分的值

Send_BUF[3] = bak/10+'0'

Send_BUF[4] = bak%10+'0'

Send_BUF[5] = ':'

DataDisp(bak/10,2,0)//显示分钟

Delay(4)

DataDisp(bak%10,3,0)

Delay(2)

bak = times&0x3F // 取得秒的值

Send_BUF[6] = bak/10+'0'

Send_BUF[7] = bak%10+'0'

Send_BUF[8] = '\n'

}

/********************初始化实时时钟*******************************************/

void RTCInit(void)

{

YEAR = 2009 // 初化年

MONTH = 1 // 初化月

DOM = 4 // 初化日

HOUR = 12

MIN = 0

SEC = 0

CIIR = 0x01 // 设置秒值的增量产生一次中断

CCR = 0x11 // 使用独立振荡器,启动RTC

}

void PLL_Init(void)

{

PLLCON = 1

#if ((Fcclk / 4) / Fpclk) == 1

VPBDIV = 0

#endif

#if ((Fcclk / 4) / Fpclk) == 2

VPBDIV = 2

#endif

#if ((Fcclk / 4) / Fpclk) == 4

VPBDIV = 1

#endif

#if (Fcco / Fcclk) == 2

PLLCFG = ((Fcclk / Fosc) - 1) | (0 <<5)

#endif

#if (Fcco / Fcclk) == 4

PLLCFG = ((Fcclk / Fosc) - 1) | (1 <<5)

#endif

#if (Fcco / Fcclk) == 8

PLLCFG = ((Fcclk / Fosc) - 1) | (2 <<5)

#endif

#if (Fcco / Fcclk) == 16

PLLCFG = ((Fcclk / Fosc) - 1) | (3 <<5)

#endif

PLLFEED = 0xaa

PLLFEED = 0x55

while((PLLSTAT &(1 <<10)) == 0)

PLLCON = 3

PLLFEED = 0xaa

PLLFEED = 0x55

}

/****************************************************************************

**主函数:读取实时时钟的值,并从串口发送出去。

****************************************************************************/

void main(void)

{

IO0DIR = LED2CON // 设置LED1控制口为输出,其它I/O为输入

U8 SEC_tmp

Init_SPI()

PLL_Init()

U1FCR = 0x01//使能FIFO

RTCInit() //初始化RTC

while (1 )

{

SendTimeRtc()//读取时钟值,并向数码管发送数据显示

if(SEC_tmp!=Send_BUF[7])

{

SEC_tmp=Send_BUF[7]

if ((IO0SET &LED2CON) == 0)

IO0SET = LED2CON //关闭LED

else

IO0CLR = LED2CON

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11620273.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存