The dsPIC30F2011 is the smallest package in the dsPIC30F line: 18 pins, 12 I/O, 12 KB of program flash, 1 KB of SRAM, eight 12-bit analog channels. It has no data EEPROM. That omission is the single fact most often wrong in service documentation about this part, and it changes both what a read-out must capture and what a rebuilt board will do without it.
The Assumption That Costs Time
Because the dsPIC30F2010 has 1 KB of EEPROM and the dsPIC30F3012 has 1 KB, it is widely assumed that the whole family does. It does not. The 2011 and the 2012 carry no EEPROM at all; their parameter storage is entirely the customer’s problem.
So a request that reads “recover the code and the EEPROM” on an 18-pin dsPIC30F is describing something the die cannot provide. The honest answer is that the parameters are inside the flash array, either as a table of constants or as a region the firmware rewrites at runtime. Finding out which is part of the job, not an optional extra.
Twelve Kilobytes And Eight Channels
4,096 instructions of 24 bits, 1 KB of SRAM, a 12-bit converter sampling up to eight inputs at 100 ksps, one motor control PWM block, three 16-bit timers, one UART, SPI and I2C. Twelve I/O in an 18-pin package means every peripheral is fighting for a pin, and the firmware’s port configuration tells you which functions the design actually used.
That is a useful output in itself. On boards where only four or five pins are populated, the configuration is often the only record of what the product was meant to sense, and it survives even when the array does not.
Segment Protection, Not Block Rotation
The general segment protect bit lives in the configuration registers at 0xF80000, above the array. Protection is expressed as read and write restrictions on segments, not as the four independently locked blocks a PIC18 uses. Nothing can be recovered by reading an adjacent region.
What survives a lock is worth listing. The device ID at 0xFF0000 reads. The configuration registers read, so watchdog, oscillator and brown-out settings are recoverable. The array returns zeros, which on a 24-bit core is NOP, and a NOP at address zero is the tell, because no working firmware leaves the reset vector empty.
Why 12-Bit Conversion Matters Here
The 2011 uses a 12-bit converter where the 2010 uses 10 bits, so resolution per channel is four times finer and the arithmetic in the control loop carries more significant bits. A recovered image moved onto a 2010 would compile and run and produce a drive with the wrong gain, which is one reason to insist on the exact part number rather than a pin-compatible substitute.
For recovery, the practical effect is that calibration values are larger constants and easier to spot in the instruction stream. A twelve-bit offset stored as an immediate stands out from surrounding address arithmetic.
Where These Parts Are Used
Small motor drives, sensor interfaces, fan controllers, valve actuators, and a long tail of proprietary boards where the 18-pin package was chosen for space rather than for function. They fail from the usual causes: an electrolytic that dried out, a MOSFET that shorted into the gate drive, a connector that corroded.
Because the part is cheap and the board is often custom, replacement is rarely a purchasing exercise. Either the firmware is recovered or the product is redesigned, and the read-out price is usually a fraction of a redesign.
What The Bench Does
Access is over the standard ICSP pins, MCLR, PGC and PGD, with the device either in circuit or lifted. In circuit is preferable: an 18-pin SOIC on a small board is easy to probe and hard to remove without collateral damage. Where the part does not answer at all, the supply and the MCLR pull-up are checked before anything else, since a missing pull-up reads exactly like a dead die.
Reading program memory describes the electrical procedure, and invasive extraction covers the route when electrical access fails.
One consequence deserves repeating for anyone writing a work order: the absence of EEPROM means no parameter block can be delivered, because none exists. Deliverables are the array, the configuration registers, and an annotation that marks where the constants sit inside the code instead.
Deliverable For A Part With No EEPROM
The array, the configuration block, the device ID, and an explicit statement about where runtime parameters are stored, with the offsets marked in the annotation. Two reads compared word for word, a reset vector check, and a scan for the boundary between code and trailing 0xFFFFFF.
Our services page lists what each level includes. Send the complete marking, a board photograph and a note on what the product controls, then contact us. The dsPIC30F2012 is the 28-pin version of the same die with ten analog channels, and the dsPIC30F3012 doubles the array and adds the EEPROM back.