Hi, I'll try thoses patches today
Thanx for your help Jonathan ger...@openocd.zylin.com wrote: > This is an automated email from Gerrit. > > Mathias K?ster (kes...@freenet.de) just uploaded a new patch set to > Gerrit, which you can find at http://openocd.zylin.com/366 > > -- gerrit > > commit b45546d692c9d98efcf9c0e6bc99502e0d3f31f1 > Author: Mathias K <kes...@freenet.de> > Date: Thu Jan 12 11:59:47 2012 +0100 > > stlink: add read/write 8bit memory > > This patch add layout api funtions and implementation > to read/write 8bit memory. > > Change-Id: I8d145eb07e5afa9ce1830578e57d80a80d21e7dc > Signed-off-by: Mathias K <kes...@freenet.de> > > diff --git a/src/jtag/drivers/stlink_usb.c > b/src/jtag/drivers/stlink_usb.c index aaf55b0..1e079d5 100644 --- > a/src/jtag/drivers/stlink_usb.c +++ b/src/jtag/drivers/stlink_usb.c > @@ -87,6 +87,7 @@ struct stlink_usb_handle_s { > #define STLINK_DEBUG_RUNCORE 0x09 > #define STLINK_DEBUG_STEPCORE 0x0a > #define STLINK_DEBUG_SETFP 0x0b > +#define STLINK_DEBUG_READMEM_8BIT 0x0c > #define STLINK_DEBUG_WRITEMEM_8BIT 0x0d > #define STLINK_DEBUG_CLEARFP 0x0e > #define STLINK_DEBUG_WRITEDEBUGREG 0x0f > @@ -97,7 +98,7 @@ struct stlink_usb_handle_s { > #define STLINK_SWD_READCOREID 0x32 > > /** */ > -int stlink_usb_recv(void *handle, uint8_t *txbuf, int txsize, > uint8_t *rxbuf, +int stlink_usb_recv(void *handle, const uint8_t > *txbuf, int txsize, +uint8_t *rxbuf, > int rxsize) > { > struct stlink_usb_handle_s *h; > @@ -524,6 +525,65 @@ int stlink_usb_write_reg(void *handle, int num, > uint32_t val) } > > /** */ > +int stlink_usb_read_mem8(void *handle, uint32_t addr, uint16_t len, > + uint8_t *buffer) > +{ > + int res; > + struct stlink_usb_handle_s *h; > + > + assert(handle != NULL); > + > + h = (struct stlink_usb_handle_s *)handle; > + > + stlink_usb_init_buffer(handle); > + > + h->txbuf[0] = STLINK_DEBUG_COMMAND; > + h->txbuf[1] = STLINK_DEBUG_READMEM_8BIT; > + h_u32_to_le(h->txbuf + 2, addr); > + h_u16_to_le(h->txbuf + 2 + 4, len); > + > + res = stlink_usb_recv(handle, h->txbuf, STLINK_CMD_SIZE, h->rxbuf, > +len); > + > + if (res != ERROR_OK) > + return res; > + > + memcpy(buffer, h->rxbuf, len); > + > + return ERROR_OK; > +} > + > +/** */ > +int stlink_usb_write_mem8(void *handle, uint32_t addr, uint16_t len, > + const uint8_t *buffer) > +{ > + int res; > + struct stlink_usb_handle_s *h; > + > + assert(handle != NULL); > + > + h = (struct stlink_usb_handle_s *)handle; > + > + stlink_usb_init_buffer(handle); > + > + h->txbuf[0] = STLINK_DEBUG_COMMAND; > + h->txbuf[1] = STLINK_DEBUG_WRITEMEM_8BIT; > + h_u32_to_le(h->txbuf + 2, addr); > + h_u16_to_le(h->txbuf + 2 + 4, len); > + > + res = stlink_usb_recv(handle, h->txbuf, STLINK_CMD_SIZE, 0, 0); > + > + if (res != ERROR_OK) > + return res; > + > + res = stlink_usb_recv(handle, (uint8_t *) buffer, len, 0, 0); > + > + if (res != ERROR_OK) > + return res; > + > + return ERROR_OK; > +} > + > +/** */ > int stlink_usb_read_mem32(void *handle, uint32_t addr, uint16_t len, > uint32_t *buffer) > { > @@ -555,7 +615,7 @@ int stlink_usb_read_mem32(void *handle, uint32_t > addr, uint16_t len, > > /** */ > int stlink_usb_write_mem32(void *handle, uint32_t addr, uint16_t len, > - uint32_t *buffer) > + const uint32_t *buffer) > { > int res; > struct stlink_usb_handle_s *h; > @@ -583,8 +643,6 @@ int stlink_usb_write_mem32(void *handle, uint32_t > addr, uint16_t len, if (res != ERROR_OK) > return res; > > - memcpy(buffer, h->rxbuf, len); > - > return ERROR_OK; > } > > @@ -652,6 +710,10 @@ struct stlink_layout_api_s stlink_layout_api = { > /** */ > .write_reg = stlink_usb_write_reg, > /** */ > + .read_mem8 = stlink_usb_read_mem8, > + /** */ > + .write_mem8 = stlink_usb_write_mem8, > + /** */ > .read_mem32 = stlink_usb_read_mem32, > /** */ > .write_mem32 = stlink_usb_write_mem32, diff --git > a/src/jtag/stlink/stlink_layout.h b/src/jtag/stlink/stlink_layout.h > index 46517a7..bf1e2c6 100644 --- a/src/jtag/stlink/stlink_layout.h > +++ b/src/jtag/stlink/stlink_layout.h @@ -48,11 +48,17 @@ struct > stlink_layout_api_s { /** */ > int (*write_reg) (void *fd, int num, uint32_t val); > /** */ > + int (*read_mem8) (void *handle, uint32_t addr, uint16_t len, > + uint8_t *buffer); > + /** */ > + int (*write_mem8) (void *handle, uint32_t addr, uint16_t len, > + const uint8_t *buffer); > + /** */ > int (*read_mem32) (void *handle, uint32_t addr, uint16_t len, > uint32_t *buffer); > /** */ > int (*write_mem32) (void *handle, uint32_t addr, uint16_t len, > - uint32_t *buffer); > + const uint32_t *buffer); > /** */ > int (*idcode) (void *fd, uint32_t *idcode); > /** */ > > -- > > ---------------------------------------------------------------------------- -- > RSA(R) Conference 2012 > Mar 27 - Feb 2 > Save $400 by Jan. 27 > Register now! > http://p.sf.net/sfu/rsa-sfdev2dev2 > _______________________________________________ > OpenOCD-devel mailing list > OpenOCD-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/openocd-devel ------------------------------------------------------------------------------ RSA(R) Conference 2012 Mar 27 - Feb 2 Save $400 by Jan. 27 Register now! http://p.sf.net/sfu/rsa-sfdev2dev2 _______________________________________________ OpenOCD-devel mailing list OpenOCD-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openocd-devel